/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.test.ui.v2.dt;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.reset;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.DataTypesContentProvider;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IDataTypesFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.IDataTypesTreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.IImportedTypesNode;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.INamespaceNode;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.ImportedXsdTypesNode;
import org.eclipse.wst.sse.sieditor.ui.v2.factory.TreeNodeMapper;
import org.eclipse.xsd.util.XSDConstants;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
import org.eclipse.wst.sse.sieditor.model.api.IXSDModelRoot;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
public class DataTypesContentProviderTest {
private static final String C_LOCATION = "c:/location"; //$NON-NLS-1$
private static final String SOME_LOCATION = "someLocation"; //$NON-NLS-1$
private static final String SOME_NAMESPACE = "someNamespace"; //$NON-NLS-1$
@Test
public void testGetChildren() {
final IDataTypesTreeNode node = createMock(IDataTypesTreeNode.class);
expect(node.getChildren()).andReturn(new Object[] {createMock(IDataTypesTreeNode.class)}).once();
replay(node);
final DataTypesContentProvider provider = createContentProvider();
final Object[] children = provider.getChildren(node);
verify(node);
assertEquals(1, children.length);
assertEquals(0, provider.getChildren(new Object()).length);
}
@Test
public void testGetParent() {
final IDataTypesTreeNode node = createMock(IDataTypesTreeNode.class);
expect(node.getParent()).andReturn(createMock(IDataTypesTreeNode.class)).once();
replay(node);
final DataTypesContentProvider provider = createContentProvider();
final Object parent = provider.getParent(node);
verify(node);
assertNotNull(parent);
assertTrue(parent instanceof IDataTypesTreeNode);
assertNull(provider.getParent(new Object()));
}
@Test
public void testHasChildren() {
final IDataTypesTreeNode node = createMock(IDataTypesTreeNode.class);
expect(node.hasChildren()).andReturn(Boolean.valueOf(true)).once();
replay(node);
final DataTypesContentProvider provider = createContentProvider();
assertTrue(provider.hasChildren(node));
verify(node);
reset(node);
expect(node.hasChildren()).andReturn(Boolean.valueOf(false)).once();
replay(node);
assertFalse(provider.hasChildren(node));
verify(node);
assertFalse(provider.hasChildren(new Object()));
}
@Test
public void testGetElementsXsdRoot() {
final IXSDModelRoot modelRootMock = createMock(IXSDModelRoot.class);
final ISchema schemaMock = createNiceMock(ISchema.class);
expect(modelRootMock.getSchema()).andReturn(schemaMock).once();
final ISimpleType containedTypeMock = createNiceMock(ISimpleType.class);
final Collection<IType> containedTypes = new ArrayList<IType>();
containedTypes.add(containedTypeMock);
expect(schemaMock.getAllContainedTypes()).andReturn(containedTypes).once();
expect(schemaMock.getLocation()).andReturn(SOME_LOCATION).once();
final Collection<ISchema> referredSchemas = new ArrayList<ISchema>();
final ISchema referredSchemaMock = createNiceMock(ISchema.class);
expect(referredSchemaMock.getNamespace()).andReturn(SOME_NAMESPACE).once();
referredSchemas.add(referredSchemaMock);
expect(schemaMock.getAllReferredSchemas()).andReturn(referredSchemas).once();
final IDataTypesFormPageController controllerMock = createNiceMock(IDataTypesFormPageController.class);
final TreeNodeMapper nodeMapper = new TreeNodeMapper();
expect(controllerMock.getTreeNodeMapper()).andReturn(nodeMapper).once();
replay(modelRootMock, schemaMock, referredSchemaMock, containedTypeMock, controllerMock);
final DataTypesContentProvider provider = new DataTypesContentProvider(controllerMock);
final Object[] elements = provider.getElements(modelRootMock);
assertEquals(2, elements.length);
assertTrue(elements[0] instanceof IDataTypesTreeNode);
assertEquals(containedTypeMock, ((IDataTypesTreeNode)elements[0]).getModelObject());
assertTrue(elements[1] instanceof ImportedXsdTypesNode);
}
@Test
public void testGetElementsWsdlRoot() {
final IWsdlModelRoot modelRoot = createMock(IWsdlModelRoot.class);
final IDescription description = createNiceMock(IDescription.class);
expect(modelRoot.getDescription()).andReturn(description).anyTimes();
final List<ISchema> schemas = new ArrayList<ISchema>();
final ISchema schema1 = createNiceMock(ISchema.class);
final ISchema schema2 = createNiceMock(ISchema.class);
final ISchema wsdlImportSchema = createMock(ISchema.class);
expect(wsdlImportSchema.getNamespace()).andReturn("").anyTimes();
expect(wsdlImportSchema.getComponent()).andReturn(null).anyTimes();
final ISchema builtInTypesSchema = createNiceMock(ISchema.class);
expect(builtInTypesSchema.getNamespace()).andReturn(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001).anyTimes();
final Collection<ISchema> referredSchemas = new ArrayList<ISchema>();
referredSchemas.add(builtInTypesSchema);
expect(schema1.getAllReferredSchemas()).andReturn(referredSchemas);
expect(schema1.getLocation()).andReturn(C_LOCATION);
expect(schema2.getAllReferredSchemas()).andReturn(referredSchemas);
schemas.add(schema1);
schemas.add(schema2);
final List<ISchema> allVisibleSchemas = new ArrayList<ISchema>();
allVisibleSchemas.add(wsdlImportSchema);
expect(description.getContainedSchemas()).andReturn(schemas).anyTimes();
expect(description.getAllVisibleSchemas()).andReturn(allVisibleSchemas).anyTimes();
final IDataTypesFormPageController controller = createMock(IDataTypesFormPageController.class);
final TreeNodeMapper nodeMapper = new TreeNodeMapper();
expect(controller.getTreeNodeMapper()).andReturn(nodeMapper).once();
replay(modelRoot, description, controller, schema1, schema2, builtInTypesSchema, wsdlImportSchema);
final DataTypesContentProvider provider = new DataTypesContentProvider(controller);
final Object[] elements = provider.getElements(modelRoot);
assertEquals(3, elements.length);
assertTrue(elements[0] instanceof INamespaceNode);
assertTrue(elements[1] instanceof INamespaceNode);
assertTrue(elements[2] instanceof IImportedTypesNode);
assertNotNull(nodeMapper.getTreeNode(schema1));
assertNotNull(nodeMapper.getTreeNode(schema2));
//
reset(modelRoot, description, controller, schema1, schema2, builtInTypesSchema, wsdlImportSchema);
expect(wsdlImportSchema.getNamespace()).andReturn("").anyTimes();
expect(wsdlImportSchema.getComponent()).andReturn(null).anyTimes();
expect(modelRoot.getDescription()).andReturn(description).anyTimes();
final ISchema aReferredSchema = createNiceMock(ISchema.class);
expect(aReferredSchema.getNamespace()).andReturn(SOME_NAMESPACE).anyTimes();
referredSchemas.add(aReferredSchema);
expect(builtInTypesSchema.getNamespace()).andReturn(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001).times(2);
expect(schema1.getAllReferredSchemas()).andReturn(referredSchemas).anyTimes();
expect(schema1.getLocation()).andReturn(C_LOCATION);
expect(schema2.getAllReferredSchemas()).andReturn(referredSchemas).anyTimes();
expect(description.getContainedSchemas()).andReturn(schemas).anyTimes();
expect(description.getAllVisibleSchemas()).andReturn(allVisibleSchemas).anyTimes();
expect(controller.getTreeNodeMapper()).andReturn(nodeMapper).once();
replay(modelRoot, description, controller, schema1, schema2, builtInTypesSchema, aReferredSchema, wsdlImportSchema);
final Object[] newElements = provider.getElements(modelRoot);
assertEquals(3, newElements.length);
assertTrue(newElements[0] instanceof INamespaceNode);
assertTrue(newElements[1] instanceof INamespaceNode);
assertTrue(newElements[2] instanceof IImportedTypesNode);
assertEquals(elements[0], newElements[0]);
assertEquals(elements[1], newElements[1]);
assertNotNull(nodeMapper.getTreeNode(schema1));
assertNotNull(nodeMapper.getTreeNode(schema2));
assertNotNull(nodeMapper.getTreeNode(description));
assertEquals(0, provider.getChildren(new Object()).length);
}
private DataTypesContentProvider createContentProvider() {
final IDataTypesFormPageController controller = createMock(IDataTypesFormPageController.class);
final DataTypesContentProvider provider = new DataTypesContentProvider(controller);
return provider;
}
}