/******************************************************************************* * 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.expect; import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Arrays; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.wst.sse.sieditor.ui.v2.dt.SiEditorDataTypesFormPageController; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.eclipse.wst.sse.sieditor.command.common.AbstractNotificationOperation; import org.eclipse.wst.sse.sieditor.command.common.CompositeCommand; import org.eclipse.wst.sse.sieditor.core.common.IEnvironment; import org.eclipse.wst.sse.sieditor.model.api.IModelObject; import org.eclipse.wst.sse.sieditor.model.api.IModelRoot; import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot; import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription; import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema; /** * * */ public class SiEditorDataTypesFormPageControllerTest { private static class TestSIDataTypesFormPageController extends SiEditorDataTypesFormPageController { private final boolean isDeleteAllowed; private Object editMatch; private ITreeNode nextTreeNode; private ITreeNode nextTreeNodeMatch; private Object removeNodeMatch; public TestSIDataTypesFormPageController(final IWsdlModelRoot model, final boolean readOnly) { super(model, readOnly); isDeleteAllowed = true; } @Override protected boolean isEditAllowed(final Object editedObject) { assertEquals(editMatch, editedObject); return isDeleteAllowed; } public void setEditedMatch(final Object deleteMatch) { this.editMatch = deleteMatch; } @Override protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) { assertEquals(nextTreeNodeMatch, selectedTreeNode); return nextTreeNode; } public void setNextTreeNode(final ITreeNode nextTreeNode) { this.nextTreeNode = nextTreeNode; } public void setNextTreeNodeMatch(final ITreeNode nextTreeNodeMatch) { this.nextTreeNodeMatch = nextTreeNodeMatch; } @Override public void removeNodeAndItsChildrenFromMap(final ITreeNode treeNode) { assertEquals(removeNodeMatch, treeNode); } public void setRemoveNodeMatch(final Object removeNodeMatch) { this.removeNodeMatch = removeNodeMatch; } } /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { } /** * @throws java.lang.Exception */ @AfterClass public static void tearDownAfterClass() throws Exception { } /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { } // /** // * Test method for {@link // org.eclipse.wst.sse.sieditor.ui.v2.dt.SiEditorDataTypesFormPageController#handleAddNewNamespaceAction()}. // */ // @Test // public final void testHandleAddNewNamespaceAction() { // fail("Not yet implemented"); // TODO // } // /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.dt.SiEditorDataTypesFormPageController#isAddNamespaceEnabled(ITreeNode)} * . */ @Test public final void testIsAddNamespaceEnabled_ReadOnly() { final IWsdlModelRoot wsdlRootMock = createMock(IWsdlModelRoot.class); expect(wsdlRootMock.getModelObject()).andReturn(createMock(IDescription.class)); expect(wsdlRootMock.getModelObject()).andReturn(null); final ITreeNode treeNodeMock = createMock(ITreeNode.class); expect(treeNodeMock.getCategories()).andReturn(0).anyTimes(); replay(wsdlRootMock, treeNodeMock); final SiEditorDataTypesFormPageController controller = new SiEditorDataTypesFormPageController(wsdlRootMock, true); assertFalse(controller.isAddNamespaceEnabled(treeNodeMock)); assertFalse(controller.isAddNamespaceEnabled(null)); verify(wsdlRootMock); } @Test public final void testIsAddNamespaceEnabled_ReadWrite() { final IWsdlModelRoot wsdlRootMock = createMock(IWsdlModelRoot.class); expect(wsdlRootMock.getModelObject()).andReturn(createMock(IDescription.class)); expect(wsdlRootMock.getModelObject()).andReturn(null); final ITreeNode treeNodeMock = createMock(ITreeNode.class); expect(treeNodeMock.getCategories()).andReturn(0).anyTimes(); replay(wsdlRootMock, treeNodeMock); final SiEditorDataTypesFormPageController controller = new SiEditorDataTypesFormPageController(wsdlRootMock, false); assertTrue(controller.isAddNamespaceEnabled(null)); assertFalse(controller.isAddNamespaceEnabled(treeNodeMock)); verify(wsdlRootMock); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.dt.DataTypesFormPageController#handleRemoveAction(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode)} * . */ @Test public final void testHandleRemoveAction() { final ITreeNode treeNodeMock = createMock(ITreeNode.class); final IWsdlModelRoot modelRootMock = createMock(IWsdlModelRoot.class); final IEnvironment envMock = createMock(IEnvironment.class); final IModelObject xsdComponentMock = createMock(ISchema.class); prepairHandleRemoveCommandMocks(treeNodeMock, modelRootMock, envMock, xsdComponentMock, CompositeCommand.class, Status.OK_STATUS); expect(modelRootMock.getDescription()).andReturn(null); expect(xsdComponentMock.getParent()).andReturn(null).anyTimes(); replay(treeNodeMock, modelRootMock, envMock, xsdComponentMock); final TestSIDataTypesFormPageController controller = new TestSIDataTypesFormPageController(modelRootMock, false); controller.setEditedMatch(xsdComponentMock); controller.setNextTreeNodeMatch(treeNodeMock); controller.setNextTreeNode(createMock(ITreeNode.class)); controller.setRemoveNodeMatch(treeNodeMock); controller.handleRemoveAction(Arrays.asList(treeNodeMock)); verify(treeNodeMock, modelRootMock, envMock); } private void prepairHandleRemoveCommandMocks(final ITreeNode treeNodeMock, final IModelRoot modelRootMock, final IEnvironment envMock, final IModelObject xsdComponentMock, final Class<? extends AbstractNotificationOperation> commandToBeExecuted, final IStatus returnStatus) { expect(treeNodeMock.getModelObject()).andReturn(xsdComponentMock); expect(modelRootMock.getEnv()).andReturn(envMock).times(3); expect(envMock.getEditingDomain()).andReturn(null).times(2); try { expect(envMock.execute(isA(commandToBeExecuted))).andReturn(returnStatus); } catch (final ExecutionException e) { fail(); } } // /** // * Test method for {@link // org.eclipse.wst.sse.sieditor.ui.v2.dt.SiEditorDataTypesFormPageController#createRemoveCommand(org.eclipse.wst.sse.sieditor.model.api.IModelObject)}. // */ // @Test // public final void testCreateRemoveCommand() { // TestSIDataTypesFormPageController controller = new // TestSIDataTypesFormPageController(null,false); // controller.setNewModel(createMock(IXSDModelRoot.class), false); // //result from the DTFormPageController on this argument should be null // assertEquals(null,controller.createRemoveCommand(createMock(IModelObject.class))); // //if the model object is a ISchema - the model root must be a // WSDLModelRoot // //otherwise an exception should be thrown // Boolean caughtFlag = Boolean.valueOf(false); // try{ // controller.createRemoveCommand(createMock(ISchema.class)); // }catch(IllegalArgumentException e) // { // assertNotNull(e.getMessage()); // caughtFlag = Boolean.valueOf(true); // } // Assert.assertTrue("an exception which should have been thrown was not cought", caughtFlag); //$NON-NLS-1$ // // IWsdlModelRoot modelRootMock = createMock(IWsdlModelRoot.class); // IEnvironment envMock = createMock(IEnvironment.class); // expect(modelRootMock.getDescription()).andReturn(null); // expect(modelRootMock.getEnv()).andReturn(envMock); // expect(envMock.getEditingDomain()).andReturn(createMock(InternalTransactionalEditingDomain.class)); // replay(modelRootMock,envMock); // // controller = new TestSIDataTypesFormPageController(modelRootMock, false); // AbstractNotificationOperation createdRemoveCommand = // controller.createRemoveCommand(createMock(ISchema.class)); // assertNotNull(createdRemoveCommand); // verify(modelRootMock,envMock); // } }