blob: cbc3ddfd1b087c88e18532bd8b0c018e5c260e1c [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2014 itemis and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* itemis - Initial API and implementation
*
* </copyright>
*/
package org.eclipse.sphinx.tests.emf.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.sphinx.emf.serialization.XMLPersistenceMappingResource;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.Node;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.NodesFactory;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.NodesPackage;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.serialization.NodesResourceFactoryImpl;
import org.eclipse.sphinx.tests.emf.serialization.model.nodes.serialization.NodesResourceImpl;
import org.eclipse.sphinx.tests.emf.serialization.util.AbstractTestCase;
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.sphinx.tests.emf.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);
}
}
@SuppressWarnings("deprecation")
@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);
}
}
@SuppressWarnings("deprecation")
@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();
sub4Node.setName("sub4Node");
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()));
assertTrue(sub4Node.eIsSet(NodesPackage.eINSTANCE.getNode_Name()));
assertEquals("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("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();
String nodeName = "root";
String subNodeName = "subNode";
Node node = NodesFactory.eINSTANCE.createNode();
node.setName(nodeName);
Node subNode = NodesFactory.eINSTANCE.createNode();
subNode.setName(subNodeName);
node.setEReference_Contained0100Single(subNode);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertSame(subNode, resource.getEObject(subNodeName));
assertSame(subNodeName, resource.getID(subNode));
}
@Test
public void testIdMapAdd() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
String nodeName = "root";
String subNodeName = "subNode";
Node node = NodesFactory.eINSTANCE.createNode();
node.setName(nodeName);
Node subNode = NodesFactory.eINSTANCE.createNode();
subNode.setName(subNodeName);
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertSame(subNode, resource.getEObject(subNodeName));
assertSame(subNodeName, resource.getID(subNode));
}
@Test
public void testIdMapAddMany() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
String node1Name = "node1";
String node2Name = "node2";
Node node1 = NodesFactory.eINSTANCE.createNode();
node1.setName(node1Name);
Node node2 = NodesFactory.eINSTANCE.createNode();
node2.setName(node2Name);
List<Node> nodes = new ArrayList<Node>(2);
nodes.add(node1);
nodes.add(node2);
assertNull(resource.getEObject(node1Name));
assertNull(resource.getID(node1));
assertNull(resource.getEObject(node2Name));
assertNull(resource.getID(node2));
resource.getContents().addAll(nodes);
assertSame(node1, resource.getEObject(node1Name));
assertSame(node1Name, resource.getID(node1));
assertSame(node2, resource.getEObject(node2Name));
assertSame(node2Name, resource.getID(node2));
}
@Test
public void testIdMapMove() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
String nodeName = "root";
String subNodeName = "subNode";
Node node = NodesFactory.eINSTANCE.createNode();
node.setName(nodeName);
Node subNode = NodesFactory.eINSTANCE.createNode();
subNode.setName(subNodeName);
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertSame(subNode, resource.getEObject(subNodeName));
assertSame(subNodeName, resource.getID(subNode));
node.setEReference_Contained0100Single(subNode);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertSame(subNode, resource.getEObject(subNodeName));
assertSame(subNodeName, resource.getID(subNode));
}
@Test
public void testIdMapRemove() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
String nodeName = "root";
String subNodeName = "subNode";
Node node = NodesFactory.eINSTANCE.createNode();
node.setName(nodeName);
Node subNode = NodesFactory.eINSTANCE.createNode();
subNode.setName(subNodeName);
node.getEReference_Contained0100Many().add(subNode);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
resource.getContents().add(node);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertSame(subNode, resource.getEObject(subNodeName));
assertSame(subNodeName, resource.getID(subNode));
node.getEReference_Contained0100Many().remove(subNode);
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
resource.getContents().remove(node);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
assertNull(resource.getEObject(subNodeName));
assertNull(resource.getID(subNode));
}
@Test
public void testIdMapRename() {
XMLPersistenceMappingResource resource = new NodesResourceImpl();
String nodeName = "root";
String newNodeName = "new_root";
Node node = NodesFactory.eINSTANCE.createNode();
node.setName(nodeName);
assertNull(resource.getEObject(nodeName));
assertNull(resource.getID(node));
resource.getContents().add(node);
assertNull(resource.getEObject(newNodeName));
assertSame(node, resource.getEObject(nodeName));
assertSame(nodeName, resource.getID(node));
node.setName(newNodeName);
assertNull(resource.getEObject(nodeName));
assertSame(node, resource.getEObject(newNodeName));
assertSame(newNodeName, resource.getID(node));
}
}