Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFDetachTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFDetachTest.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFDetachTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFDetachTest.java
new file mode 100644
index 0000000000..b10eafaf49
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFDetachTest.java
@@ -0,0 +1,131 @@
+/***************************************************************************
+ * Copyright (c) 2004, 2005, 2006 Eike Stepper, Germany.
+ * 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:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.emf.cdo.tests;
+
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.change.ChangeDescription;
+import org.eclipse.emf.ecore.change.util.ChangeRecorder;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+
+public class EMFDetachTest extends TestCase
+{
+ private EClass treeNodeClass;
+
+ private EAttribute nameAttribute;
+
+ private EReference childrenReference;
+
+ private EPackage modelPackage;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ treeNodeClass = EcoreFactory.eINSTANCE.createEClass();
+ treeNodeClass.setName("TreeNode");
+
+ nameAttribute = EcoreFactory.eINSTANCE.createEAttribute();
+ nameAttribute.setName("nameAttribute");
+ nameAttribute.setEType(EcorePackage.eINSTANCE.getEString());
+
+ childrenReference = EcoreFactory.eINSTANCE.createEReference();
+ childrenReference.setName("childrenReference");
+ childrenReference.setEType(treeNodeClass);
+ childrenReference.setContainment(true);
+ childrenReference.setLowerBound(0);
+ childrenReference.setUpperBound(-1);
+
+ treeNodeClass.getEStructuralFeatures().add(nameAttribute);
+ treeNodeClass.getEStructuralFeatures().add(childrenReference);
+
+ modelPackage = EcoreFactory.eINSTANCE.createEPackage();
+ modelPackage.setName("modelPackage");
+ modelPackage.setNsPrefix("modelPackage");
+ modelPackage.setNsURI("http://modelPackage");
+ modelPackage.getEClassifiers().add(treeNodeClass);
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ modelPackage = null;
+ childrenReference = null;
+ nameAttribute = null;
+ treeNodeClass = null;
+ super.tearDown();
+ }
+
+ public void testDetachSingle()
+ {
+ EObject root = createNode("root", null);
+ for (int i = 0; i < 5; i++)
+ {
+ createNode("child" + i, root);
+ }
+
+ Resource resource = new ResourceImpl();
+ resource.getContents().add(root);
+
+ System.out.println();
+ ChangeRecorder recorder = new ChangeRecorder(root);
+ removeNode(root, 2);
+ ChangeDescription changeDescription = recorder.endRecording();
+
+ System.out.println();
+ EList objectsToAttach = changeDescription.getObjectsToAttach();
+ for (Iterator it = objectsToAttach.iterator(); it.hasNext();)
+ {
+ EObject node = (EObject) it.next();
+ System.out.println("Node to attach: " + node.eGet(nameAttribute));
+
+ }
+
+ assertEquals(1, objectsToAttach.size());
+ }
+
+ private EObject createNode(String name, EObject parent)
+ {
+ EFactory factory = modelPackage.getEFactoryInstance();
+ EObject node = factory.create(treeNodeClass);
+ node.eSet(nameAttribute, name);
+
+ if (parent != null)
+ {
+ EList children = (EList) parent.eGet(childrenReference);
+ children.add(node);
+ }
+
+ System.out.println("Created node " + name);
+ return node;
+ }
+
+ private void removeNode(EObject parent, int index)
+ {
+ EList children = (EList) parent.eGet(childrenReference);
+ EObject child = (EObject) children.remove(index);
+ System.out.println("Removed node " + child.eGet(nameAttribute));
+ }
+}

Back to the top