| /******************************************************************************* |
| * Copyright (c) 2014 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: |
| * Mark Broerkens (itemis AG) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.rmf.tests.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.ecore.EStructuralFeature; |
| import org.eclipse.rmf.tests.serialization.model.extnodes.ExtNodesFactory; |
| import org.eclipse.rmf.tests.serialization.model.extnodes.ExtNodesPackage; |
| import org.eclipse.rmf.tests.serialization.model.extnodes.ExtendedNode; |
| import org.eclipse.rmf.tests.serialization.model.extnodes.Extension; |
| 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.sphinx.emf.serialization.XMLPersistenceMappingResource; |
| import org.junit.Test; |
| import org.w3c.dom.NodeList; |
| |
| @SuppressWarnings("nls") |
| public class CustomNamespacePrefixSaveTests extends AbstractSaveTestCase { |
| |
| @Test |
| public void testEReference_WithTypeEObject_Contained0100Many_KnownNamespace_CustomPrefix() { |
| try { |
| String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0100Many_KnownNamespace_CustomPrefix.xml"; |
| Node rootNode = createNodeModelWithForeignSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE |
| .getNode_EReference_WithTypeEObject_Contained0100Many()); |
| org.w3c.dom.Node root = getXMLRootNode(fileName, rootNode, getSaveOptions()); |
| |
| // 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]/extnodes:extensions", |
| root, XPathConstants.NODESET)).getLength()); |
| assertEquals("ExtNode11", xpath.evaluate( |
| "/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[1]/extnodes:extensions[1]/@name", root, |
| XPathConstants.STRING)); |
| assertEquals("ExtNode12", xpath.evaluate( |
| "/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[1]/extnodes:extensions[2]/@name", root, |
| XPathConstants.STRING)); |
| |
| assertSame(2, |
| ((NodeList) xpath.evaluate("/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/extnodes:extensions", |
| root, XPathConstants.NODESET)).getLength()); |
| assertEquals("ExtNode21", xpath.evaluate( |
| "/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/extnodes:extensions[1]/@name", root, |
| XPathConstants.STRING)); |
| assertEquals("ExtNode22", xpath.evaluate( |
| "/nodes:NODE/nodes:FEATURE-WITH-TYPE-EOBJECT-AND-SERIALIZATION-0100-MULTI[2]/extnodes:extensions[2]/@name", root, |
| XPathConstants.STRING)); |
| |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| assertTrue(ex.getMessage(), false); |
| } |
| } |
| |
| @Test |
| public void testEReference_WithTypeEObject_Contained0001Many_KnownNamespace_CustomPrefix() { |
| try { |
| String fileName = BASEDIR + "eReference_WithTypeEObject_Contained0001Many_KnownNamespace_CustomPrefix.xml"; |
| Node rootNode = createNodeModelWithForeignSubmodel_ContainedxxxxMany(NodesPackage.eINSTANCE |
| .getNode_EReference_WithTypeEObject_Contained0001Many()); |
| org.w3c.dom.Node root = getXMLRootNode(fileName, rootNode, getSaveOptions()); |
| |
| // 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/extnodes:Extension", root, XPathConstants.NODESET)).getLength()); |
| |
| assertSame(2, |
| ((NodeList) xpath.evaluate("/nodes:NODE/extnodes:Extension[1]/extnodes:extensions", root, XPathConstants.NODESET)).getLength()); |
| assertEquals("ExtNode11", xpath.evaluate("/nodes:NODE/extnodes:Extension[1]/extnodes:extensions[1]/@name", root, XPathConstants.STRING)); |
| assertEquals("ExtNode12", xpath.evaluate("/nodes:NODE/extnodes:Extension[1]/extnodes:extensions[2]/@name", root, XPathConstants.STRING)); |
| |
| assertSame(2, |
| ((NodeList) xpath.evaluate("/nodes:NODE/extnodes:Extension[2]/extnodes:extensions", root, XPathConstants.NODESET)).getLength()); |
| assertEquals("ExtNode21", xpath.evaluate("/nodes:NODE/extnodes:Extension[2]/extnodes:extensions[1]/@name", root, XPathConstants.STRING)); |
| assertEquals("ExtNode22", xpath.evaluate("/nodes:NODE/extnodes:Extension[2]/extnodes:extensions[2]/@name", root, XPathConstants.STRING)); |
| |
| } 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(); |
| |
| Extension extension1 = ExtNodesFactory.eINSTANCE.createExtension(); |
| ExtendedNode extNode11 = ExtNodesFactory.eINSTANCE.createExtendedNode(); |
| extNode11.setName("ExtNode11"); |
| ExtendedNode extNode12 = ExtNodesFactory.eINSTANCE.createExtendedNode(); |
| extNode12.setName("ExtNode12"); |
| extension1.getExtensions().add(extNode11); |
| extension1.getExtensions().add(extNode12); |
| |
| Extension extension2 = ExtNodesFactory.eINSTANCE.createExtension(); |
| ExtendedNode extNode21 = ExtNodesFactory.eINSTANCE.createExtendedNode(); |
| extNode21.setName("ExtNode21"); |
| ExtendedNode extNode22 = ExtNodesFactory.eINSTANCE.createExtendedNode(); |
| extNode22.setName("ExtNode22"); |
| extension2.getExtensions().add(extNode21); |
| extension2.getExtensions().add(extNode22); |
| |
| ((EList<Object>) rootNode.eGet(feature)).add(extension1); |
| ((EList<Object>) rootNode.eGet(feature)).add(extension2); |
| |
| return rootNode; |
| } |
| |
| private Map<Object, Object> getSaveOptions() { |
| Map<Object, Object> options = new HashMap<Object, Object>(); |
| options.put(XMLPersistenceMappingResource.OPTION_NAMEPSACE_TO_PREFIX_MAP, getNamespaceToPrefixMap()); |
| return options; |
| } |
| |
| private Map<String, String> getNamespaceToPrefixMap() { |
| Map<String, String> namespaceToPrefixMap = new HashMap<String, String>(); |
| namespaceToPrefixMap.put(NodesPackage.eNS_URI, ""); |
| namespaceToPrefixMap.put(ExtNodesPackage.eNS_URI, "e"); |
| namespaceToPrefixMap.put("uri", "prefix"); |
| return namespaceToPrefixMap; |
| } |
| } |