]> source.dussan.org Git - poi.git/commitdiff
Add initial compile steps with a simple multi-project setup to build.gradle
authorDominik Stadler <centic@apache.org>
Fri, 7 Oct 2016 19:33:11 +0000 (19:33 +0000)
committerDominik Stadler <centic@apache.org>
Fri, 7 Oct 2016 19:33:11 +0000 (19:33 +0000)
Adjust some tests to make them run fine in the Gradle build as well

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1763816 13f79535-47bb-0310-9956-ffa450edef68

build.gradle
settings.gradle [new file with mode: 0644]
src/scratchpad/testcases/org/apache/poi/hssf/converter/TestExcelConverterSuite.java
src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java

index 20f98e8205f54b831b942475fcd8bc47d96b2c42..7bf080246ef0bd160171d9da7547862e6f57f236 100644 (file)
 // https://docs.gradle.org/current/userguide/ant.html
 
 ant.importBuild 'build.xml'
+
+/**
+
+Define properties for all projects, including this one 
+
+*/
+allprojects {
+       apply plugin: 'eclipse'
+
+       task wrapper(type: Wrapper) {
+           gradleVersion = '2.14.1'
+       }
+       
+       task adjustWrapperPropertiesFile << {
+               ant.replaceregexp(match:'^#.*', replace:'', flags:'g', byline:true) {
+                       fileset(dir: project.projectDir, includes: 'gradle/wrapper/gradle-wrapper.properties')
+               }
+               new File(project.projectDir, 'gradle/wrapper/gradle-wrapper.properties').with { it.text = it.readLines().findAll { it }.sort().join('\n') }
+               ant.fixcrlf(file: 'gradle/wrapper/gradle-wrapper.properties', eol: 'lf')
+       }
+       wrapper.finalizedBy adjustWrapperPropertiesFile
+}
+
+/**
+
+Define things that are only necessary in sub-projects, but not in the master-project itself
+
+*/
+subprojects {
+    //Put instructions for each sub project, but not the master
+    apply plugin: 'java'
+    apply plugin: 'jacoco'
+    
+       version = '3.16-beta1'
+
+       tasks.withType(JavaCompile) {
+           options.encoding = 'UTF-8'
+       }
+
+    sourceCompatibility = 1.6
+
+    repositories {
+        mavenCentral()
+    }
+
+       jar {
+               manifest {
+                       attributes 'Implementation-Title': 'Apache POI', 'Implementation-Version': version
+               }
+       }
+
+    test {
+               // Exclude some tests that are not actually tests or do not run cleanly on purpose
+               exclude '**/BaseTestBorderStyle.class'
+               exclude '**/BaseTestCellUtil.class'
+               exclude '**/TestUnfixedBugs.class'
+               exclude '**/TestOneFile.class'
+
+        systemProperties = System.properties
+    
+        // set heap size for the test JVM(s)
+        minHeapSize = "128m"
+        maxHeapSize = "768m"
+  
+        // show standard out and standard error of the test JVM(s) on the console
+        //testLogging.showStandardStreams = true
+
+        // http://forums.gradle.org/gradle/topics/jacoco_related_failure_in_multiproject_build
+        systemProperties['user.dir'] = workingDir
+        
+        systemProperties['POI.testdata.path'] = '../../test-data'
+        //systemProperties['user.language'] = 'en'
+        //systemProperties['user.country'] = 'US'
+    }
+
+       test.beforeSuite { TestDescriptor suite ->
+          System.setProperty('user.language', 'en')
+          System.setProperty('user.country', 'US')
+       }
+
+    jacoco {
+        toolVersion = '0.7.7.201606060606'
+    }
+}
+
+project('main') {
+       sourceSets.main.java.srcDirs = ['../../src/java']
+       sourceSets.main.resources.srcDirs = ['../../src/resources/main']
+       sourceSets.test.java.srcDirs = ['../../src/testcases']
+       
+       dependencies {
+               compile 'commons-codec:commons-codec:1.10'
+               compile 'commons-logging:commons-logging:1.2'
+               
+               testCompile 'junit:junit:4.12'
+       }
+       
+       // Create a separate jar for test-code to depend on it in other projects
+       // See http://stackoverflow.com/questions/5144325/gradle-test-dependency
+       task testJar(type: Jar, dependsOn: testClasses) {
+               baseName = "test-${project.archivesBaseName}"
+               from sourceSets.test.output
+       }
+
+       configurations {
+               tests
+       }
+
+       artifacts {
+               tests testJar
+       }
+}
+
+project('ooxml') {
+       sourceSets.main.java.srcDirs = ['../../src/ooxml/java']
+       sourceSets.main.resources.srcDirs = ['../../src/ooxml/resources', '../../src/resources/ooxml']
+       sourceSets.test.java.srcDirs = ['../../src/ooxml/testcases']
+
+    // for now import the ant-task for building the jars from build.xml
+    // we need to rename the tasks as e.g. task "jar" conflicts with :ooxml:jar
+       ant.importBuild('../../build.xml') { antTargetName ->
+               'ant-' + antTargetName
+       }
+       compileJava.dependsOn 'ant-compile-ooxml-xsds'
+       
+       dependencies {
+               compile 'org.apache.xmlbeans:xmlbeans:2.6.0'
+               compile 'org.apache.commons:commons-collections4:4.1'
+               compile 'org.apache.santuario:xmlsec:2.0.6'
+               compile 'org.bouncycastle:bcpkix-jdk15on:1.54'
+               compile 'com.github.virtuald:curvesapi:1.04'
+               
+               // for ooxml-lite, should we move this somewhere else?
+               compile 'junit:junit:4.12'
+
+               compile project(':main')
+               compile project(':scratchpad')          // TODO: get rid of this dependency!
+               compile files('../../ooxml-lib/ooxml-schemas-1.3.jar')
+               compile files('../../ooxml-lib/ooxml-security-1.1.jar')
+               
+               testCompile 'junit:junit:4.12'
+               testCompile project(path: ':main', configuration: 'tests')
+       }
+}
+
+project('examples') {
+       sourceSets.main.java.srcDirs = ['../../src/examples/src']
+       
+       dependencies {
+               compile project(':main')
+               compile project(':ooxml')
+       }
+}
+
+
+project('excelant') {
+       sourceSets.main.java.srcDirs = ['../../src/excelant/java']
+       sourceSets.main.resources.srcDirs = ['../../src/excelant/resources']
+       sourceSets.test.java.srcDirs = ['../../src/excelant/testcases']
+       
+       dependencies {
+               compile 'org.apache.ant:ant:1.9.4'
+
+               compile project(':main')
+               compile project(':ooxml')
+
+               testCompile project(path: ':main', configuration: 'tests')
+       }
+}
+
+project('integrationtest') {
+       sourceSets.test.java.srcDirs = ['../../src/integrationtest']
+       
+       dependencies {
+               compile 'org.apache.ant:ant:1.9.4'
+
+               compile project(':main')
+               compile project(':ooxml')
+               compile project(':scratchpad')
+               compile project(':examples')
+               
+               testCompile 'junit:junit:4.12'
+       }
+
+    test {
+               // exclude these from the normal test-run
+               exclude '**/TestAllFiles.class'
+               exclude '**/*FileHandler.class'
+               exclude '**/RecordsStresser.class'
+       }
+       
+       task integrationTest(type: Test) {
+               // these are just tests used during development of more test-code
+               exclude '**/*FileHandler.class'
+               exclude '**/RecordStresser.class'
+       }
+}
+
+project('scratchpad') {
+       sourceSets.main.java.srcDirs = ['../../src/scratchpad/src']
+       sourceSets.main.resources.srcDirs = ['../../src/resources/scratchpad']
+       sourceSets.test.java.srcDirs = ['../../src/scratchpad/testcases']
+       
+       dependencies {
+               compile project(':main')
+               // cyclic-dependency here: compile project(':ooxml')
+               
+               testCompile 'junit:junit:4.12'
+               testCompile project(path: ':main', configuration: 'tests')
+       }
+}
+
+/*
+ * Notes:
+ * 
+ * See https://github.com/melix/japicmp-gradle-plugin and 
+ * https://github.com/codehaus/groovy-git/blob/7f940159920d4ea5bc727cfcbef8aba9b48c5e50/gradle/binarycompatibility.gradle for an example of using japicmp
+ * 
+ **/
diff --git a/settings.gradle b/settings.gradle
new file mode 100644 (file)
index 0000000..de9c7e7
--- /dev/null
@@ -0,0 +1,10 @@
+rootProject.name = 'poi'
+
+include 'main', 'ooxml', 'excelant', 'examples', 'scratchpad', 'integrationtest'
+
+project(':main').projectDir = new File(settingsDir, 'build/main')
+project(':ooxml').projectDir = new File(settingsDir, 'build/ooxml')
+project(':excelant').projectDir = new File(settingsDir, 'build/excelant')
+project(':examples').projectDir = new File(settingsDir, 'build/examples')
+project(':scratchpad').projectDir = new File(settingsDir, 'build/scratchpad')
+project(':integrationtest').projectDir = new File(settingsDir, 'build/integrationtest')
index 895267fd3c6c04c4db5a1ccb2b9d031db5f1b653..cdd803a7138e31308bdcf28a18ce88867b5ba93f 100644 (file)
 ==================================================================== */
 package org.apache.poi.hssf.converter;
 
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.StringWriter;
-import java.util.Arrays;
-import java.util.List;
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.util.XMLHelper;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.apache.poi.POIDataSamples;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.util.XMLHelper;
+import static org.junit.Assert.assertNotNull;
 
+@RunWith(Parameterized.class)
 public class TestExcelConverterSuite
 {
     /**
      * YK: a quick hack to exclude failing documents from the suite.
      */
-    private static List<String> failingFiles = Arrays.asList( //
+    @SuppressWarnings("ArraysAsListWithZeroOrOneArgument")
+    private static List<String> failingFiles = Arrays.asList(
             /* not failing, but requires more memory */
             "ex45698-22488.xls" );
 
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite(
-                TestExcelConverterSuite.class.getName() );
-
-        File directory = POIDataSamples.getSpreadSheetInstance().getFile(
+    @Parameterized.Parameters(name="{index}: {0}")
+    public static Iterable<Object[]> files() {
+        List<Object[]> files = new ArrayList<Object[]>();
+        File directory = POIDataSamples.getDocumentInstance().getFile(
                 "../spreadsheet" );
         for ( final File child : directory.listFiles( new FilenameFilter()
         {
@@ -60,38 +61,24 @@ public class TestExcelConverterSuite
             }
         } ) )
         {
-            final String name = child.getName();
-            suite.addTest( new TestCase( name + " [FO]" )
-            {
-                @Override
-                public void runTest() throws Exception
-                {
-                    testFo( child );
-                }
-            } );
-            suite.addTest( new TestCase( name + " [HTML]" )
-            {
-                @Override
-                public void runTest() throws Exception
-                {
-                    testHtml( child );
-                }
-            } );
+            files.add(new Object[] { child });
         }
 
-        return suite;
+        return files;
     }
 
-    protected static void testFo( File child ) throws Exception
+
+    @Parameterized.Parameter
+    public File child;
+
+    @Test
+    public void testFo() throws Exception
     {
         HSSFWorkbook workbook;
-        try
-        {
+        try {
             workbook = ExcelToHtmlUtils.loadXls( child );
-        }
-        catch ( Exception exc )
-        {
-            // unable to parse file -- not WordToFoConverter fault
+        } catch ( Exception exc ) {
+            // unable to parse file -- not ExcelToFoConverter fault
             return;
         }
 
@@ -109,18 +96,18 @@ public class TestExcelConverterSuite
         transformer.transform(
                 new DOMSource( excelToHtmlConverter.getDocument() ),
                 new StreamResult( stringWriter ) );
+
+        assertNotNull(stringWriter.toString());
     }
 
-    protected static void testHtml( File child ) throws Exception
+    @Test
+    public void testHtml() throws Exception
     {
         HSSFWorkbook workbook;
-        try
-        {
+        try {
             workbook = ExcelToHtmlUtils.loadXls( child );
-        }
-        catch ( Exception exc )
-        {
-            // unable to parse file -- not WordToFoConverter fault
+        } catch ( Exception exc ) {
+            // unable to parse file -- not ExcelToFoConverter fault
             return;
         }
 
@@ -138,5 +125,7 @@ public class TestExcelConverterSuite
         transformer.transform(
                 new DOMSource( excelToHtmlConverter.getDocument() ),
                 new StreamResult( stringWriter ) );
+
+        assertNotNull(stringWriter.toString());
     }
 }
index 77a75a19373063c22bbe8662fc8d2dfc6a185b23..f567978a1f26ac6a81610269708ee9dd96cb2bb1 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.hwpf.converter;
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.StringWriter;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -28,14 +29,16 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hwpf.HWPFDocumentCore;
 import org.apache.poi.util.XMLHelper;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import static org.junit.Assert.assertNotNull;
 
+@RunWith(Parameterized.class)
 public class TestWordToConverterSuite
 {
     /**
@@ -44,11 +47,9 @@ public class TestWordToConverterSuite
     private static List<String> failingFiles = Arrays
             .asList( "ProblemExtracting.doc" );
 
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite(
-                TestWordToConverterSuite.class.getName() );
-
+    @Parameterized.Parameters(name="{index}: {0}")
+    public static Iterable<Object[]> files() {
+        List<Object[]> files = new ArrayList<Object[]>();
         File directory = POIDataSamples.getDocumentInstance().getFile(
                 "../document" );
         for ( final File child : directory.listFiles( new FilenameFilter()
@@ -59,44 +60,21 @@ public class TestWordToConverterSuite
             }
         } ) )
         {
-            final String name = child.getName();
-
-            suite.addTest( new TestCase( name + " [FO]" )
-            {
-                public void runTest() throws Exception
-                {
-                    testFo( child );
-                }
-            } );
-            suite.addTest( new TestCase( name + " [HTML]" )
-            {
-                public void runTest() throws Exception
-                {
-                    testHtml( child );
-                }
-            } );
-            suite.addTest( new TestCase( name + " [TEXT]" )
-            {
-                public void runTest() throws Exception
-                {
-                    testText( child );
-                }
-            } );
-
+            files.add(new Object[] { child });
         }
 
-        return suite;
+        return files;
     }
 
-    protected static void testFo( File child ) throws Exception
-    {
+    @Parameterized.Parameter
+    public File child;
+
+    @Test
+    public void testFo() throws Exception {
         HWPFDocumentCore hwpfDocument;
-        try
-        {
+        try {
             hwpfDocument = AbstractWordUtils.loadDoc( child );
-        }
-        catch ( Exception exc )
-        {
+        } catch ( Exception exc ) {
             return;
         }
 
@@ -115,17 +93,16 @@ public class TestWordToConverterSuite
                 new StreamResult( stringWriter ) );
 
         // no exceptions
+        assertNotNull(stringWriter.toString());
     }
 
-    protected static void testHtml( File child ) throws Exception
+    @Test
+    public void testHtml() throws Exception
     {
         HWPFDocumentCore hwpfDocument;
-        try
-        {
+        try {
             hwpfDocument = AbstractWordUtils.loadDoc( child );
-        }
-        catch ( Exception exc )
-        {
+        } catch ( Exception exc ) {
             return;
         }
 
@@ -145,17 +122,16 @@ public class TestWordToConverterSuite
                 new StreamResult( stringWriter ) );
 
         // no exceptions
+        assertNotNull(stringWriter.toString());
     }
 
-    protected static void testText( File child ) throws Exception
+    @Test
+    public void testText() throws Exception
     {
         HWPFDocumentCore wordDocument;
-        try
-        {
+        try {
             wordDocument = AbstractWordUtils.loadDoc( child );
-        }
-        catch ( Exception exc )
-        {
+        } catch ( Exception exc ) {
             return;
         }
 
@@ -174,7 +150,7 @@ public class TestWordToConverterSuite
                 new DOMSource( wordToTextConverter.getDocument() ),
                 new StreamResult( stringWriter ) );
 
-        stringWriter.toString();
         // no exceptions
+        assertNotNull(stringWriter.toString());
     }
 }