aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2014-11-07 22:33:54 +0000
committerDominik Stadler <centic@apache.org>2014-11-07 22:33:54 +0000
commitb604190ffaff546c2f342da8a52a4ded572c721a (patch)
tree1abf1215a4024a762e795ddc925e364df36ec72d
parent5f50592706d0f8dfef63e303e847d9902f9e5590 (diff)
downloadpoi-b604190ffaff546c2f342da8a52a4ded572c721a.tar.gz
poi-b604190ffaff546c2f342da8a52a4ded572c721a.zip
Fail build if test-cases fail in OOXMLLite execution to avoid missing included schema-classes. Also adjust how we look for test-classes so that we print out the ones that we skip with known ones excluded. Also print out skipped inner classes.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1637475 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--build.xml3
-rw-r--r--src/ooxml/java/org/apache/poi/util/OOXMLLite.java67
2 files changed, 50 insertions, 20 deletions
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.
<zipfileset includes="**/*" src="${ooxml.security.jar}"/>
</jar>
- <java classname="org.apache.poi.util.OOXMLLite" fork="yes">
+ <java classname="org.apache.poi.util.OOXMLLite" fork="yes"
+ failonerror="true">
<classpath>
<pathelement path="${ooxml.lite-merged.dir}/ooxml-lite-merged.jar"/>
</classpath>
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<String> lst = new ArrayList<String>();
//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<JarEntry> 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<JarEntry> 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();
}
- jar.close();
+ }
+
+ private boolean checkForTestAnnotation(Class<?> testclass) {
+ for (Method m : testclass.getDeclaredMethods()) {
+ if(m.isAnnotationPresent(Test.class)) {
+ return true;
+ }
+ }
+
+ 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<Class<?>> classes = (Vector<Class<?>>) _classes.get(appLoader);
Map<String, Class<?>> map = new HashMap<String, Class<?>>();
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