blob: e19d6122432bd1a5488e64d4986e3c6cdc78a370 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package tests.w3c;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
*
*/
public final class W3CTestCaseCollector {
private static final String[] TEST_SUITE_PATHS =
{"w3c/xmlschema2006-11-06/nistMeta/NISTXMLSchemaDatatypes.testSet"
};
private static final String[] TEST_SUITE_BASE_PATHS =
{"w3c/xmlschema2006-11-06/nistMeta/"
};
private static final String TEST_SUITE_JAR =
System.getProperty("org.apache.ws.xmlschema.w3c-testcases", "file:w3c-testcases.jar");
private static final ClassLoader TC_LOADER;
static {
try {
TC_LOADER = new URLClassLoader(new URL[] { new URL(TEST_SUITE_JAR)});
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
private W3CTestCaseCollector() {
}
/**
* Return all the tests to be used in automated testing.
* @return a list of SchemaTest objects.
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
* @throws URISyntaxException
*/
public static List<SchemaCase> getSchemaTests()
throws ParserConfigurationException, SAXException, IOException, URISyntaxException {
List<SchemaCase> results = new ArrayList<SchemaCase>();
for (int x = 0; x < TEST_SUITE_PATHS.length; x++) {
results.addAll(getSchemaTests(TEST_SUITE_PATHS[x], TEST_SUITE_BASE_PATHS[x]));
}
return results;
}
/**
* Return a list of tests as specified by some specific XML file.
* @param testSet
* @return
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
* @throws URISyntaxException
*/
public static List<SchemaCase> getSchemaTests(String testSet, String basePath)
throws ParserConfigurationException,
SAXException,
IOException, URISyntaxException {
URL setUrl = TC_LOADER.getResource(testSet);
InputStream setXmlStream = setUrl.openStream();
List<SchemaCase> schemaTests = new ArrayList<SchemaCase>();
Document doc = getDocument(new InputSource(setXmlStream));
NodeList testGroups = doc.getElementsByTagName("testGroup");
for (int i = 0; i < testGroups.getLength(); i++) {
Node testGroup = testGroups.item(i);
NodeList testGroupChildren = testGroup.getChildNodes();
Element schemaTestElem = null;
for (int j = 0; j < testGroupChildren.getLength(); j++) {
Node n = testGroupChildren.item(j);
if (!(n instanceof Element)) {
continue;
}
schemaTestElem = (Element)n;
if (schemaTestElem.getNodeName().equals("schemaTest")) {
break;
}
}
if (schemaTestElem != null) {
try {
SchemaCase schemaTest = new SchemaCase(setUrl, schemaTestElem);
schemaTest.setBaseFilePathname(basePath);
if (schemaTest.getSchemaDocumentLink() != null) {
schemaTests.add(schemaTest);
}
} catch (Exception e) {
// ignore errors?
}
}
}
return schemaTests;
}
/**
* Returns a DOM Document of the file passed in as the inputsource parameter
*
* @param inputSource input to read in as DOM Document
* @return DOM Document of the input source
* @throws Exception can be IOException or SAXException
*/
private static Document getDocument(InputSource inputSource) throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
return dbf.newDocumentBuilder().parse(inputSource);
}
}