/**
* Copyright (c) 2004-2006 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.test.edit.command;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.test.models.ref.E;
import org.eclipse.emf.test.models.ref.RefFactory;
import org.eclipse.emf.test.models.ref.RefPackage;
import org.eclipse.emf.test.models.ref.provider.RefItemProviderAdapterFactory;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Tests for RemoveCommand. In each case, the model is built, the command is created, executed, undone, and redone.
* The state of the model and the executability/undoability/redoability of the command are tested between each step.
*/
public class RemoveCommandTest extends TestCase
{
public RemoveCommandTest(String name)
{
super(name);
}
public static Test suite()
{
TestSuite suite = new TestSuite("RemoveCommandTest");
suite.addTest(new RemoveCommandTest("testRemoveSameValue"));
suite.addTest(new RemoveCommandTest("testRemoveSameValues"));
suite.addTest(new RemoveCommandTest("testRemoveEqualValues"));
return suite;
}
/**
* The Ref test package.
*/
protected RefPackage refPackage;
/**
* The Ref factory.
*/
protected RefFactory refFactory;
/**
* An editing domain for for these tests.
*/
protected EditingDomain editingDomain;
@Override
protected void setUp() throws Exception
{
refPackage = RefPackage.eINSTANCE;
refFactory = refPackage.getRefFactory();
AdapterFactory adapterFactory = new RefItemProviderAdapterFactory();
CommandStack commandStack = new BasicCommandStack();
editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack);
}
public void testRemoveSameValue()
{
E e = refFactory.createE();
String s0 = "0";
String s1 = "1";
String s2 = "2";
String s3 = new String(s0);
EList<String> labels = e.getLabels();
labels.add(s0);
labels.add(s1);
labels.add(s2);
labels.add(s3);
labels.add(s0);
Command remove = RemoveCommand.create(editingDomain, e, refPackage.getE_Labels(), s3);
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s2, labels.get(2));
assertSame(s3, labels.get(3));
assertSame(s0, labels.get(4));
assertNotSame(s0, labels.get(3));
assertTrue(remove.canExecute());
CommandStack stack = editingDomain.getCommandStack();
stack.execute(remove);
assertEquals(4, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s2, labels.get(2));
assertSame(s0, labels.get(3));
assertTrue(stack.canUndo());
stack.undo();
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s2, labels.get(2));
assertSame(s3, labels.get(3));
assertSame(s0, labels.get(4));
assertNotSame(s0, labels.get(3));
assertTrue(stack.canRedo());
stack.redo();
assertEquals(4, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s2, labels.get(2));
assertSame(s0, labels.get(3));
assertTrue(stack.canUndo());
}
public void testRemoveSameValues()
{
E e = refFactory.createE();
String s0 = "0";
String s1 = "1";
String s2 = "2";
String s3 = new String(s1);
EList<String> labels = e.getLabels();
labels.add(s0);
labels.add(s1);
labels.add(s1);
labels.add(s2);
labels.add(s3);
Collection<String> collection = new ArrayList<String>();
collection.add(s0);
collection.add(s1);
collection.add(s3);
Command remove = RemoveCommand.create(editingDomain, e, refPackage.getE_Labels(), collection);
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s1, labels.get(2));
assertSame(s2, labels.get(3));
assertSame(s3, labels.get(4));
assertNotSame(s1, labels.get(4));
assertTrue(remove.canExecute());
CommandStack stack = editingDomain.getCommandStack();
stack.execute(remove);
assertEquals(2, labels.size());
assertSame(s1, labels.get(0));
assertSame(s2, labels.get(1));
assertTrue(stack.canUndo());
stack.undo();
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s1, labels.get(2));
assertSame(s2, labels.get(3));
assertSame(s3, labels.get(4));
assertNotSame(s1, labels.get(4));
assertTrue(stack.canRedo());
stack.redo();
assertEquals(2, labels.size());
assertSame(s1, labels.get(0));
assertSame(s2, labels.get(1));
assertTrue(stack.canUndo());
}
public void testRemoveEqualValues()
{
E e = refFactory.createE();
String s0 = "0";
String s1 = "1";
String s2 = "2";
String s3 = new String(s1);
EList<String> labels = e.getLabels();
labels.add(s0);
labels.add(s1);
labels.add(s3);
labels.add(s2);
labels.add(s1);
Collection<String> collection = new ArrayList<String>();
collection.add(s1);
collection.add(s1);
collection.add(s1);
Command remove = RemoveCommand.create(editingDomain, e, refPackage.getE_Labels(), collection);
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s3, labels.get(2));
assertSame(s2, labels.get(3));
assertSame(s1, labels.get(4));
assertNotSame(s1, labels.get(2));
assertTrue(remove.canExecute());
CommandStack stack = editingDomain.getCommandStack();
stack.execute(remove);
assertEquals(2, labels.size());
assertSame(s0, labels.get(0));
assertSame(s2, labels.get(1));
assertTrue(stack.canUndo());
stack.undo();
assertEquals(5, labels.size());
assertSame(s0, labels.get(0));
assertSame(s1, labels.get(1));
assertSame(s3, labels.get(2));
assertSame(s2, labels.get(3));
assertSame(s1, labels.get(4));
assertNotSame(s1, labels.get(2));
assertTrue(stack.canRedo());
stack.redo();
assertEquals(2, labels.size());
assertSame(s0, labels.get(0));
assertSame(s2, labels.get(1));
assertTrue(stack.canUndo());
}
}