Author: veithen
Date: Sun Aug 2 07:55:09 2009
New Revision: 800004
URL: http://svn.apache.org/viewvc?rev=800004&view=rev
Log:
Parser test suite:
* Added a feature to run the tests with StAX implementations that are not
available from public Maven repositories.
* Support implementations that require system properties (because they don't
have META-INF/services).
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml
(with props)
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt
(with props)
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTestSetup.java
- copied, changed from r799402,
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/SetContextClassLoaderTestWrapper.java
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/com.ibm.ws.runtime.properties
Removed:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/SetContextClassLoaderTestWrapper.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/pom.xml
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTest.java
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml?rev=800004&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml
(added)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml
Sun Aug 2 07:55:09 2009
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+<project>
+ <!-- Use this to extract the XLXP parser from the Feature Pack for Web
Services for
+ WebSphere Application Server V6.1.
+
+ Usage: ant extract-xlxp -Dfile=/path/to/6.1.0-WS-WAS-WSFEP-WinX32.zip
-->
+ <target name="extract-xlxp">
+ <property name="file" value=""/>
+ <mkdir dir=".tmp"/>
+ <unzip src="${file}" dest=".tmp">
+ <patternset>
+ <include
name="EBIFMaintenance/6.1.0.9-WS-WASFeature-IFII000002.pak"/>
+ </patternset>
+ </unzip>
+ <unzip src=".tmp/EBIFMaintenance/6.1.0.9-WS-WASFeature-IFII000002.pak"
dest=".tmp">
+ <patternset>
+ <include
name="repository/was.rt.bundle/plugins/com.ibm.ws.runtime_6.1.0.jar/**/*"/>
+ </patternset>
+ </unzip>
+ <zip destfile="com.ibm.ws.runtime_6.1.0.jar" >
+ <fileset
dir=".tmp/repository/was.rt.bundle/plugins/com.ibm.ws.runtime_6.1.0.jar"/>
+ </zip>
+ <delete dir=".tmp"/>
+ </target>
+</project>
Propchange:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/build.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt?rev=800004&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt
(added)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt
Sun Aug 2 07:55:09 2009
@@ -0,0 +1 @@
+Use this folder to drop other parsers that are not available from public Maven
repositories.
\ No newline at end of file
Propchange:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/parsers/readme.txt
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/pom.xml
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/pom.xml?rev=800004&r1=800003&r2=800004&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/pom.xml
(original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/pom.xml
Sun Aug 2 07:55:09 2009
@@ -92,11 +92,6 @@
</dependency>
</dependencies>
<build>
- <testResources>
- <testResource>
- <directory>test-resources</directory>
- </testResource>
- </testResources>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTest.java?rev=800004&r1=800003&r2=800004&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTest.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTest.java
Sun Aug 2 07:55:09 2009
@@ -20,10 +20,12 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
+import java.io.InputStream;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.Properties;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
@@ -31,17 +33,21 @@
import junit.framework.TestCase;
import junit.framework.TestSuite;
-public class ParserTest extends TestCase {
- public static Test suite() throws Exception {
- ClassLoader parentClassLoader = ParserTest.class.getClassLoader();
- File targetDir = new File("target");
- FilenameFilter jarFilter = new FilenameFilter() {
- public boolean accept(File dir, String name) {
- return name.endsWith(".jar");
- }
- };
- File[] testJars = new File(targetDir,
"test-jars").listFiles(jarFilter);
-
+public class ParserTest extends TestSuite {
+ private static final FilenameFilter jarFilter = new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".jar");
+ }
+ };
+
+ private final ClassLoader parentClassLoader;
+ private TestSuite suite;
+
+ public ParserTest() {
+ parentClassLoader = ParserTest.class.getClassLoader();
+ }
+
+ private void loadTestJars(File[] testJars) throws Exception {
// Build the class loader. We use a single class loader for all test
JARs because there
// are dependencies between them.
URL[] testJarUrls = new URL[testJars.length];
@@ -51,7 +57,7 @@
ClassLoader testClassLoader = new URLClassLoader(testJarUrls,
parentClassLoader);
// Scan the test JARs for test cases/suites and build a test suite
from them
- TestSuite suite = new TestSuite();
+ suite = new TestSuite();
for (int i=0; i<testJars.length; i++) {
JarInputStream jar = new JarInputStream(new
FileInputStream(testJars[i]));
try {
@@ -78,21 +84,66 @@
jar.close();
}
}
+ }
+
+ private void addParserFromJRE() {
+ addTest(new ParserTestSetup(suite, ClassLoader.getSystemClassLoader(),
null));
+ }
+
+ private void addParsersFromDirectory(File dir) throws Exception {
+ // Build decorators that execute the test suite using different StAX
implementations
+ File[] parserJars = dir.listFiles(jarFilter);
+ for (int i=0; i<parserJars.length; i++) {
+ addParserJar(parserJars[i]);
+ }
+ }
+
+ private void addParserJar(File parserJar) throws Exception {
+ Properties props = null;
- TestSuite superSuite = new TestSuite();
+ String name = parserJar.getName();
+ int delimiterIndex = name.length();
+ outer: while (true) {
+ while (true) {
+ if (delimiterIndex-- == 0) {
+ break outer;
+ }
+ char c = name.charAt(delimiterIndex);
+ if (c == '.' || c == '_' || c == '-') {
+ break;
+ }
+ }
+ InputStream in = ParserTest.class.getResourceAsStream("/" +
name.substring(0, delimiterIndex) + ".properties");
+ if (in != null) {
+ try {
+ props = new Properties();
+ props.load(in);
+ } finally {
+ in.close();
+ }
+ break;
+ }
+ }
+
+ ClassLoader parserClassLoader = new URLClassLoader(new URL[] {
parserJar.toURL() }, parentClassLoader);
+ addTest(new ParserTestSetup(suite, parserClassLoader, props));
+ }
+
+ public static Test suite() throws Exception {
+ ParserTest suite = new ParserTest();
+
+ File targetDir = new File("target");
+ suite.loadTestJars(new File(targetDir,
"test-jars").listFiles(jarFilter));
// On Java 1.6, also add the StAX implementation from the JRE
// The check is not very clean but it should be enough for a unit
test...
if (System.getProperty("java.version").startsWith("1.6")) {
- superSuite.addTest(new SetContextClassLoaderTestWrapper(suite,
ClassLoader.getSystemClassLoader()));
+ suite.addParserFromJRE();
}
- // Build decorators that execute the test suite using different StAX
implementations
- File[] parserJars = new File(targetDir,
"parsers").listFiles(jarFilter);
- for (int i=0; i<parserJars.length; i++) {
- ClassLoader parserClassLoader = new URLClassLoader(new URL[] {
parserJars[i].toURL() }, parentClassLoader);
- superSuite.addTest(new SetContextClassLoaderTestWrapper(suite,
parserClassLoader));
- }
- return superSuite;
+ suite.addParsersFromDirectory(new File("parsers"));
+ suite.addParsersFromDirectory(new File(targetDir, "parsers"));
+
+ return suite;
}
}
Copied:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTestSetup.java
(from r799402,
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/SetContextClassLoaderTestWrapper.java)
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTestSetup.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTestSetup.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/SetContextClassLoaderTestWrapper.java&r1=799402&r2=800004&rev=800004&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/SetContextClassLoaderTestWrapper.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/java/ParserTestSetup.java
Sun Aug 2 07:55:09 2009
@@ -17,26 +17,61 @@
* under the License.
*/
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
import junit.extensions.TestDecorator;
import junit.framework.Test;
import junit.framework.TestResult;
-public class SetContextClassLoaderTestWrapper extends TestDecorator {
+public class ParserTestSetup extends TestDecorator {
private final ClassLoader classLoader;
+ private final Properties props;
- public SetContextClassLoaderTestWrapper(Test test, ClassLoader
classLoader) {
+ public ParserTestSetup(Test test, ClassLoader classLoader, Properties
props) {
super(test);
this.classLoader = classLoader;
+ this.props = props;
}
public void run(TestResult result) {
Thread currentThread = Thread.currentThread();
ClassLoader savedClassLoader = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(classLoader);
+
+ Map savedProps;
+ if (props == null) {
+ savedProps = null;
+ } else {
+ // Need a HashMap (instead of Properties) since we store null
values
+ savedProps = new HashMap();
+ for (Iterator it = props.entrySet().iterator(); it.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)it.next();
+ String key = (String)entry.getKey();
+ savedProps.put(key, System.getProperty(key));
+ System.setProperty(key, (String)entry.getValue());
+ }
+ }
+
try {
super.run(result);
} finally {
currentThread.setContextClassLoader(savedClassLoader);
+
+ if (savedProps != null) {
+ for (Iterator it = savedProps.entrySet().iterator();
it.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)it.next();
+ String key = (String)entry.getKey();
+ String value = (String)entry.getValue();
+ if (value == null) {
+ System.getProperties().remove(key);
+ } else {
+ System.setProperty(key, value);
+ }
+ }
+ }
}
}
}
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/com.ibm.ws.runtime.properties
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/com.ibm.ws.runtime.properties?rev=800004&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/com.ibm.ws.runtime.properties
(added)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-parser-tests/src/test/resources/com.ibm.ws.runtime.properties
Sun Aug 2 07:55:09 2009
@@ -0,0 +1,2 @@
+javax.xml.stream.XMLInputFactory=com.ibm.xml.xlxp.api.stax.XMLInputFactoryImpl
+javax.xml.stream.XMLOutputFactory=com.ibm.xml.xlxp.api.stax.XMLOutputFactoryImpl