diff --git a/build.xml b/build.xml
index d54b6bf8f0..39e96c19bf 100644
--- a/build.xml
+++ b/build.xml
@@ -1034,7 +1034,8 @@ under the License.
-
+
diff --git a/src/ooxml/java/org/apache/poi/util/OOXMLLite.java b/src/ooxml/java/org/apache/poi/util/OOXMLLite.java
index 2144470bbd..52294a799e 100644
--- a/src/ooxml/java/org/apache/poi/util/OOXMLLite.java
+++ b/src/ooxml/java/org/apache/poi/util/OOXMLLite.java
@@ -35,6 +35,7 @@ import java.util.jar.JarFile;
import junit.framework.JUnit4TestAdapter;
import junit.framework.TestCase;
+import junit.framework.TestResult;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
@@ -88,6 +89,7 @@ public final class OOXMLLite {
else if (args[i].equals("-test")) test = args[++i];
else if (args[i].equals("-ooxml")) ooxml = args[++i];
}
+
OOXMLLite builder = new OOXMLLite(dest, test, ooxml);
builder.build();
}
@@ -97,23 +99,24 @@ public final class OOXMLLite {
List lst = new ArrayList();
//collect unit tests
System.out.println("Collecting unit tests from " + _testDir);
- collectTests(_testDir, _testDir, lst, ".+?\\.Test.+?\\.class$", ".+TestUnfixedBugs.class");
- System.out.println("Found " + lst.size() + " tests");
+ collectTests(_testDir, _testDir, lst, ".+.class$",
+ ".+(TestUnfixedBugs|MemoryUsage|TestDataProvider|TestDataSamples|All.+Tests|ZipFileAssert|PkiTestUtils|TestCellFormatPart\\$\\d|TestSignatureInfo\\$\\d).class");
+ System.out.println("Found " + lst.size() + " classes");
TestSuite suite = new TestSuite();
for (String arg : lst) {
//ignore inner classes defined in tests
- if (arg.indexOf('$') != -1) continue;
+ if (arg.indexOf('$') != -1) {
+ System.out.println("Inner class " + arg + " not included");
+ continue;
+ }
String cls = arg.replace(".class", "");
try {
Class> testclass = Class.forName(cls);
boolean isTest = TestCase.class.isAssignableFrom(testclass);
if (!isTest) {
- for (Method m : testclass.getDeclaredMethods()) {
- isTest = m.isAnnotationPresent(Test.class);
- if (isTest) break;
- }
+ isTest = checkForTestAnnotation(testclass);
}
if (isTest) {
@@ -124,8 +127,13 @@ public final class OOXMLLite {
}
}
+ System.out.println("Resulting TestSuite has " + suite.testCount() + " TestCases");
+
//run tests
- TestRunner.run(suite);
+ TestResult result = TestRunner.run(suite);
+ if(!result.wasSuccessful()) {
+ throw new RuntimeException("Tests did not succeed, cannot build ooxml-lite jar");
+ }
//see what classes from the ooxml-schemas.jar are loaded
System.out.println("Copying classes to " + _destDest);
@@ -152,14 +160,33 @@ public final class OOXMLLite {
//finally copy the compiled .xsb files
System.out.println("Copying .xsb resources");
JarFile jar = new JarFile(_ooxmlJar);
- for(Enumeration e = jar.entries(); e.hasMoreElements(); ){
- JarEntry je = e.nextElement();
- if(je.getName().matches("schemaorg_apache_xmlbeans/system/\\w+/\\w+\\.xsb")) {
- File destFile = new File(_destDest, je.getName());
- copyFile(jar.getInputStream(je), destFile);
+ try {
+ for(Enumeration e = jar.entries(); e.hasMoreElements(); ){
+ JarEntry je = e.nextElement();
+ if(je.getName().matches("schemaorg_apache_xmlbeans/system/\\w+/\\w+\\.xsb")) {
+ File destFile = new File(_destDest, je.getName());
+ copyFile(jar.getInputStream(je), destFile);
+ }
+ }
+ } finally {
+ jar.close();
+ }
+ }
+
+ private boolean checkForTestAnnotation(Class> testclass) {
+ for (Method m : testclass.getDeclaredMethods()) {
+ if(m.isAnnotationPresent(Test.class)) {
+ return true;
}
}
- jar.close();
+
+ System.out.println("Class " + testclass.getName() + " does not derive from TestCase and does not have a @Test annotation");
+
+ // Should we also look at superclasses to find cases
+ // where we have abstract base classes with derived tests?
+ // if(checkForTestAnnotation(testclass.getSuperclass())) return true;
+
+ return false;
}
/**
@@ -194,12 +221,14 @@ public final class OOXMLLite {
Vector> classes = (Vector>) _classes.get(appLoader);
Map> map = new HashMap>();
for (Class> cls : classes) {
- try {
- String jar = cls.getProtectionDomain().getCodeSource().getLocation().toString();
- if(jar.indexOf(ptrn) != -1) map.put(cls.getName(), cls);
- } catch (NullPointerException e) {
+ // e.g. proxy-classes, ...
+ if(cls.getProtectionDomain() == null ||
+ cls.getProtectionDomain().getCodeSource() == null) {
continue;
}
+
+ String jar = cls.getProtectionDomain().getCodeSource().getLocation().toString();
+ if(jar.indexOf(ptrn) != -1) map.put(cls.getName(), cls);
}
return map;
} catch (IllegalAccessException e) {
@@ -216,6 +245,6 @@ public final class OOXMLLite {
} finally {
destStream.close();
}
+ //System.out.println("Copied file to " + destFile);
}
-
}
\ No newline at end of file