blob: cd912250dc5cc20ffe108891e25a3f534065abf2 [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.save;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import javax.xml.xpath.XPathConstants;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.ecore.EClass;
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.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.eclipse.emf.ecore.xml.type.AnyType;
import org.eclipse.emf.ecore.xml.type.XMLTypeFactory;
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.junit.Test;
import org.w3c.dom.NodeList;
@SuppressWarnings("nls")
public class ForeignNameSpaceContainedSaveTests extends AbstractSaveTestCase {
@Test
public void testEReference_WithTypeEObject_Contained0100Many_KnownNamespace_XMLResource() {
try {
String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0100Many_KnownNamespace_XMLResource.xml";
Node rootNode = createNodeModelWithForeignSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE
.getNode_EReference_WithTypeEObject_Contained0100Many());
Map<String, Object> options = new HashMap<String, Object>();
options.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
saveWorkingFile(fileName, rootNode, new XMLResourceFactoryImpl(), options);
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_WithTypeEObject_Contained0100Many_KnownNamespace() {
try {
String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0100Many_KnownNamespace.xml";
Node rootNode = createNodeModelWithForeignSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE
.getNode_EReference_WithTypeEObject_Contained0100Many());
org.w3c.dom.Node root = getXMLRootNode(fileName, rootNode);
// check for empty element on toplevel
assertSame(0, ((NodeList) xpath.evaluate("/nodes:NODE[not(node())]", root, XPathConstants.NODESET)).getLength());
// check for empty element on feature level
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI", root,
XPathConstants.NODESET)).getLength());
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[1]/eClassifiers",
root, XPathConstants.NODESET)).getLength());
assertEquals("EClass11", xpath.evaluate(
"/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[1]/eClassifiers[1]/@name", root, XPathConstants.STRING));
assertEquals("EClass12", xpath.evaluate(
"/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[1]/eClassifiers[2]/@name", root, XPathConstants.STRING));
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/eClassifiers",
root, XPathConstants.NODESET)).getLength());
assertEquals("EClass21", xpath.evaluate(
"/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/eClassifiers[1]/@name", root, XPathConstants.STRING));
assertEquals("EClass22", xpath.evaluate(
"/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/eClassifiers[2]/@name", root, XPathConstants.STRING));
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_WithTypeEObject_Contained0001Many_KnownNamespace() {
try {
String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0001Many_KnownNamespace.xml";
Node rootNode = createNodeModelWithForeignSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE
.getNode_EReference_WithTypeEObject_Contained0001Many());
org.w3c.dom.Node root = getXMLRootNode(fileName, rootNode);
// check for empty element on toplevel
assertSame(0, ((NodeList) xpath.evaluate("/nodes:NODE[not(node())]", root, XPathConstants.NODESET)).getLength());
// check for empty element on feature level
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/ecore:EPackage", root, XPathConstants.NODESET)).getLength());
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/ecore:EPackage[1]/eClassifiers", root, XPathConstants.NODESET)).getLength());
assertEquals("EClass11", xpath.evaluate("/nodes:NODE/ecore:EPackage/eClassifiers[1]/@name", root, XPathConstants.STRING));
assertEquals("EClass12", xpath.evaluate("/nodes:NODE/ecore:EPackage[1]/eClassifiers[2]/@name", root, XPathConstants.STRING));
assertSame(2, ((NodeList) xpath.evaluate("/nodes:NODE/ecore:EPackage[2]/eClassifiers", root, XPathConstants.NODESET)).getLength());
assertEquals("EClass21", xpath.evaluate("/nodes:NODE/ecore:EPackage[2]/eClassifiers[1]/@name", root, XPathConstants.STRING));
assertEquals("EClass22", xpath.evaluate("/nodes:NODE/ecore:EPackage[2]/eClassifiers[2]/@name", root, XPathConstants.STRING));
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
@Test
public void testEReference_WithTypeEObject_Contained0100Many_UnknownNamespace() {
try {
String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0100Many_UnknownNamespace.xml";
Node rootNode = createNodeModelWithUnknownSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE
.getNode_EReference_WithTypeEObject_Contained0100Many());
getXMLRootNode(fileName, rootNode);
} catch (Exception ex) {
ex.printStackTrace();
assertTrue(ex.getMessage(), false);
}
}
/*
* @Test public void testEReference_WithTypeEObject_Contained0001Many_UnknownNamespace() { try { String fileName =
* BASEDIR + "eReference_WithTypeEObject_Contained0001Many_UnknownNamespace.xml"; Node rootNode =
* createNodeModelWithUnknownSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE
* .getNode_EReference_WithTypeEObject_Contained0001Many()); org.w3c.dom.Node root = getXMLRootNode(fileName,
* rootNode); } catch (Exception ex) { ex.printStackTrace(); assertTrue(ex.getMessage(), false); } }
*/
@SuppressWarnings("unchecked")
protected Node createNodeModelWithForeignSubmodel_ContainedxxxxMany(EStructuralFeature feature) {
assert null != feature;
assert feature.isMany();
Node rootNode = NodesFactory.eINSTANCE.createNode();
EPackage ePackage1 = EcoreFactory.eINSTANCE.createEPackage();
ePackage1.setName("EPackage1");
EPackage ePackage2 = EcoreFactory.eINSTANCE.createEPackage();
ePackage2.setName("EPackage2");
EClass eClass11 = EcoreFactory.eINSTANCE.createEClass();
eClass11.setName("EClass11");
EClass eClass12 = EcoreFactory.eINSTANCE.createEClass();
eClass12.setName("EClass12");
EClass eClass21 = EcoreFactory.eINSTANCE.createEClass();
eClass21.setName("EClass21");
EClass eClass22 = EcoreFactory.eINSTANCE.createEClass();
eClass22.setName("EClass22");
EReference eReference11 = EcoreFactory.eINSTANCE.createEReference();
eReference11.setName("myEClass22");
eReference11.setEType(eClass22);
eClass11.getEStructuralFeatures().add(eReference11);
ePackage1.getEClassifiers().add(eClass11);
ePackage1.getEClassifiers().add(eClass12);
ePackage2.getEClassifiers().add(eClass21);
ePackage2.getEClassifiers().add(eClass22);
((EList<Object>) rootNode.eGet(feature)).add(ePackage1);
((EList<Object>) rootNode.eGet(feature)).add(ePackage2);
return rootNode;
}
@SuppressWarnings("unchecked")
protected Node createNodeModelWithUnknownSubmodel_ContainedxxxxMany(EStructuralFeature feature) {
assert null != feature;
assert feature.isMany();
Node rootNode = NodesFactory.eINSTANCE.createNode();
String NAMESPACE_URI = "myAnyNamespaceURI";
String NAMESPACE_PREFIX = "myPrefix";
BasicExtendedMetaData extendedMetaData = new BasicExtendedMetaData();
EStructuralFeature rootNodeFeature = extendedMetaData.demandFeature(NAMESPACE_URI, "rootNode", true);
EClass documentRootClass = rootNodeFeature.getEContainingClass();
EObject documentRoot = EcoreUtil.create(documentRootClass);
EMap<String, String> xmlnsPrefixMap = (EMap<String, String>) documentRoot.eGet(extendedMetaData.getXMLNSPrefixMapFeature(documentRootClass));
xmlnsPrefixMap.put(NAMESPACE_PREFIX, NAMESPACE_URI);
AnyType rootTreeNode = XMLTypeFactory.eINSTANCE.createAnyType();
documentRoot.eSet(rootNodeFeature, rootTreeNode);
EStructuralFeature labelAttribute = extendedMetaData.demandFeature(null, "label", false);
rootTreeNode.eSet(labelAttribute, "root");
EStructuralFeature subNodeFeature = extendedMetaData.demandFeature(null, "subNode", true);
subNodeFeature.setUpperBound(1);
AnyType subNode = XMLTypeFactory.eINSTANCE.createAnyType();
rootTreeNode.eSet(subNodeFeature, subNode);
((EList<Object>) rootNode.eGet(feature)).add(documentRoot);
return rootNode;
}
}