blob: 0b77b1715ebf570c2176f2c358a103490fa1b25e [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.load;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.rmf.serialization.XMLPersistenceMappingResourceFactoryImpl;
import org.eclipse.rmf.tests.serialization.model.nodes.Node;
import org.eclipse.rmf.tests.serialization.model.nodes.NodesPackage;
import org.eclipse.rmf.tests.serialization.model.nodes.SubNode;
import org.eclipse.rmf.tests.serialization.util.AbstractTestCase;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("nls")
public class BasicLoadTests extends AbstractTestCase {
static final String INPUT_PATH = "org.eclipse.rmf.tests.serialization.load/";
@Override
@Before
public void setUp() throws Exception {
super.setUp();
EPackage.Registry.INSTANCE.put(NodesPackage.eNS_URI, NodesPackage.eINSTANCE);
}
@Test
public void testEAtribute_Atribute0100Many() {
String inputFileName = INPUT_PATH + "EAttribute_Attribute0100Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateEAttributeMany(modelRoot, NodesPackage.eINSTANCE.getNode_EAttribute_Attribute0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEAtribute_Atribute1000Many() {
String inputFileName = INPUT_PATH + "EAttribute_Attribute1000Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateEAttributeMany(modelRoot, NodesPackage.eINSTANCE.getNode_EAttribute_Attribute1000Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
public void testEAtribute_Atribute0100Single() {
String inputFileName = INPUT_PATH + "EAttribute_Attribute0100Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateEAttributeSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EAttribute_Attribute0100Single());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEAtribute_Atribute1000Single() {
String inputFileName = INPUT_PATH + "EAttribute_Attribute1000Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateEAttributeSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EAttribute_Attribute1000Single());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0001_Many() {
String inputFileName = INPUT_PATH + "EReference_Contained0001Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelMulti(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0001Many(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0001_Single() {
String inputFileName = INPUT_PATH + "EReference_Contained0001Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0001Many(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0001Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0100_Many() {
String inputFileName = INPUT_PATH + "EReference_Contained0100Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelMulti(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0100Many(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0100_Single() {
String inputFileName = INPUT_PATH + "EReference_Contained0100Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0100Single(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0100Single());
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0101_Many() {
String inputFileName = INPUT_PATH + "EReference_Contained0101Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelMulti(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0101Many(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained0101_Single() {
String inputFileName = INPUT_PATH + "EReference_Contained0101Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained0101Single(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0101Single());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained1001_Many() {
String inputFileName = INPUT_PATH + "EReference_Contained1001Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelMulti(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained1001Many(),
NodesPackage.eINSTANCE.getNode_EReference_Contained0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Contained1001_Single() {
String inputFileName = INPUT_PATH + "EReference_Contained1001Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateModelSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Contained1001Single(),
NodesPackage.eINSTANCE.getNode_EReference_Contained1001Single());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced0100_Many() {
String inputFileName = INPUT_PATH + "EReference_Referenced0100Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedMany(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced0100Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced0100_Single() {
String inputFileName = INPUT_PATH + "EReference_Referenced0100Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced0100Single());
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced0101_Many() {
String inputFileName = INPUT_PATH + "EReference_Referenced0101Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedMany(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced0101Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced0101_Single() {
String inputFileName = INPUT_PATH + "EReference_Referenced0101Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced0101Single());
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced1001_Many() {
String inputFileName = INPUT_PATH + "EReference_Referenced1001Many.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedMany(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced1001Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced1001_Many_Empty() {
String inputFileName = INPUT_PATH + "EReference_Referenced1001Many_Empty.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedMany_Empty(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced1001Many());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_Referenced1001_Single() {
String inputFileName = INPUT_PATH + "EReference_Referenced1001Single.xml";
try {
EObject modelRoot = loadInputFile(inputFileName, new XMLPersistenceMappingResourceFactoryImpl(), null);
validateReferencedSingle(modelRoot, NodesPackage.eINSTANCE.getNode_EReference_Referenced1001Single());
} catch (Exception ex) {
assertTrue(ex.getMessage(), false);
}
}
@SuppressWarnings("unchecked")
protected void validateModelMulti(EObject modelRoot, EStructuralFeature topFeature, EStructuralFeature subFeature) {
assert topFeature.isMany();
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
// check intermediate nodes
EList<Object> intermediateNodes = (EList<Object>) node.eGet(topFeature);
assertSame(4, intermediateNodes.size());
Object intermediateNodeObject1 = intermediateNodes.get(0);
assertTrue(intermediateNodeObject1 instanceof Node);
Node intermediateNode1 = (Node) intermediateNodeObject1;
assertEquals("intermediateNode1", intermediateNode1.getName());
Object intermediateNodeObject2 = intermediateNodes.get(1);
assertTrue(intermediateNodeObject2 instanceof Node);
Node intermediateNode2 = (Node) intermediateNodeObject2;
assertEquals("intermediateNode2", intermediateNode2.getName());
Object intermediateSubNodeObject3 = intermediateNodes.get(2);
assertTrue(intermediateSubNodeObject3 instanceof SubNode);
Node intermediateSubNode3 = (Node) intermediateSubNodeObject3;
assertEquals("intermediateSubNode3", intermediateSubNode3.getName());
Object intermediateSubNodeObject4 = intermediateNodes.get(3);
assertTrue(intermediateSubNodeObject4 instanceof SubNode);
Node intermediateSubNode4 = (Node) intermediateSubNodeObject4;
assertEquals("intermediateSubNode4", intermediateSubNode4.getName());
// check leaf nodes
EList<Object> leafNodes1 = (EList<Object>) intermediateNode1.eGet(subFeature);
assertSame(2, leafNodes1.size());
Object leafNodeObject11 = leafNodes1.get(0);
assertTrue(leafNodeObject11 instanceof Node);
Node leafNode11 = (Node) leafNodeObject11;
assertEquals("leafNode11", leafNode11.getName());
EList<Object> leafNodes11 = (EList<Object>) leafNode11.eGet(subFeature);
assertSame(0, leafNodes11.size());
Object leafNodeObject12 = leafNodes1.get(1);
assertTrue(leafNodeObject12 instanceof Node);
Node leafNode12 = (Node) leafNodeObject12;
assertEquals("leafNode12", leafNode12.getName());
EList<Object> leafNodes12 = (EList<Object>) leafNode12.eGet(subFeature);
assertSame(0, leafNodes12.size());
// check leaf nodes
EList<Object> leafNodes2 = (EList<Object>) intermediateNode2.eGet(subFeature);
assertSame(2, leafNodes2.size());
Object leafNodeObject21 = leafNodes2.get(0);
assertTrue(leafNodeObject21 instanceof Node);
Node leafNode21 = (Node) leafNodeObject21;
assertEquals("leafNode21", leafNode21.getName());
EList<Object> leafNodes21 = (EList<Object>) leafNode21.eGet(subFeature);
assertSame(0, leafNodes21.size());
Object leafNodeObject22 = leafNodes2.get(1);
assertTrue(leafNodeObject22 instanceof Node);
Node leafNode22 = (Node) leafNodeObject22;
assertEquals("leafNode22", leafNode22.getName());
EList<Object> leafNodes22 = (EList<Object>) leafNode22.eGet(subFeature);
assertSame(0, leafNodes22.size());
// check leaf nodes
EList<Object> leafNodes3 = (EList<Object>) intermediateSubNode3.eGet(subFeature);
assertSame(2, leafNodes3.size());
Object leafNodeObject31 = leafNodes3.get(0);
assertTrue(leafNodeObject31 instanceof Node);
Node leafNode31 = (Node) leafNodeObject31;
assertEquals("leafNode31", leafNode31.getName());
EList<Object> leafNodes31 = (EList<Object>) leafNode31.eGet(subFeature);
assertSame(0, leafNodes31.size());
Object leafNodeObject32 = leafNodes3.get(1);
assertTrue(leafNodeObject32 instanceof Node);
Node leafNode32 = (Node) leafNodeObject32;
assertEquals("leafNode32", leafNode32.getName());
EList<Object> leafNodes32 = (EList<Object>) leafNode32.eGet(subFeature);
assertSame(0, leafNodes32.size());
// check leaf nodes
EList<Object> leafNodes4 = (EList<Object>) intermediateSubNode4.eGet(subFeature);
assertSame(2, leafNodes4.size());
Object leafNodeObject41 = leafNodes4.get(0);
assertTrue(leafNodeObject41 instanceof Node);
Node leafNode41 = (Node) leafNodeObject41;
assertEquals("leafNode41", leafNode41.getName());
EList<Object> leafNodes41 = (EList<Object>) leafNode41.eGet(subFeature);
assertSame(0, leafNodes41.size());
Object leafNodeObject42 = leafNodes4.get(1);
assertTrue(leafNodeObject42 instanceof Node);
Node leafNode42 = (Node) leafNodeObject42;
assertEquals("leafNode42", leafNode42.getName());
EList<Object> leafNodes42 = (EList<Object>) leafNode42.eGet(subFeature);
assertSame(0, leafNodes42.size());
}
protected void validateModelSingle(EObject modelRoot, EReference topFeature, EReference subFeature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
// check intermediate node
Object intermediateNodeObject1;
if (topFeature.isMany()) {
EList<EObject> intermediateNodeObjects = (EList<EObject>) node.eGet(topFeature);
assertSame(1, intermediateNodeObjects.size());
intermediateNodeObject1 = intermediateNodeObjects.get(0);
} else {
intermediateNodeObject1 = node.eGet(topFeature);
}
assertNotNull(intermediateNodeObject1);
assertTrue(intermediateNodeObject1 instanceof Node);
Node intermediateNode1 = (Node) intermediateNodeObject1;
assertEquals("intermediateNode1", intermediateNode1.getName());
// check leaf node
Object leafNodeObject1;
if (topFeature.isMany()) {
EList<EObject> leafNodeObjects = (EList<EObject>) intermediateNode1.eGet(subFeature);
assertSame(1, leafNodeObjects.size());
leafNodeObject1 = leafNodeObjects.get(0);
} else {
leafNodeObject1 = intermediateNode1.eGet(subFeature);
}
assertNotNull(leafNodeObject1);
assertTrue(leafNodeObject1 instanceof Node);
Node leafNode11 = (Node) leafNodeObject1;
assertEquals("leafNode1", leafNode11.getName());
}
@SuppressWarnings("unchecked")
protected void validateEAttributeMany(EObject modelRoot, EStructuralFeature feature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
// check intermediate node
EList<Object> valueObjects = (EList<Object>) node.eGet(feature);
assertSame(2, valueObjects.size());
assertEquals("value1", valueObjects.get(0));
assertEquals("value2", valueObjects.get(1));
}
protected void validateEAttributeSingle(EObject modelRoot, EStructuralFeature feature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
Object valueObject = node.eGet(feature);
assertNotNull(valueObject);
assertEquals("value1", valueObject);
}
@SuppressWarnings("unchecked")
protected void validateReferencedMany(EObject modelRoot, EReference feature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
EList<Node> childNodes = node.getEReference_Contained0100Many();
assertSame(2, childNodes.size());
Node childNode1 = childNodes.get(0);
Node childNode2 = childNodes.get(1);
EList<Object> values = (EList<Object>) node.eGet(feature);
assertSame(2, values.size());
assertSame(childNode1, values.get(0));
assertSame(childNode2, values.get(1));
}
@SuppressWarnings("unchecked")
protected void validateReferencedMany_Empty(EObject modelRoot, EReference feature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
EList<Node> childNodes = node.getEReference_Contained0100Many();
assertSame(2, childNodes.size());
EList<Object> values = (EList<Object>) node.eGet(feature);
assertSame(0, values.size());
assertTrue(node.eIsSet(feature));
}
protected void validateReferencedSingle(EObject modelRoot, EReference feature) {
// check root node
assertNotNull(modelRoot);
assertSame(NodesPackage.eINSTANCE.getNode(), modelRoot.eClass());
Node node = (Node) modelRoot;
Object valueObject = node.eGet(feature);
assertNotNull(valueObject);
assertFalse(((EObject) valueObject).eIsProxy());
assertSame(node, valueObject);
}
}