blob: d66415af743858c0adcc0ed62d29e558568e6e94 [file] [log] [blame]
/*******************************************************************************
* 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 java.io.StringReader;
import java.util.Iterator;
import java.util.Map;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.eclipse.rmf.serialization.XMLPersistenceMappingResourceFactoryImpl;
import org.eclipse.rmf.tests.serialization.model.nodes.Node;
import org.eclipse.rmf.tests.serialization.util.AbstractTestCase;
import org.junit.Before;
import org.xml.sax.InputSource;
@SuppressWarnings("nls")
public abstract class AbstractSaveTestCase extends AbstractTestCase {
final String BASEDIR = "org.eclipse.rmf.tests.serialization.save/";
XPath xpath;
public class MyNamespaceContext implements NamespaceContext {
public String getNamespaceURI(String prefix) {
if (prefix.equals("nodes")) {
return "http://www.eclipse.org/rmf/serialization/model/nodes.ecore";
} else if (prefix.equals("xsi")) {
return "http://www.w3.org/2001/XMLSchema-instance";
} else if (prefix.equals("ecore")) {
return "http://www.eclipse.org/emf/2002/Ecore";
} else if (prefix.equals("extnodes")) {
return "http://www.eclipse.org/rmf/serialization/model/extnodes.ecore";
} else {
return XMLConstants.NULL_NS_URI;
}
}
public String getPrefix(String namespace) {
if (namespace.equals("http://www.eclipse.org/rmf/serialization/model/nodes.ecore")) {
return "nodes";
} else if (namespace.equals("http://www.w3.org/2001/XMLSchema-instance")) {
return "xsi";
} else if (namespace.equals("http://www.eclipse.org/emf/2002/Ecore")) {
return "ecore";
} else if (namespace.equals("http://www.eclipse.org/rmf/serialization/model/extnodes.ecore")) {
return "extnodes";
} else {
return null;
}
}
public Iterator<String> getPrefixes(String namespace) {
return null;
}
}
@Override
@Before
public void setUp() throws Exception {
XPathFactory factory = XPathFactory.newInstance();
xpath = factory.newXPath();
xpath.setNamespaceContext(new MyNamespaceContext());
}
protected org.w3c.dom.Node getXMLRootNode(String fileName, Node rootNode) throws Exception, XPathExpressionException {
return getXMLRootNode(fileName, rootNode, null);
}
protected org.w3c.dom.Node getXMLRootNode(String fileName, Node rootNode, Map<Object, Object> options) throws Exception, XPathExpressionException {
saveWorkingFile(fileName, rootNode, new XMLPersistenceMappingResourceFactoryImpl(), options);
String modelAsString = loadWorkingFileAsString(fileName);
InputSource source = new InputSource(new StringReader(modelAsString));
org.w3c.dom.NodeList rootNodes = (org.w3c.dom.NodeList) xpath.evaluate("/nodes:NODE", source, XPathConstants.NODESET);
assertEquals(1, rootNodes.getLength());
org.w3c.dom.Node root = rootNodes.item(0);
return root;
}
}