Add initial compile steps with a simple multi-project setup to build.gradle

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
This commit is contained in:
Dominik Stadler 2016-10-07 19:33:11 +00:00
parent 21627eb1ab
commit 41e1e9ffb8
4 changed files with 299 additions and 105 deletions

View File

@ -19,3 +19,222 @@
// 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
*
**/

10
settings.gradle Normal file
View File

@ -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')

View File

@ -16,41 +16,42 @@
==================================================================== */
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());
}
}

View 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());
}
}