| /** |
| * <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)); |
| } |
| |
| } |