/** * 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 junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.emf.common.command.BasicCommandStack; 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.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceImpl; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.edit.command.ChangeCommand; 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; /** * Tests for ChangeCommand. 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 ChangeCommandTest extends TestCase { public ChangeCommandTest(String name) { super(name); } public static Test suite() { TestSuite suite = new TestSuite("ChangeCommandTest"); suite.addTest(new ChangeCommandTest("testEObject")); suite.addTest(new ChangeCommandTest("testResource")); suite.addTest(new ChangeCommandTest("testResourceSet")); 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 testEObject() { final E e = refFactory.createE(); // State 0 assertTrue(e.getIds().isEmpty()); ChangeCommand changeCommand = new ChangeCommand(e) { @Override protected void doExecute() { EList<String> ids = e.getIds(); ids.add("0"); ids.add("1"); ids.add("2"); } }; editingDomain.getCommandStack().execute(changeCommand); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); editingDomain.getCommandStack().undo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 0 assertTrue(e.getIds().isEmpty()); editingDomain.getCommandStack().redo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); } public void testResource() { final Resource r = new ResourceImpl(URI.createURI("r")); final E initialE = refFactory.createE(); final E finalE = refFactory.createE(); r.getContents().add(initialE); final E e = refFactory.createE(); // State 0 assertEquals(1, r.getContents().size()); assertEquals(initialE, r.getContents().get(0)); assertTrue(e.getIds().isEmpty()); ChangeCommand changeCommand = new ChangeCommand(r) { @Override protected void doExecute() { r.getContents().set(0, finalE); r.getContents().add(e); EList<String> ids = e.getIds(); ids.add("0"); ids.add("1"); ids.add("2"); } }; editingDomain.getCommandStack().execute(changeCommand); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(2, r.getContents().size()); assertEquals(finalE, r.getContents().get(0)); assertEquals(e, r.getContents().get(1)); assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); editingDomain.getCommandStack().undo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 0 assertEquals(1, r.getContents().size()); assertEquals(initialE, r.getContents().get(0)); assertTrue(e.getIds().isEmpty()); editingDomain.getCommandStack().redo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(2, r.getContents().size()); assertEquals(finalE, r.getContents().get(0)); assertEquals(e, r.getContents().get(1)); assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); } public void testResourceSet() { final ResourceSet rs = new ResourceSetImpl(); final Resource r = new ResourceImpl(URI.createURI("r")); final E initialE = refFactory.createE(); final E finalE = refFactory.createE(); r.getContents().add(initialE); final E e = refFactory.createE(); // State 0 assertTrue(rs.getResources().isEmpty()); assertEquals(1, r.getContents().size()); assertEquals(initialE, r.getContents().get(0)); assertTrue(e.getIds().isEmpty()); ChangeCommand changeCommand = new ChangeCommand(rs) { @Override protected void doExecute() { rs.getResources().add(r); r.getContents().set(0, finalE); r.getContents().add(e); EList<String> ids = e.getIds(); ids.add("0"); ids.add("1"); ids.add("2"); } }; editingDomain.getCommandStack().execute(changeCommand); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(1, rs.getResources().size()); assertEquals(r, rs.getResources().get(0)); assertEquals(2, r.getContents().size()); assertEquals(finalE, r.getContents().get(0)); assertEquals(e, r.getContents().get(1)); assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); editingDomain.getCommandStack().undo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 0 assertEquals(1, r.getContents().size()); assertEquals(initialE, r.getContents().get(0)); assertTrue(e.getIds().isEmpty()); editingDomain.getCommandStack().redo(); assertTrue(changeCommand.canExecute()); assertTrue(changeCommand.canUndo()); // State 1 assertEquals(1, rs.getResources().size()); assertEquals(r, rs.getResources().get(0)); assertEquals(2, r.getContents().size()); assertEquals(finalE, r.getContents().get(0)); assertEquals(e, r.getContents().get(1)); assertEquals(3, e.getIds().size()); assertEquals("0", e.getIds().get(0)); assertEquals("1", e.getIds().get(1)); assertEquals("2", e.getIds().get(2)); } }