blob: 1e7b5127080d2bad04754bea0f6444d6b6468e48 [file] [log] [blame]
/*******************************************************************************
* 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.*;
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 junit.framework.Assert;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.ElementConstraintsController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IConstraintsController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IDataTypesFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.SimpleTypeConstraintsController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.NamespaceNode;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementOfGlobalTypeStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.sections.elements.ElementNodeDetailsController.CardinalityType;
import org.eclipse.xsd.XSDTypeDefinition;
import org.eclipse.xsd.util.XSDConstants;
import org.junit.Test;
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.IType;
public class ElementOfGlobalTypeStrategyTest implements IElementStrategyTest {
protected ElementOfGlobalTypeStrategy strategy;
protected IDataTypesFormPageController controllerMock;
public ElementOfGlobalTypeStrategyTest() {
controllerMock = createMock(IDataTypesFormPageController.class);
strategy = createStrategy();
}
protected ElementOfGlobalTypeStrategy createStrategy() {
return new ElementOfGlobalTypeStrategy(controllerMock);
}
@Test
public void testGetCardinality() {
testCardinalityText(0, 5);
testCardinalityText(10, 0);
testCardinalityText(0, CardinalityType.UNBOUNDED);
testCardinalityText(1, 1);
testCardinalityText(0, 1);
testCardinalityText(1, CardinalityType.UNBOUNDED);
}
private void testCardinalityText(int min, int max) {
final String expectedCardinalityString = min + " .. " + (max == CardinalityType.UNBOUNDED ? "*" : max);
IElement input = createMock(IElement.class);
expect(input.getMinOccurs()).andReturn(min).anyTimes();
expect(input.getMaxOccurs()).andReturn(max).anyTimes();
replay(input);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
CardinalityType cardinality = strategy.getCardinality();
Assert.assertEquals(expectedCardinalityString, cardinality.toString());
}
@Test
public void testGetName() {
IElement input = createMock(IElement.class);
String elementName = "name";
expect(input.getName()).andReturn(elementName).once();
replay(input);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
String name = strategy.getName();
verify(input);
Assert.assertEquals(elementName, name);
}
@Test
public void testGetNamespace() {
IElement input = createMock(IElement.class);
String elementNs = "namespace";
expect(input.getNamespace()).andReturn(elementNs).once();
replay(input);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
String ns = strategy.getNamespace();
verify(input);
Assert.assertEquals(NamespaceNode.getNamespaceDisplayText(elementNs), ns);
}
@Test
public void testGetNillable() {
IElement input = createMock(IElement.class);
expect(input.getNillable()).andReturn(true).once();
replay(input);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
boolean nillable = strategy.getNillable();
verify(input);
Assert.assertEquals(true, nillable);
}
@Test
public void testIsCardinalityApplicable() {
Assert.assertEquals(true, strategy.isCardinalityApplicable());
}
@Test
public void testIsCardinalityEditable() {
Assert.assertEquals(true, strategy.isCardinalityEditable());
}
@Test
public void testIsConstraintsSectionApplicable() {
IElement input = createMock(IElement.class);
ISimpleType type = createNiceMock(ISimpleType.class);
expect(input.getType()).andStubReturn(type);
replay(input, type);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
Assert.assertEquals(true, strategy.isConstraintsSectionApplicable());
}
@Test
public void testIsConstraintsSectionApplicableForAnySimpleType() {
IElement input = createMock(IElement.class);
ISimpleType type = createMock(ISimpleType.class);
expect(input.getType()).andStubReturn(type);
XSDTypeDefinition anySimpleType = createMock(XSDTypeDefinition.class);
expect(anySimpleType.getTargetNamespace()).andReturn(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);
expect(anySimpleType.getName()).andReturn("anySimpleType");
expect(type.getComponent()).andReturn(anySimpleType);
replay(input, type, anySimpleType);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
Assert.assertFalse(strategy.isConstraintsSectionApplicable());
}
@Test
public void testIsNameApplicable() {
Assert.assertEquals(true, strategy.isNameApplicable());
}
@Test
public void testIsNameEditable() {
Assert.assertEquals(true, strategy.isNameEditable());
}
@Test
public void testIsNamespaceApplicable() {
Assert.assertEquals(true, strategy.isNamespaceApplicable());
}
@Test
public void testIsNamespaceEditable() {
Assert.assertEquals(false, strategy.isNamespaceEditable());
}
@Test
public void testIsNillableEditable() {
Assert.assertEquals(true, strategy.isNillableEditable());
}
@Test
public void testGetBaseType() {
Assert.assertNull(strategy.getBaseType());
}
@Test
public void testGetConstraintsSectionControllerAnonymous() {
IElement element = createNiceMock(IElement.class);
ISimpleType type = createNiceMock(ISimpleType.class);
expect(type.isAnonymous()).andStubReturn(true);
expect(element.getType()).andStubReturn(type);
replay(element, type);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(element).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
IConstraintsController controller = strategy.getConstraintsSectionController();
Assert.assertNotNull(controller);
Assert.assertTrue(controller instanceof SimpleTypeConstraintsController);
Assert.assertEquals(type, controller.getType());
}
@Test
public void testGetConstraintsSectionController() {
IElement element = createNiceMock(IElement.class);
ISimpleType type = createNiceMock(ISimpleType.class);
expect(type.isAnonymous()).andStubReturn(false);
expect(element.getType()).andStubReturn(type);
replay(element, type);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(element).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
IConstraintsController controller = strategy.getConstraintsSectionController();
Assert.assertNotNull(controller);
Assert.assertTrue(controller instanceof ElementConstraintsController);
Assert.assertEquals(type, controller.getType());
}
@Test
public void testIsBaseTypeApplicable() {
Assert.assertEquals(false, strategy.isBaseTypeApplicable());
}
@Test
public void testIsBaseTypeEditable() {
Assert.assertEquals(false, strategy.isBaseTypeEditable());
}
@Test
public void testIsTypeApplicable() {
Assert.assertEquals(true, strategy.isTypeApplicable());
}
@Test
public void testIsTypeEditable() {
Assert.assertEquals(true, strategy.isTypeEditable());
}
@Test
public void testGetType() {
IElement input = createMock(IElement.class);
IType elementTypeMock = createMock(IType.class);
expect(input.getType()).andReturn(elementTypeMock).once();
replay(input, elementTypeMock);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
IType type = strategy.getType();
verify(input, elementTypeMock);
Assert.assertEquals(elementTypeMock, type);
}
@Test
public void testIsNillableApplicable() {
Assert.assertEquals(true, strategy.isNillableApplicable());
}
@Test
public void testSetBaseType() {
// nothing to test, ElementOfGlobalTypeStrategy.setBaseType() does
// nothing
}
@Test
public void testSetCardinality() {
IElement input = createMock(IElement.class);
controllerMock.setCardinality(null, input, 0, -1);
replay(input, controllerMock);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
strategy.setCardinality(CardinalityType.ZERO_TO_MANY);
verify(input, controllerMock);
}
@Test
public void testSetInput() {
// nothing to test here
}
@Test
public void testSetName() {
IElement input = createMock(IElement.class);
controllerMock.renameElement(input, "newName");
expect(input.getName()).andReturn("oldName").once();
replay(input, controllerMock);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
strategy.setName("newName");
verify(input, controllerMock);
// try with same name, rename should not happen
reset(input, controllerMock);
expect(input.getName()).andReturn("oldName").once();
replay(input, controllerMock);
strategy.setName("oldName");
verify(input, controllerMock);
}
@Test
public void testSetNamespace() {
try {
strategy.setNamespace("ns");
} catch (IllegalStateException e) {
return;
}
Assert.fail();
}
@Test
public void testSetNillable() {
IElement input = createMock(IElement.class);
controllerMock.setNillable(null, input, true);
expect(input.getNillable()).andReturn(false).once();
replay(input, controllerMock);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
strategy.setNillable(true);
verify(input, controllerMock);
// try with same nillable, set nillable should not happen
reset(input, controllerMock);
expect(input.getNillable()).andReturn(false).once();
replay(input, controllerMock);
strategy.setNillable(false);
verify(input, controllerMock);
}
@Test
public void testSetType() {
IElement input = createMock(IElement.class);
IType typeMock = createMock(IType.class);
controllerMock.setTypeForElement(typeMock, null, input);
expect(input.getType()).andReturn(null).once();
replay(input, controllerMock, typeMock);
ITreeNode treeNode = createMock(ITreeNode.class);
expect(treeNode.getModelObject()).andReturn(input).anyTimes();
replay(treeNode);
strategy.setInput(treeNode);
strategy.setType(typeMock);
verify(input, controllerMock, typeMock);
// try with same nillable, set nillable should not happen
reset(input, controllerMock, typeMock);
expect(input.getType()).andReturn(typeMock).once();
replay(input, controllerMock, typeMock);
strategy.setType(typeMock);
verify(input, controllerMock, typeMock);
}
}