diff options
author | Dominik Stadler <centic@apache.org> | 2014-11-07 22:33:54 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2014-11-07 22:33:54 +0000 |
commit | b604190ffaff546c2f342da8a52a4ded572c721a (patch) | |
tree | 1abf1215a4024a762e795ddc925e364df36ec72d | |
parent | 5f50592706d0f8dfef63e303e847d9902f9e5590 (diff) | |
download | poi-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.xml | 3 | ||||
-rw-r--r-- | src/ooxml/java/org/apache/poi/util/OOXMLLite.java | 67 |
2 files changed, 50 insertions, 20 deletions
@@ -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 |