/*******************************************************************************
* 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.sections.elements;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import junit.framework.Assert;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.AttributeStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IDataTypesFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementNodeDetailsController;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementOfAnonymousTypeStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementOfGlobalTypeStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementRefToGlobalElementStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.GlobalElementStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.IElementStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.SimpleTypeStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.StructureTypeStrategy;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType;
public class ElementNodeDetailsControllerTest {
private IElementStrategy strategy;
private final ElementNodeDetailsController controller;
private final IDataTypesFormPageController dtFormPageControllerMock;
public ElementNodeDetailsControllerTest() {
dtFormPageControllerMock = createMock(IDataTypesFormPageController.class);
controller = new ElementNodeDetailsController(dtFormPageControllerMock) {
@Override
protected IElementStrategy calculateStrategy(final ITreeNode input) {
final IElementStrategy calculatedStrategy = super.calculateStrategy(input);
strategy = calculatedStrategy;
return calculatedStrategy;
}
};
}
@Test
public void testSetAttributeInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
expect(elementMock.isAttribute()).andReturn(true).once();
replay(elementMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof AttributeStrategy);
}
@Test
public void testSetGlobalElementRefInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
expect(elementMock.isAttribute()).andReturn(false).once();
final IStructureType complexTypeMock = createMock(IStructureType.class);
expect(complexTypeMock.isElement()).andReturn(true).once();
expect(elementMock.getType()).andReturn(complexTypeMock).once();
replay(elementMock, complexTypeMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof ElementRefToGlobalElementStrategy);
}
@Test
public void testSetAnonymousComplexTypeInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
final IStructureType complexTypeMock = createMock(IStructureType.class);
expect(elementMock.isAttribute()).andReturn(false).once();
expect(complexTypeMock.isElement()).andReturn(false).once();
expect(complexTypeMock.isAnonymous()).andReturn(true).once();
expect(elementMock.getType()).andReturn(complexTypeMock).once();
replay(elementMock, complexTypeMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof ElementOfAnonymousTypeStrategy);
}
@Test
public void testSetGlobalComplexTypeInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
final IStructureType complexTypeMock = createMock(IStructureType.class);
expect(elementMock.isAttribute()).andReturn(false).once();
expect(complexTypeMock.isElement()).andReturn(false).once();
expect(complexTypeMock.isAnonymous()).andReturn(false).once();
expect(elementMock.getType()).andReturn(complexTypeMock).once();
replay(elementMock, complexTypeMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof ElementOfGlobalTypeStrategy);
}
@Test
public void testSetAnonymousSimpleTypeInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
expect(elementMock.isAttribute()).andReturn(false).once();
final ISimpleType simpleTypeMock = createMock(ISimpleType.class);
expect(simpleTypeMock.isAnonymous()).andReturn(true).once();
expect(elementMock.getType()).andReturn(simpleTypeMock).once();
replay(elementMock, simpleTypeMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof ElementOfAnonymousTypeStrategy);
}
@Test
public void testSetGlobalSimpleTypeInput() throws Exception {
final IElement elementMock = createMock(IElement.class);
final ISimpleType simpleTypeMock = createMock(ISimpleType.class);
expect(elementMock.isAttribute()).andReturn(false).once();
expect(simpleTypeMock.isAnonymous()).andReturn(false).once();
expect(elementMock.getType()).andReturn(simpleTypeMock).once();
replay(elementMock, simpleTypeMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof ElementOfGlobalTypeStrategy);
}
@Test
public void testGlobalElementStrategy() throws Exception {
final IStructureType elementMock = createMock(IStructureType.class);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
expect(elementMock.isElement()).andReturn(true);
replay(treeNode, elementMock);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof GlobalElementStrategy);
}
@Test
public void testStructureTypeStrategy() throws Exception {
final IStructureType elementMock = createMock(IStructureType.class);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
expect(elementMock.isElement()).andReturn(false);
replay(treeNode, elementMock);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof StructureTypeStrategy);
}
@Test
public void testSimpleTypeStrategy() throws Exception {
final ISimpleType elementMock = createMock(ISimpleType.class);
replay(elementMock);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(elementMock).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
verify(elementMock);
Assert.assertTrue(strategy instanceof SimpleTypeStrategy);
}
@Test(expected=IllegalArgumentException.class)
public void testIllegalTypeForStrategy() throws Exception {
final IModelObject modelObject = createMock(IModelObject.class);
final ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(modelObject).anyTimes();
replay(treeNode);
controller.setInput(treeNode);
}
}