blob: d20a34059f5d3a1eef1a635017b80c83ac0c8836 [file] [log] [blame]
/**
* Copyright (c) 2013 itemis AG 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:
* itemis AG - initial API and implementation
*/
package org.eclipse.rmf.tests.serialization.adapter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.rmf.tests.serialization.model.nodes.Node;
import org.eclipse.rmf.tests.serialization.model.nodes.NodesFactory;
import org.eclipse.rmf.tests.serialization.model.nodes.NodesPackage;
import org.eclipse.rmf.tests.serialization.model.nodes.serialization.NodesResourceFactoryImpl;
import org.eclipse.rmf.tests.serialization.model.nodes.serialization.NodesResourceImpl;
import org.eclipse.rmf.tests.serialization.util.AbstractTestCase;
import org.eclipse.sphinx.emf.serialization.XMLPersistenceMappingResource;
import org.junit.Before;
import org.junit.Test;
// Junit 3.8 test
@SuppressWarnings("nls")
public class IDAdapterTests extends AbstractTestCase {
static final String INPUT_PATH = "org.eclipse.rmf.tests.serialization.adapter/";
@Override
@Before
public void setUp() throws Exception {
super.setUp();
EPackage.Registry.INSTANCE.put(NodesPackage.eNS_URI, NodesPackage.eINSTANCE);
}
@Test
public void testIdOnLoad() {
String inputFileName = INPUT_PATH + "minimal.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new NodesResourceFactoryImpl(), null);
assertTrue(modelRoot instanceof Node);
Node rootNode = (Node) modelRoot;
assertTrue(rootNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testIdOnLoadNotModified() {
String inputFileName = INPUT_PATH + "minimalWithId.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new NodesResourceFactoryImpl(), null);
assertTrue(modelRoot instanceof Node);
Node rootNode = (Node) modelRoot;
assertEquals("root", rootNode.getName());
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testIdForNewObjectsAfterLoad1() {
String inputFileName = INPUT_PATH + "minimal.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new NodesResourceFactoryImpl(), null);
assertTrue(modelRoot instanceof Node);
Node rootNode = (Node) modelRoot;
assertTrue(rootNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertSame(1, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
// test set
Node subNode = NodesFactory.eINSTANCE.createNode();
rootNode.setEReference_Contained0100Single(subNode);
assertTrue(subNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertSame(2, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
// test add single
rootNode.getEReference_Contained1100Many().add(NodesFactory.eINSTANCE.createNode());
assertTrue(5 < rootNode.getEReference_Contained1100Many().get(0).getName().length());
assertSame(3, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
// test add many
List<Node> newNodes = new ArrayList<Node>();
for (int i = 0; i < 5; i++) {
newNodes.add(NodesFactory.eINSTANCE.createNode());
}
rootNode.getEReference_Contained0100Many().addAll(newNodes);
for (int i = 0; i < 5; i++) {
assertTrue(5 < rootNode.getEReference_Contained0100Many().get(i).getName().length());
}
assertSame(8, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testIdForNewObjectsAfterLoad2() {
String inputFileName = INPUT_PATH + "minimal.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new NodesResourceFactoryImpl(), null);
assertTrue(modelRoot instanceof Node);
Node rootNode = (Node) modelRoot;
assertTrue(rootNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertSame(1, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
// test set
Node sub1Node = NodesFactory.eINSTANCE.createNode();
Node sub2Node = NodesFactory.eINSTANCE.createNode();
Node sub3Node = NodesFactory.eINSTANCE.createNode();
Node sub4Node = NodesFactory.eINSTANCE.createNode();
sub1Node.setEReference_Contained0101Single(sub2Node);
sub2Node.setEReference_Contained0101Single(sub3Node);
sub3Node.setEReference_Contained0101Single(sub4Node);
assertFalse(sub1Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertFalse(sub2Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertFalse(sub3Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertFalse(sub4Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertEquals(((XMLResource) modelRoot.eResource()).getID(sub4Node), sub4Node.getName());
assertSame(1, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
// set
rootNode.setEReference_Contained0100Single(sub1Node);
assertTrue(sub1Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertTrue(sub2Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertTrue(sub3Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertTrue(sub4Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertEquals(((XMLResource) modelRoot.eResource()).getID(sub4Node), sub4Node.getName());
assertSame(5, ((XMLResource) modelRoot.eResource()).getEObjectToIDMap().size());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testAddNewElementToEmptyResource() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
Node subNode = NodesFactory.eINSTANCE.createNode();
node.getEReference_Contained0100Many().add(subNode);
assertFalse(node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertFalse(subNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
resource.getContents().add(node);
assertTrue(node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertTrue(subNode.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
}
@Test
public void testIdMapSet() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
Node subNode = NodesFactory.eINSTANCE.createNode();
node.setEReference_Contained0100Single(subNode);
assertNull(resource.getID(node));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertSame(subNode, resource.getEObject(subNode.getName()));
assertSame(subNode.getName(), resource.getID(subNode));
}
@Test
public void testIdMapAdd() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
Node subNode = NodesFactory.eINSTANCE.createNode();
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getID(node));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertSame(subNode, resource.getEObject(subNode.getName()));
assertSame(subNode.getName(), resource.getID(subNode));
}
@Test
public void testIdMapAddMany() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node1 = NodesFactory.eINSTANCE.createNode();
Node node2 = NodesFactory.eINSTANCE.createNode();
List<Node> nodes = new ArrayList<Node>(2);
nodes.add(node1);
nodes.add(node2);
assertNull(resource.getID(node1));
assertNull(resource.getID(node2));
resource.getContents().addAll(nodes);
assertSame(node1, resource.getEObject(node1.getName()));
assertSame(node1.getName(), resource.getID(node1));
assertSame(node2, resource.getEObject(node2.getName()));
assertSame(node2.getName(), resource.getID(node2));
}
@Test
public void testIdMapMove() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
Node subNode = NodesFactory.eINSTANCE.createNode();
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getID(node));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertSame(subNode, resource.getEObject(subNode.getName()));
assertSame(subNode.getName(), resource.getID(subNode));
node.setEReference_Contained0100Single(subNode);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertSame(subNode, resource.getEObject(subNode.getName()));
assertSame(subNode.getName(), resource.getID(subNode));
}
@Test
public void testIdMapRemove() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
Node subNode = NodesFactory.eINSTANCE.createNode();
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getID(node));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertSame(subNode, resource.getEObject(subNode.getName()));
assertSame(subNode.getName(), resource.getID(subNode));
node.getEReference_Contained0100Many().remove(subNode);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
assertNull(resource.getEObject(subNode.getName()));
assertNull(resource.getID(subNode));
resource.getContents().remove(node);
assertNull(resource.getEObject(node.getName()));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNode.getName()));
assertNull(resource.getID(subNode));
}
@Test
public void testIdMapRename() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
Node node = NodesFactory.eINSTANCE.createNode();
assertNull(resource.getID(node));
resource.getContents().add(node);
assertSame(node, resource.getEObject(node.getName()));
assertSame(node.getName(), resource.getID(node));
}
}