/*******************************************************************************
* 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.*;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.*;
import static org.junit.Assert.assertTrue;
import org.easymock.EasyMock;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.wst.sse.sieditor.ui.v2.AbstractFormPageController;
import org.eclipse.wst.sse.sieditor.test.ui.v2.dt.propertyEditor.TypePropertyEditorTest;
import org.eclipse.wst.sse.sieditor.ui.v2.newtypedialog.ITypeDialogStrategy;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor;
import org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.typecommitters.ITypeCommitter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.command.emf.common.BaseNewTypeCompositeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.common.NewElementTypeCompositeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.common.NewSimpleTypeCompositeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.common.NewStructureTypeCompositeCommand;
import org.eclipse.wst.sse.sieditor.command.emf.common.setcommandbuilder.ISetTypeCommandBuilder;
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.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IType;
public class SetNewTypeTest {
final IModelObject modelObject = createMock(IModelObject.class);
final IModelRoot modelRoot = createMock(IModelRoot.class);
ISchema schema;
ITreeNode treeNode;
@Before
public void setUp() {
final IEnvironment env = createMock(IEnvironment.class);
schema = createNiceMock(ISchema.class);
expect(schema.getModelRoot()).andReturn(modelRoot).anyTimes();
expect(modelObject.getModelRoot()).andReturn(modelRoot).anyTimes();
expect(modelRoot.getEnv()).andReturn(env).anyTimes();
expect(env.getEditingDomain()).andReturn(null);
// expect(env.execute(isA(NewElementTypeCompositeCommand.class))).andReturn(null);
treeNode = createMock(ITreeNode.class);
replay(schema, modelRoot, modelObject/* , env */);
}
@After
public void clear() {
EasyMock.reset(modelObject, modelRoot, schema);
}
@Test
public void newElementType() throws ExecutionException {
final ISetTypeCommandBuilder commandBuilder = createMock(ISetTypeCommandBuilder.class);
final boolean[] executed = { false, false, false };
final AbstractFormPageController testFormPageController = new AbstractFormPageController(modelRoot, true) {
@Override
protected ISetTypeCommandBuilder createNewTypeSetTypeCommandBuilder(
final org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor propertyEditor) {
return commandBuilder;
}
@Override
protected String getEditorID() {
return ""; //$NON-NLS-1$
}
@Override
protected IModelObject getModelObject() {
return modelObject;
}
@Override
protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) {
return null;
}
@Override
public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
}
@Override
protected void executeNewTypeCommand(BaseNewTypeCompositeCommand command, final String typeName) {
assertTrue(command instanceof NewElementTypeCompositeCommand);
executed[0] = true;
};
@Override
protected void fireTreeNodeSelectionEvent(IModelObject modelObject) {
executed[2] = true;
};
@Override
protected void fireTreeNodeExpandEvent(IModelObject modelObject) {
executed[1] = true;
}
};
TypePropertyEditor property = new TypePropertyEditor(testFormPageController, null) {
@Override
public ITypeCommitter getTypeCommitter() {
// TODO Auto-generated method stub
return null;
}
@Override
protected IType getType() {
// TODO Auto-generated method stub
return null;
}
@Override
public ITypeDialogStrategy createNewTypeDialogStrategy() {
// TODO Auto-generated method stub
return null;
}
};
property.setInput(treeNode);
testFormPageController.newElementType("", schema, property); //$NON-NLS-1$
assertTrue(executed[0]);
assertTrue(executed[1]);
assertTrue(executed[2]);
}
@Test
public void newStructureType() {
final ISetTypeCommandBuilder commandBuilder = createMock(ISetTypeCommandBuilder.class);
final boolean[] executed = { false, false, false };
final AbstractFormPageController testFormPageController = new AbstractFormPageController(modelRoot, true) {
@Override
protected ISetTypeCommandBuilder createNewTypeSetTypeCommandBuilder(
final org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor propertyEditor) {
return commandBuilder;
}
@Override
protected String getEditorID() {
return ""; //$NON-NLS-1$
}
@Override
protected IModelObject getModelObject() {
return modelObject;
}
@Override
protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) {
return null;
}
@Override
public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
}
@Override
protected void fireTreeNodeExpandEvent(IModelObject modelObject) {
executed[1] = true;
}
@Override
protected void fireTreeNodeSelectionEvent(IModelObject modelObject) {
executed[2] = true;
};
@Override
protected void executeNewTypeCommand(BaseNewTypeCompositeCommand command, final String typeName) {
assertTrue(command instanceof NewStructureTypeCompositeCommand);
executed[0] = true;
}
};
TypePropertyEditor property = new TypePropertyEditor(testFormPageController, null) {
@Override
public ITypeCommitter getTypeCommitter() {
// TODO Auto-generated method stub
return null;
}
@Override
protected IType getType() {
// TODO Auto-generated method stub
return null;
}
@Override
public ITypeDialogStrategy createNewTypeDialogStrategy() {
// TODO Auto-generated method stub
return null;
}
};
property.setInput(treeNode);
testFormPageController.newStructureType("", schema, property); //$NON-NLS-1$
// assert the command was executed
assertTrue(executed[0]);
assertTrue(executed[1]);
assertTrue(executed[2]);
}
@Test
public void newSimpleType() {
final ISetTypeCommandBuilder commandBuilder = createMock(ISetTypeCommandBuilder.class);
final boolean[] executed = { false, false, false };
final AbstractFormPageController testFormPageController = new AbstractFormPageController(modelRoot, true) {
@Override
protected ISetTypeCommandBuilder createNewTypeSetTypeCommandBuilder(
final org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor propertyEditor) {
return commandBuilder;
}
@Override
protected String getEditorID() {
return ""; //$NON-NLS-1$
}
@Override
protected IModelObject getModelObject() {
return modelObject;
}
@Override
protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) {
return null;
}
@Override
public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
}
@Override
protected void fireTreeNodeExpandEvent(IModelObject modelObject) {
executed[1] = true;
}
@Override
protected void fireTreeNodeSelectionEvent(IModelObject modelObject) {
executed[2] = true;
};
@Override
protected void executeNewTypeCommand(BaseNewTypeCompositeCommand command, final String typeName) {
assertTrue(command instanceof NewSimpleTypeCompositeCommand);
executed[0] = true;
}
};
TypePropertyEditor property = new TypePropertyEditor(testFormPageController, null) {
@Override
public ITypeCommitter getTypeCommitter() {
// TODO Auto-generated method stub
return null;
}
@Override
protected IType getType() {
// TODO Auto-generated method stub
return null;
}
@Override
public ITypeDialogStrategy createNewTypeDialogStrategy() {
// TODO Auto-generated method stub
return null;
}
};
property.setInput(treeNode);
testFormPageController.newSimpleType("", schema, property); //$NON-NLS-1$
assertTrue(executed[0]);
assertTrue(executed[1]);
assertTrue(executed[2]);
}
@Test
public void testFireSelectionEventFromPostExecuteWhitSameModelObjects() {
final ISetTypeCommandBuilder commandBuilder = createMock(ISetTypeCommandBuilder.class);
final boolean[] executed = { false, false, false, true };
final IModelObject modelObject1 = createMock(IModelObject.class);
class AbstractFormPageControllerTest extends AbstractFormPageController {
public AbstractFormPageControllerTest() {
super(modelRoot, true);
}
@Override
protected ISetTypeCommandBuilder createNewTypeSetTypeCommandBuilder(
final org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor propertyEditor) {
return commandBuilder;
}
@Override
protected String getEditorID() {
return ""; //$NON-NLS-1$
}
@Override
protected IModelObject getModelObject() {
return modelObject;
}
@Override
protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) {
return null;
}
@Override
public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
}
@Override
protected void fireTreeNodeExpandEvent(IModelObject modelObject) {
executed[1] = true;
}
@Override
protected void fireTreeNodeSelectionEvent(IModelObject modelObject) {
assertSame(modelObject1, modelObject);
executed[0] = true;
};
@Override
protected void fireTreeNodeSelectionEvent(ITreeNode treeNode) {
executed[3] = false;
}
@Override
protected void fireTreeNodeExpandEvent(ITreeNode treeNode) {
}
@Override
protected void postExecuteNewTypeCommand(IModelObject modelObject, IModelObject sourceModelObject) {
super.postExecuteNewTypeCommand(modelObject, sourceModelObject);
executed[2] = true;
};
@Override
protected void executeNewTypeCommand(BaseNewTypeCompositeCommand command, final String typeName) {
}
}
AbstractFormPageControllerTest pageControler = new AbstractFormPageControllerTest();
expect(modelObject1.getModelRoot()).andReturn(modelRoot).anyTimes();
replay(modelObject1);
pageControler.postExecuteNewTypeCommand(modelObject1, modelObject1);
// assert the command was executed .newStructureType("", schema, null);
assertTrue(executed[0]);
assertTrue(executed[1]);
assertTrue(executed[2]);
assertTrue(executed[3]);
}
@Test
public void testFireSelectionEventFromPostExecuteWithDifferentModelObjects() {
final ISetTypeCommandBuilder commandBuilder = createMock(ISetTypeCommandBuilder.class);
final boolean[] executed = { false, false };
IModelObject modelObject1 = createMock(IModelObject.class);
expect(modelObject1.getModelRoot()).andReturn(modelRoot).anyTimes();
final IModelObject modelObject2 = createMock(IModelObject.class);
IModelRoot modelRoot2 = createMock(IModelRoot.class);
expect(modelObject2.getModelRoot()).andReturn(modelRoot2).anyTimes();
replay(modelObject1, modelObject2);
class AbstractFormPageControllerTest extends AbstractFormPageController {
public AbstractFormPageControllerTest() {
super(modelRoot, true);
}
@Override
protected ISetTypeCommandBuilder createNewTypeSetTypeCommandBuilder(
final org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor propertyEditor) {
return commandBuilder;
}
@Override
protected String getEditorID() {
return ""; //$NON-NLS-1$
}
@Override
protected IModelObject getModelObject() {
return modelObject;
}
@Override
protected ITreeNode getNextTreeNode(final ITreeNode selectedTreeNode) {
return null;
}
@Override
public void editItemNameTriggered(final ITreeNode treeNode, final String newName) {
}
@Override
protected void fireTreeNodeExpandEvent(IModelObject modelObject) {
}
@Override
protected void fireTreeNodeSelectionEvent(IModelObject modelObjectForSelection) {
executed[0] = true;
assertSame(modelObject2, modelObjectForSelection);
super.fireTreeNodeSelectionEvent(modelObjectForSelection);
}
@Override
protected void fireTreeNodeSelectionEvent(ITreeNode treeNode) {
executed[1] = true;
}
@Override
protected void fireTreeNodeExpandEvent(ITreeNode treeNode) {
}
@Override
public void postExecuteNewTypeCommand(IModelObject newModelObject, IModelObject sourceModelObject) {
super.postExecuteNewTypeCommand(newModelObject, sourceModelObject);
}
@Override
protected void executeNewTypeCommand(BaseNewTypeCompositeCommand command, final String typeName) {
}
}
AbstractFormPageControllerTest pageControler = new AbstractFormPageControllerTest();
pageControler.postExecuteNewTypeCommand(modelObject1, modelObject2);
assertTrue(executed[0]);
assertTrue(executed[1]);
}
}