From 8b283b14b10c01f6b7247555ac0098258d7f0164 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Wed, 19 Aug 2009 18:51:44 +0000 Subject: [PATCH] Centralize logic for finding/opening sample files git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@805928 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 2 + .../org/apache/poi/TestDetectAsOOXML.java | 19 +- .../org/apache/poi/TestPOIXMLProperties.java | 2 +- .../apache/poi/ss/TestWorkbookFactory.java | 39 ++-- .../apache/poi/xssf/XSSFTestDataSamples.java | 8 + .../xssf/eventusermodel/TestXSSFReader.java | 31 +-- .../poi/xssf/model/TestCommentsTable.java | 34 +--- .../poi/xssf/model/TestStylesTable.java | 18 +- .../poi/xssf/usermodel/TestXSSFHyperlink.java | 16 +- .../poi/xssf/usermodel/TestXSSFSheet.java | 10 +- .../org/apache/poi/xwpf/TestXWPFDocument.java | 47 +---- .../apache/poi/xwpf/XWPFTestDataSamples.java | 54 ++++++ .../xwpf/extractor/TestXWPFWordExtractor.java | 36 ++-- .../model/TestXWPFHeaderFooterPolicy.java | 49 +---- .../poi/xwpf/usermodel/TestXWPFHeader.java | 23 +-- .../poi/xwpf/usermodel/TestXWPFParagraph.java | 19 +- .../org/apache/poi/hwpf/HWPFDocFixture.java | 13 +- .../apache/poi/hwpf/HWPFTestDataSamples.java | 65 +++++++ .../org/apache/poi/hwpf/TestHWPFPictures.java | 53 ++--- .../apache/poi/hwpf/TestHWPFRangeParts.java | 15 +- .../hwpf/extractor/TestDifferentRoutes.java | 7 +- .../poi/hwpf/extractor/TestWordExtractor.java | 53 ++--- .../hwpf/extractor/TestWordExtractorBugs.java | 8 +- .../poi/hwpf/model/TestSavedByTable.java | 14 +- .../poi/hwpf/model/TestTextPieceTable.java | 15 +- .../poi/hwpf/usermodel/TestBug46610.java | 14 +- .../poi/hwpf/usermodel/TestHeaderStories.java | 28 +-- .../poi/hwpf/usermodel/TestPictures.java | 30 +-- .../poi/hwpf/usermodel/TestProblems.java | 24 +-- .../poi/hwpf/usermodel/TestRangeDelete.java | 16 +- .../hwpf/usermodel/TestRangeInsertion.java | 14 +- .../hwpf/usermodel/TestRangeProperties.java | 14 +- .../hwpf/usermodel/TestRangeReplacement.java | 20 +- .../apache/poi/hwpf/usermodel/TestShapes.java | 5 +- .../org/apache/poi/POIDataSamples.java | 182 ++++++++++++++++++ .../apache/poi/hssf/HSSFTestDataSamples.java | 161 ++-------------- 36 files changed, 498 insertions(+), 660 deletions(-) create mode 100755 src/ooxml/testcases/org/apache/poi/xwpf/XWPFTestDataSamples.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java create mode 100755 src/testcases/org/apache/poi/POIDataSamples.java diff --git a/build.xml b/build.xml index 0dc8ff350e..1bc0579ab2 100644 --- a/build.xml +++ b/build.xml @@ -200,6 +200,7 @@ under the License. + @@ -519,6 +520,7 @@ under the License. + diff --git a/src/ooxml/testcases/org/apache/poi/TestDetectAsOOXML.java b/src/ooxml/testcases/org/apache/poi/TestDetectAsOOXML.java index dca593c3c7..2461f463dd 100644 --- a/src/ooxml/testcases/org/apache/poi/TestDetectAsOOXML.java +++ b/src/ooxml/testcases/org/apache/poi/TestDetectAsOOXML.java @@ -22,23 +22,18 @@ package org.apache.poi; import junit.framework.TestCase; import java.io.*; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.openxml4j.opc.OPCPackage; + /** * Class to test that HXF correctly detects OOXML * documents */ public class TestDetectAsOOXML extends TestCase { - public String dirname; - - public void setUp() { - dirname = System.getProperty("HSSF.testdata.path"); - } - public void testOpensProperly() throws Exception { - File f = new File(dirname + "/sample.xlsx"); - - POIXMLDocument.openPackage(f.toString()); + OPCPackage.open(HSSFTestDataSamples.openSampleFileStream("sample.xlsx")); } public void testDetectAsPOIFS() throws Exception { @@ -46,19 +41,19 @@ public class TestDetectAsOOXML extends TestCase // ooxml file is in = new PushbackInputStream( - new FileInputStream(dirname + "/SampleSS.xlsx"), 10 + HSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx"), 10 ); assertTrue(POIXMLDocument.hasOOXMLHeader(in)); // xls file isn't in = new PushbackInputStream( - new FileInputStream(dirname + "/SampleSS.xls"), 10 + HSSFTestDataSamples.openSampleFileStream("SampleSS.xls"), 10 ); assertFalse(POIXMLDocument.hasOOXMLHeader(in)); // text file isn't in = new PushbackInputStream( - new FileInputStream(dirname + "/SampleSS.txt"), 10 + HSSFTestDataSamples.openSampleFileStream("SampleSS.txt"), 10 ); assertFalse(POIXMLDocument.hasOOXMLHeader(in)); } diff --git a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java index 7d0128618b..dd9eeeb939 100755 --- a/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java +++ b/src/ooxml/testcases/org/apache/poi/TestPOIXMLProperties.java @@ -175,7 +175,7 @@ public final class TestPOIXMLProperties extends TestCase { public void testGetSetRevision() { String revision = _coreProperties.getRevision(); - assertTrue("Revision number is 1", new Integer(_coreProperties.getRevision()).intValue() > 1); + assertTrue("Revision number is 1", new Integer(revision)> 1); _coreProperties.setRevision("20"); assertEquals("20", _coreProperties.getRevision()); _coreProperties.setRevision("20xx"); diff --git a/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java b/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java index 0cebd76410..6858e93acb 100644 --- a/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java +++ b/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java @@ -17,10 +17,8 @@ package org.apache.poi.ss; -import java.io.File; -import java.io.FileInputStream; - import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; @@ -30,26 +28,14 @@ import org.apache.poi.openxml4j.opc.OPCPackage; import junit.framework.TestCase; public final class TestWorkbookFactory extends TestCase { - private File xls; - private File xlsx; - private File txt; + private String xls; + private String xlsx; + private String txt; protected void setUp() { - xls = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "SampleSS.xls" - ); - xlsx = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "SampleSS.xlsx" - ); - txt = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "SampleSS.txt" - ); - assertTrue(xls.exists()); - assertTrue(xlsx.exists()); - assertTrue(txt.exists()); + xls = "SampleSS.xls"; + xlsx = "SampleSS.xlsx"; + txt = "SampleSS.txt"; } public void testCreateNative() throws Exception { @@ -57,14 +43,15 @@ public final class TestWorkbookFactory extends TestCase { // POIFS -> hssf wb = WorkbookFactory.create( - new POIFSFileSystem(new FileInputStream(xls)) + new POIFSFileSystem(HSSFTestDataSamples.openSampleFileStream(xls)) ); assertNotNull(wb); assertTrue(wb instanceof HSSFWorkbook); // Package -> xssf wb = WorkbookFactory.create( - OPCPackage.open(xlsx.toString()) + OPCPackage.open( + HSSFTestDataSamples.openSampleFileStream(xlsx)) ); assertNotNull(wb); assertTrue(wb instanceof XSSFWorkbook); @@ -80,20 +67,20 @@ public final class TestWorkbookFactory extends TestCase { // InputStream -> either wb = WorkbookFactory.create( - new FileInputStream(xls) + HSSFTestDataSamples.openSampleFileStream(xls) ); assertNotNull(wb); assertTrue(wb instanceof HSSFWorkbook); wb = WorkbookFactory.create( - new FileInputStream(xlsx) + HSSFTestDataSamples.openSampleFileStream(xlsx) ); assertNotNull(wb); assertTrue(wb instanceof XSSFWorkbook); try { wb = WorkbookFactory.create( - new FileInputStream(txt) + HSSFTestDataSamples.openSampleFileStream(txt) ); fail(); } catch(IllegalArgumentException e) { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java b/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java index 95b8d71b14..94df0da632 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java @@ -38,6 +38,14 @@ import org.apache.poi.util.TempFile; * @author Josh Micich */ public class XSSFTestDataSamples { + + public static InputStream openSampleFileStream(String sampleFileName) { + return HSSFTestDataSamples.openSampleFileStream(sampleFileName); + } + public static byte[] getTestDataFileContent(String fileName) { + return HSSFTestDataSamples.getTestDataFileContent(fileName); + } + public static final XSSFWorkbook openSampleWorkbook(String sampleName) { InputStream is = HSSFTestDataSamples.openSampleFileStream(sampleName); try { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java index f02cfb4e47..7e6281e757 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java @@ -25,31 +25,16 @@ import junit.framework.TestCase; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.openxml4j.opc.OPCPackage; /** * Tests for {@link XSSFReader} */ public final class TestXSSFReader extends TestCase { - private String dirName; - - @Override - protected void setUp() { - - dirName = System.getProperty("HSSF.testdata.path"); - assertNotNull(dirName); - assertTrue( (new File(dirName)).exists() ); - - // Use system out logger - System.setProperty( - "org.apache.poi.util.POILogger", - "org.apache.poi.util.SystemOutLogger" - ); - } public void testGetBits() throws Exception { - File f = new File(dirName, "SampleSS.xlsx"); - OPCPackage pkg = OPCPackage.open(f.toString()); + OPCPackage pkg = OPCPackage.open(XSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx")); XSSFReader r = new XSSFReader(pkg); @@ -62,8 +47,7 @@ public final class TestXSSFReader extends TestCase { } public void testStyles() throws Exception { - File f = new File(dirName, "SampleSS.xlsx"); - OPCPackage pkg = OPCPackage.open(f.toString()); + OPCPackage pkg = OPCPackage.open(XSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx")); XSSFReader r = new XSSFReader(pkg); @@ -72,8 +56,7 @@ public final class TestXSSFReader extends TestCase { } public void testStrings() throws Exception { - File f = new File(dirName, "SampleSS.xlsx"); - OPCPackage pkg = OPCPackage.open(f.toString()); + OPCPackage pkg = OPCPackage.open(XSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx")); XSSFReader r = new XSSFReader(pkg); @@ -82,8 +65,7 @@ public final class TestXSSFReader extends TestCase { } public void testSheets() throws Exception { - File f = new File(dirName, "SampleSS.xlsx"); - OPCPackage pkg = OPCPackage.open(f.toString()); + OPCPackage pkg = OPCPackage.open(XSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx")); XSSFReader r = new XSSFReader(pkg); byte[] data = new byte[4096]; @@ -115,8 +97,7 @@ public final class TestXSSFReader extends TestCase { * (as they are defined in the workbook.xml) */ public void testOrderOfSheets() throws Exception { - File f = new File(dirName, "reordered_sheets.xlsx"); - OPCPackage pkg = OPCPackage.open(f.toString()); + OPCPackage pkg = OPCPackage.open(XSSFTestDataSamples.openSampleFileStream("reordered_sheets.xlsx")); XSSFReader r = new XSSFReader(pkg); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java b/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java index 07eaa4b8fc..14dde090e2 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java @@ -19,7 +19,6 @@ package org.apache.poi.xssf.model; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.File; import java.util.List; import org.apache.poi.ss.usermodel.Cell; @@ -120,14 +119,7 @@ public class TestCommentsTable extends TestCase { } public void testDontLoostNewLines() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithVariousData.xlsx" - ); - assertTrue(xml.exists()); - - OPCPackage pkg = OPCPackage.open(xml.toString()); - XSSFWorkbook wb = new XSSFWorkbook(pkg); + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithVariousData.xlsx"); List rels = wb.getSheetAt(0).getRelations(); CommentsTable ct = null; for(POIXMLDocumentPart p : rels) { @@ -171,13 +163,7 @@ public class TestCommentsTable extends TestCase { } public void testExisting() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithVariousData.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithVariousData.xlsx"); Sheet sheet1 = workbook.getSheetAt(0); Sheet sheet2 = workbook.getSheetAt(1); @@ -207,13 +193,7 @@ public class TestCommentsTable extends TestCase { } public void testWriteRead() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithVariousData.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithVariousData.xlsx"); XSSFSheet sheet1 = workbook.getSheetAt(0); XSSFSheet sheet2 = workbook.getSheetAt(1); @@ -260,13 +240,7 @@ public class TestCommentsTable extends TestCase { } public void testReadWriteMultipleAuthors() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithMoreVariousData.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx"); XSSFSheet sheet1 = workbook.getSheetAt(0); XSSFSheet sheet2 = workbook.getSheetAt(1); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java b/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java index 46b0fd802c..7adfdd0f5c 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java @@ -17,8 +17,6 @@ package org.apache.poi.xssf.model; -import java.io.File; - import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.XSSFTestDataSamples; @@ -26,15 +24,7 @@ import org.apache.poi.xssf.XSSFTestDataSamples; import junit.framework.TestCase; public final class TestStylesTable extends TestCase { - private File xml; - - protected void setUp() { - xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "Formatting.xlsx" - ); - assertTrue(xml.exists()); - } + private String testFile = "Formatting.xlsx"; public void testCreateNew() { StylesTable st = new StylesTable(); @@ -64,7 +54,7 @@ public final class TestStylesTable extends TestCase { } public void testLoadExisting() throws Exception { - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(testFile); assertNotNull(workbook.getStylesSource()); StylesTable st = workbook.getStylesSource(); @@ -72,7 +62,7 @@ public final class TestStylesTable extends TestCase { doTestExisting(st); } public void testLoadSaveLoad() throws Exception { - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(testFile); assertNotNull(workbook.getStylesSource()); StylesTable st = workbook.getStylesSource(); @@ -136,7 +126,7 @@ public final class TestStylesTable extends TestCase { } public void testPopulateExisting() throws Exception { - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(testFile); assertNotNull(workbook.getStylesSource()); StylesTable st = workbook.getStylesSource(); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java index 0a7b08347e..e6d6e97952 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java @@ -39,13 +39,7 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { } public void testLoadExisting() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithMoreVariousData.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx"); assertEquals(3, workbook.getNumberOfSheets()); XSSFSheet sheet = workbook.getSheetAt(0); @@ -56,13 +50,7 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { } public void testLoadSave() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "WithMoreVariousData.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx"); CreationHelper createHelper = workbook.getCreationHelper(); assertEquals(3, workbook.getNumberOfSheets()); XSSFSheet sheet = workbook.getSheetAt(0); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index bebfe30826..fa3d42d387 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -17,8 +17,6 @@ package org.apache.poi.xssf.usermodel; -import java.io.File; - import org.apache.poi.ss.usermodel.BaseTestSheet; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Workbook; @@ -54,13 +52,7 @@ public class TestXSSFSheet extends BaseTestSheet { } public void testExistingHeaderFooter() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "45540_classic_Header.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("45540_classic_Header.xlsx"); XSSFOddHeader hdr; XSSFOddFooter ftr; diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java b/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java index e31e42f753..f55e7f5081 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java @@ -29,27 +29,10 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFRelation; public final class TestXWPFDocument extends TestCase { - private File sampleFile; - private File complexFile; - - protected void setUp() throws Exception { - super.setUp(); - - sampleFile = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "sample.docx" - ); - complexFile = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "IllustrativeCases.docx" - ); - - assertTrue(sampleFile.exists()); - assertTrue(complexFile.exists()); - } public void testContainsMainContentType() throws Exception { - OPCPackage pack = POIXMLDocument.openPackage(sampleFile.toString()); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx"); + OPCPackage pack = doc.getPackage(); boolean found = false; for(PackagePart part : pack.getParts()) { @@ -62,40 +45,24 @@ public final class TestXWPFDocument extends TestCase { } public void testOpen() throws Exception { - POIXMLDocument.openPackage(sampleFile.toString()); - POIXMLDocument.openPackage(complexFile.toString()); - - new XWPFDocument( - POIXMLDocument.openPackage(sampleFile.toString()) - ); - new XWPFDocument( - POIXMLDocument.openPackage(complexFile.toString()) - ); - XWPFDocument xml; // Simple file - xml = new XWPFDocument( - POIXMLDocument.openPackage(sampleFile.toString()) - ); + xml = XWPFTestDataSamples.openSampleDocument("sample.docx"); // Check it has key parts assertNotNull(xml.getDocument()); assertNotNull(xml.getDocument().getBody()); assertNotNull(xml.getStyle()); // Complex file - xml = new XWPFDocument( - POIXMLDocument.openPackage(complexFile.toString()) - ); + xml = XWPFTestDataSamples.openSampleDocument("IllustrativeCases.docx"); assertNotNull(xml.getDocument()); assertNotNull(xml.getDocument().getBody()); assertNotNull(xml.getStyle()); } public void testMetadataBasics() throws Exception { - XWPFDocument xml = new XWPFDocument( - POIXMLDocument.openPackage(sampleFile.toString()) - ); + XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("sample.docx"); assertNotNull(xml.getProperties().getCoreProperties()); assertNotNull(xml.getProperties().getExtendedProperties()); @@ -108,9 +75,7 @@ public final class TestXWPFDocument extends TestCase { } public void testMetadataComplex() throws Exception { - XWPFDocument xml = new XWPFDocument( - POIXMLDocument.openPackage(complexFile.toString()) - ); + XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("IllustrativeCases.docx"); assertNotNull(xml.getProperties().getCoreProperties()); assertNotNull(xml.getProperties().getExtendedProperties()); diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/XWPFTestDataSamples.java b/src/ooxml/testcases/org/apache/poi/xwpf/XWPFTestDataSamples.java new file mode 100755 index 0000000000..3255d62f10 --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/xwpf/XWPFTestDataSamples.java @@ -0,0 +1,54 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi.xwpf; + +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; +import org.apache.poi.POIDataSamples; + +import java.io.*; + +/** + * @author Yegor Kozlov + */ +public class XWPFTestDataSamples { + + public static XWPFDocument openSampleDocument(String sampleName) { + InputStream is = HWPFTestDataSamples.openSampleFileStream(sampleName); + try { + return new XWPFDocument(is); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static XWPFDocument writeOutAndReadBack(XWPFDocument doc) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); + doc.write(baos); + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + return new XWPFDocument(bais); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static POIDataSamples getInstance(){ + return HWPFTestDataSamples.getInstance(); + } + +} diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java index fe80baff10..cffdaec9ab 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java @@ -21,6 +21,7 @@ import java.io.IOException; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.XWPFTestDataSamples; import junit.framework.TestCase; @@ -33,7 +34,7 @@ public class TestXWPFWordExtractor extends TestCase { * Get text out of the simple file */ public void testGetSimpleText() throws Exception { - XWPFDocument doc = open("sample.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); String text = extractor.getText(); @@ -62,7 +63,7 @@ public class TestXWPFWordExtractor extends TestCase { * Tests getting the text out of a complex file */ public void testGetComplexText() throws Exception { - XWPFDocument doc = open("IllustrativeCases.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("IllustrativeCases.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); String text = extractor.getText(); @@ -94,7 +95,7 @@ public class TestXWPFWordExtractor extends TestCase { } public void testGetWithHyperlinks() throws Exception { - XWPFDocument doc = open("TestDocument.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); // Now check contents @@ -119,7 +120,7 @@ public class TestXWPFWordExtractor extends TestCase { } public void testHeadersFooters() throws Exception { - XWPFDocument doc = open("ThreeColHeadFoot.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("ThreeColHeadFoot.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); assertEquals( @@ -138,7 +139,7 @@ public class TestXWPFWordExtractor extends TestCase { // Now another file, expect multiple headers // and multiple footers - doc = open("DiffFirstPageHeadFoot.docx"); + doc = XWPFTestDataSamples.openSampleDocument("DiffFirstPageHeadFoot.docx"); extractor = new XWPFWordExtractor(doc); extractor = new XWPFWordExtractor(doc); @@ -162,7 +163,7 @@ public class TestXWPFWordExtractor extends TestCase { } public void testFootnotes() throws Exception { - XWPFDocument doc = open("footnotes.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("footnotes.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); assertTrue(extractor.getText().contains("snoska")); @@ -170,14 +171,14 @@ public class TestXWPFWordExtractor extends TestCase { public void testTableFootnotes() throws Exception { - XWPFDocument doc = open("table_footnotes.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("table_footnotes.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); assertTrue(extractor.getText().contains("snoska")); } public void testFormFootnotes() throws Exception { - XWPFDocument doc = open("form_footnotes.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("form_footnotes.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); String text = extractor.getText(); @@ -186,33 +187,18 @@ public class TestXWPFWordExtractor extends TestCase { } public void testEndnotes() throws Exception { - XWPFDocument doc = open("endnotes.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("endnotes.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); assertTrue(extractor.getText().contains("XXX")); } public void testInsertedDeletedText() throws Exception { - XWPFDocument doc = open("delins.docx"); + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("delins.docx"); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); assertTrue(extractor.getText().contains("pendant worn")); assertTrue(extractor.getText().contains("extremely well")); } - //TODO use the same logic for opening test files as in HSSFTestDataSamples - private XWPFDocument open(String sampleFileName) throws IOException { - File file = new File( - System.getProperty("HWPF.testdata.path"), sampleFileName); - - try { - if(!sampleFileName.equals(file.getCanonicalFile().getName())){ - throw new RuntimeException("File name is case-sensitive: requested '" + sampleFileName - + "' but actual file is '" + file.getCanonicalFile().getName() + "'"); - } - } catch (IOException e){ - throw new RuntimeException(e); - } - return new XWPFDocument(POIXMLDocument.openPackage(file.getPath())); - } } diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java b/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java index ef5d5868a0..13c04b0193 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java @@ -20,6 +20,7 @@ import java.io.File; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.XWPFTestDataSamples; import junit.framework.TestCase; @@ -36,49 +37,13 @@ public class TestXWPFHeaderFooterPolicy extends TestCase { protected void setUp() throws Exception { super.setUp(); - File file; - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "NoHeadFoot.docx" - ); - assertTrue(file.exists()); - noHeader = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "ThreeColHead.docx" - ); - assertTrue(file.exists()); - header = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "SimpleHeadThreeColFoot.docx" - ); - assertTrue(file.exists()); - headerFooter = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "FancyFoot.docx" - ); - assertTrue(file.exists()); - footer = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "PageSpecificHeadFoot.docx" - ); - assertTrue(file.exists()); - oddEven = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - - file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "DiffFirstPageHeadFoot.docx" - ); - assertTrue(file.exists()); - diffFirst = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); + noHeader = XWPFTestDataSamples.openSampleDocument("NoHeadFoot.docx"); + header = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); + headerFooter = XWPFTestDataSamples.openSampleDocument("SimpleHeadThreeColFoot.docx"); + footer = XWPFTestDataSamples.openSampleDocument("FancyFoot.docx"); + oddEven = XWPFTestDataSamples.openSampleDocument("PageSpecificHeadFoot.docx"); + diffFirst = XWPFTestDataSamples.openSampleDocument("DiffFirstPageHeadFoot.docx"); } public void testPolicy() { diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java index 84a655ed65..a893ab1183 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java @@ -23,6 +23,7 @@ import junit.framework.TestCase; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; +import org.apache.poi.xwpf.XWPFTestDataSamples; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; @@ -31,16 +32,8 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; public class TestXWPFHeader extends TestCase { public void testSimpleHeader() throws IOException { - File sampleFile = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "headerFooter.docx" - ); - assertTrue(sampleFile.exists()); - XWPFDocument sampleDoc; - sampleDoc = new XWPFDocument( - POIXMLDocument.openPackage(sampleFile.toString()) - ); - + XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("headerFooter.docx"); + XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy(); @@ -55,15 +48,7 @@ public class TestXWPFHeader extends TestCase { } public void testSetHeader() throws IOException { - File sampleFile = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "SampleDoc.docx" - ); - assertTrue(sampleFile.exists()); - XWPFDocument sampleDoc; - sampleDoc = new XWPFDocument( - POIXMLDocument.openPackage(sampleFile.toString()) - ); + XWPFDocument sampleDoc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); // no header is set (yet) XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy(); assertNull(policy.getDefaultHeader()); diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java index f02135afac..12405fb4a7 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java @@ -22,6 +22,7 @@ import java.math.BigInteger; import junit.framework.TestCase; import org.apache.poi.POIXMLDocument; +import org.apache.poi.xwpf.XWPFTestDataSamples; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; @@ -41,26 +42,13 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment; * Tests for XWPF Paragraphs */ public final class TestXWPFParagraph extends TestCase { - /** - * A simple file - */ - private XWPFDocument xml; - - protected void setUp() throws Exception { - super.setUp(); - - File file = new File( - System.getProperty("HWPF.testdata.path") + - File.separator + "ThreeColHead.docx" - ); - assertTrue(file.exists()); - xml = new XWPFDocument(POIXMLDocument.openPackage(file.toString())); - } /** * Check that we get the right paragraph from the header */ public void disabled_testHeaderParagraph() { + XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); + XWPFHeader hdr = xml.getHeaderFooterPolicy().getDefaultHeader(); assertNotNull(hdr); @@ -77,6 +65,7 @@ public final class TestXWPFParagraph extends TestCase { * Check that we get the right paragraphs from the document */ public void disabled_testDocumentParagraph() { + XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); XWPFParagraph[] ps = xml.getParagraphs(); assertEquals(10, ps.length); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFDocFixture.java b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFDocFixture.java index c0dc9d41b5..2eb46a4291 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFDocFixture.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFDocFixture.java @@ -41,17 +41,8 @@ public final class HWPFDocFixture { try { - String filename = System.getProperty("HWPF.testdata.path"); - if (filename == null) - { - filename = "c:"; - } - - filename = filename + "/test.doc"; - - - POIFSFileSystem filesystem = new POIFSFileSystem(new FileInputStream( - new File(filename))); + POIFSFileSystem filesystem = new POIFSFileSystem( + HWPFTestDataSamples.openSampleFileStream("test.doc")); DocumentEntry documentProps = (DocumentEntry) filesystem.getRoot().getEntry("WordDocument"); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java new file mode 100755 index 0000000000..0b6f529e98 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java @@ -0,0 +1,65 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi.hwpf; + +import org.apache.poi.POIDataSamples; + +import java.io.*; + +public class HWPFTestDataSamples extends POIDataSamples { + + private static final HWPFTestDataSamples _inst = new HWPFTestDataSamples("HWPF.testdata.path", "SampleDoc.doc"); + + + private HWPFTestDataSamples(String dir, String classPathTestFile){ + super(dir, classPathTestFile); + } + + public static POIDataSamples getInstance(){ + return _inst; + } + + public static InputStream openSampleFileStream(String sampleFileName) { + return _inst.openResourceAsStream(sampleFileName); + } + public static byte[] getTestDataFileContent(String fileName) { + return _inst.readFile(fileName); + } + + public static HWPFDocument openSampleFile(String sampleFileName) { + try { + return new HWPFDocument(_inst.openResourceAsStream(sampleFileName)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + /** + * Writes a spreadsheet to a ByteArrayOutputStream and reads it back + * from a ByteArrayInputStream.

+ * Useful for verifying that the serialisation round trip + */ + public static HWPFDocument writeOutAndReadBack(HWPFDocument original) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); + original.write(baos); + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + return new HWPFDocument(bais); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFPictures.java b/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFPictures.java index 0819d58fa5..4cb88ae30b 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFPictures.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFPictures.java @@ -17,9 +17,6 @@ package org.apache.poi.hwpf; -import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; -import java.io.IOException; import java.util.List; import junit.framework.TestCase; @@ -43,33 +40,32 @@ public final class TestHWPFPictures extends TestCase { private String imgDFile; protected void setUp() { - String dirname = System.getProperty("HWPF.testdata.path"); - docAFile = dirname + "/testPictures.doc"; - docBFile = dirname + "/two_images.doc"; - docCFile = dirname + "/vector_image.doc"; - docDFile = dirname + "/GaiaTest.doc"; + docAFile = "testPictures.doc"; + docBFile = "two_images.doc"; + docCFile = "vector_image.doc"; + docDFile = "GaiaTest.doc"; - imgAFile = dirname + "/simple_image.jpg"; - imgBFile = dirname + "/simple_image.png"; - imgCFile = dirname + "/vector_image.emf"; - imgDFile = dirname + "/GaiaTestImg.png"; + imgAFile = "simple_image.jpg"; + imgBFile = "simple_image.png"; + imgCFile = "vector_image.emf"; + imgDFile = "GaiaTestImg.png"; } /** * Test just opening the files */ public void testOpen() throws Exception { - HWPFDocument docA = new HWPFDocument(new FileInputStream(docAFile)); - HWPFDocument docB = new HWPFDocument(new FileInputStream(docBFile)); + HWPFDocument docA = HWPFTestDataSamples.openSampleFile(docAFile); + HWPFDocument docB = HWPFTestDataSamples.openSampleFile(docBFile); } /** * Test that we have the right numbers of images in each file */ public void testImageCount() throws Exception { - HWPFDocument docA = new HWPFDocument(new FileInputStream(docAFile)); - HWPFDocument docB = new HWPFDocument(new FileInputStream(docBFile)); + HWPFDocument docA = HWPFTestDataSamples.openSampleFile(docAFile); + HWPFDocument docB = HWPFTestDataSamples.openSampleFile(docBFile); assertNotNull(docA.getPicturesTable()); assertNotNull(docB.getPicturesTable()); @@ -88,7 +84,7 @@ public final class TestHWPFPictures extends TestCase { * Test that we have the right images in at least one file */ public void testImageData() throws Exception { - HWPFDocument docB = new HWPFDocument(new FileInputStream(docBFile)); + HWPFDocument docB = HWPFTestDataSamples.openSampleFile(docBFile); PicturesTable picB = docB.getPicturesTable(); List picturesB = picB.getAllPictures(); @@ -115,7 +111,7 @@ public final class TestHWPFPictures extends TestCase { * Test that compressed image data is correctly returned. */ public void testCompressedImageData() throws Exception { - HWPFDocument docC = new HWPFDocument(new FileInputStream(docCFile)); + HWPFDocument docC = HWPFTestDataSamples.openSampleFile(docCFile); PicturesTable picC = docC.getPicturesTable(); List picturesC = picC.getAllPictures(); @@ -136,7 +132,7 @@ public final class TestHWPFPictures extends TestCase { * bug #44937 */ public void BROKENtestEscherDrawing() throws Exception { - HWPFDocument docD = new HWPFDocument(new FileInputStream(docDFile)); + HWPFDocument docD = HWPFTestDataSamples.openSampleFile(docDFile); List allPictures = docD.getPicturesTable().getAllPictures(); assertEquals(1, allPictures.size()); @@ -158,23 +154,6 @@ public final class TestHWPFPictures extends TestCase { } private static byte[] readFile(String file) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - FileInputStream fis = new FileInputStream(file); - byte[] buffer = new byte[1024]; - - int read = 0; - while(read > -1) { - read = fis.read(buffer); - if(read > 0) { - baos.write(buffer,0,read); - } - } - fis.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - return baos.toByteArray(); + return HWPFTestDataSamples.getTestDataFileContent(file); } } diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFRangeParts.java b/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFRangeParts.java index bda9465301..6aee79605b 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFRangeParts.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/TestHWPFRangeParts.java @@ -17,8 +17,6 @@ package org.apache.poi.hwpf; -import java.io.FileInputStream; - import org.apache.poi.hwpf.usermodel.Range; import junit.framework.TestCase; @@ -96,17 +94,8 @@ public final class TestHWPFRangeParts extends TestCase { private HWPFDocument docUnicode; public void setUp() throws Exception { - String dirname = System.getProperty("HWPF.testdata.path"); - - String filename = dirname + "/HeaderFooterUnicode.doc"; - docUnicode = new HWPFDocument( - new FileInputStream(filename) - ); - - filename = dirname + "/ThreeColHeadFoot.doc"; - docAscii = new HWPFDocument( - new FileInputStream(filename) - ); + docUnicode = HWPFTestDataSamples.openSampleFile("HeaderFooterUnicode.doc"); + docAscii = HWPFTestDataSamples.openSampleFile("ThreeColHeadFoot.doc"); } public void testBasics() { diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java index 685ce949bb..559d95aacf 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java @@ -17,10 +17,10 @@ package org.apache.poi.hwpf.extractor; -import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.hwpf.model.TextPiece; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; @@ -53,10 +53,7 @@ public final class TestDifferentRoutes extends TestCase { private HWPFDocument doc; protected void setUp() throws Exception { - String dirname = System.getProperty("HWPF.testdata.path"); - - String filename = dirname + "/test2.doc"; - doc = new HWPFDocument(new FileInputStream(filename)); + doc = HWPFTestDataSamples.openSampleFile("test2.doc"); } /** diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java index a945540a0a..9d32badaf2 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java @@ -17,14 +17,15 @@ package org.apache.poi.hwpf.extractor; -import java.io.FileInputStream; - import junit.framework.TestCase; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import java.io.FileInputStream; + /** * Test the different routes to extracting text * @@ -47,7 +48,7 @@ public final class TestWordExtractor extends TestCase { "\r\n", "It is otherwise very very boring.\r\n" }; - private String p_text1_block = new String(); + private String p_text1_block = ""; // Well behaved document private WordExtractor extractor; @@ -64,18 +65,17 @@ public final class TestWordExtractor extends TestCase { private String filename6; protected void setUp() throws Exception { - String dirname = System.getProperty("HWPF.testdata.path"); String pdirname = System.getProperty("POIFS.testdata.path"); - String filename = dirname + "/test2.doc"; - String filename2 = dirname + "/test.doc"; + String filename = "test2.doc"; + String filename2 = "test.doc"; filename3 = pdirname + "/excel_with_embeded.xls"; - filename4 = dirname + "/ThreeColHeadFoot.doc"; - filename5 = dirname + "/HeaderFooterUnicode.doc"; - filename6 = dirname + "/footnote.doc"; + filename4 = "ThreeColHeadFoot.doc"; + filename5 = "HeaderFooterUnicode.doc"; + filename6 = "footnote.doc"; - extractor = new WordExtractor(new FileInputStream(filename)); - extractor2 = new WordExtractor(new FileInputStream(filename2)); + extractor = new WordExtractor(HWPFTestDataSamples.openSampleFileStream(filename)); + extractor2 = new WordExtractor(HWPFTestDataSamples.openSampleFileStream(filename2)); // Build splat'd out text version for(int i=0; i 128); // Check right contents - byte[] emf = loadImage("vector_image.emf"); + byte[] emf = HWPFTestDataSamples.getTestDataFileContent("vector_image.emf"); byte[] pemf = pic.getContent(); assertEquals(emf.length, pemf.length); for(int i=0; i -1 ) { - b.write(buf, 0, read); - } - return b.toByteArray(); - } } diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java index 54e9b42a0c..41dd238f55 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java @@ -17,12 +17,10 @@ package org.apache.poi.hwpf.usermodel; -import java.io.File; -import java.io.FileInputStream; - import org.apache.poi.EncryptedDocumentException; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.HWPFTestCase; +import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.hwpf.model.StyleSheet; /** @@ -32,14 +30,11 @@ import org.apache.poi.hwpf.model.StyleSheet; */ public final class TestProblems extends HWPFTestCase { - private String dirname = System.getProperty("HWPF.testdata.path"); - /** * ListEntry passed no ListTable */ public void testListEntryNoListTable() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream( - new File(dirname, "ListEntryNoListTable.doc"))); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ListEntryNoListTable.doc"); Range r = doc.getRange(); StyleSheet styleSheet = doc.getStyleSheet(); @@ -56,8 +51,7 @@ public final class TestProblems extends HWPFTestCase { * AIOOB for TableSprmUncompressor.unCompressTAPOperation */ public void testSprmAIOOB() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream( - new File(dirname, "AIOOB-Tap.doc"))); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("AIOOB-Tap.doc"); Range r = doc.getRange(); StyleSheet styleSheet = doc.getStyleSheet(); @@ -75,8 +69,7 @@ public final class TestProblems extends HWPFTestCase { * Bugs #45062 and #44292 */ public void testTableCellLastParagraph() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream( - new File(dirname, "Bug44292.doc"))); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug44292.doc"); Range r = doc.getRange(); assertEquals(6, r.numParagraphs()); assertEquals(0, r.getStartOffset()); @@ -115,8 +108,7 @@ public final class TestProblems extends HWPFTestCase { } public void testRangeDelete() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream( - new File(dirname, "Bug28627.doc"))); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug28627.doc"); Range range = doc.getRange(); int numParagraphs = range.numParagraphs(); @@ -155,8 +147,7 @@ public final class TestProblems extends HWPFTestCase { */ public void testEncryptedFile() throws Exception { try { - new HWPFDocument(new FileInputStream( - new File(dirname, "PasswordProtected.doc"))); + HWPFTestDataSamples.openSampleFile("PasswordProtected.doc"); fail(); } catch(EncryptedDocumentException e) { // Good @@ -164,8 +155,7 @@ public final class TestProblems extends HWPFTestCase { } public void testWriteProperties() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream( - new File(dirname, "SampleDoc.doc"))); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc"); assertEquals("Nick Burch", doc.getSummaryInformation().getAuthor()); // Write and read diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeDelete.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeDelete.java index 5e08588a29..289f2b80fa 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeDelete.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeDelete.java @@ -17,11 +17,10 @@ package org.apache.poi.hwpf.usermodel; -import java.io.FileInputStream; - import junit.framework.TestCase; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.hwpf.model.PAPX; /** @@ -48,10 +47,7 @@ public final class TestRangeDelete extends TestCase { private String illustrativeDocFile; protected void setUp() { - - String dirname = System.getProperty("HWPF.testdata.path"); - - illustrativeDocFile = dirname + "/testRangeDelete.doc"; + illustrativeDocFile = "testRangeDelete.doc"; } /** @@ -59,7 +55,7 @@ public final class TestRangeDelete extends TestCase { */ public void testOpen() throws Exception { - HWPFDocument docA = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument docA = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); } /** @@ -67,7 +63,7 @@ public final class TestRangeDelete extends TestCase { */ public void testDocStructure() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range; Section section; Paragraph para; @@ -132,7 +128,7 @@ public final class TestRangeDelete extends TestCase { */ public void testRangeDeleteOne() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getOverallRange(); assertEquals(1, range.numSections()); @@ -178,7 +174,7 @@ public final class TestRangeDelete extends TestCase { */ public void testRangeDeleteAll() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getRange(); assertEquals(1, range.numSections()); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeInsertion.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeInsertion.java index cdae245ece..5b024daeff 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeInsertion.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeInsertion.java @@ -17,11 +17,10 @@ package org.apache.poi.hwpf.usermodel; -import java.io.FileInputStream; - import junit.framework.TestCase; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; /** * Test to see if Range.insertBefore() works even if the Range contains a @@ -40,10 +39,7 @@ public final class TestRangeInsertion extends TestCase { private String illustrativeDocFile; protected void setUp() { - - String dirname = System.getProperty("HWPF.testdata.path"); - - illustrativeDocFile = dirname + "/testRangeInsertion.doc"; + illustrativeDocFile = "testRangeInsertion.doc"; } /** @@ -51,7 +47,7 @@ public final class TestRangeInsertion extends TestCase { */ public void testOpen() throws Exception { - HWPFDocument docA = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument docA = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); } /** @@ -59,7 +55,7 @@ public final class TestRangeInsertion extends TestCase { */ public void testDocStructure() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getRange(); @@ -87,7 +83,7 @@ public final class TestRangeInsertion extends TestCase { */ public void testRangeInsertion() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); /* Range range = daDoc.getRange(); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeProperties.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeProperties.java index 96f1493bdf..315c033d06 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeProperties.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeProperties.java @@ -17,11 +17,10 @@ package org.apache.poi.hwpf.usermodel; -import java.io.File; -import java.io.FileInputStream; import java.util.List; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.hwpf.model.PropertyNode; import junit.framework.TestCase; @@ -66,16 +65,9 @@ public final class TestRangeProperties extends TestCase { private HWPFDocument u; private HWPFDocument a; - private String dirname; - protected void setUp() throws Exception { - dirname = System.getProperty("HWPF.testdata.path"); - u = new HWPFDocument( - new FileInputStream(new File(dirname, "HeaderFooterUnicode.doc")) - ); - a = new HWPFDocument( - new FileInputStream(new File(dirname, "SampleDoc.doc")) - ); + u = HWPFTestDataSamples.openSampleFile("HeaderFooterUnicode.doc"); + a = HWPFTestDataSamples.openSampleFile("SampleDoc.doc"); } diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeReplacement.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeReplacement.java index dc32b24a3d..23ca51cda5 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeReplacement.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestRangeReplacement.java @@ -17,11 +17,10 @@ package org.apache.poi.hwpf.usermodel; -import java.io.FileInputStream; - import junit.framework.TestCase; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; /** * Test to see if Range.replaceText() works even if the Range contains a @@ -40,21 +39,14 @@ public final class TestRangeReplacement extends TestCase { "It is used to confirm that text replacement works even if Unicode characters (such as \u201c\u2014\u201d (U+2014), \u201c\u2e8e\u201d (U+2E8E), or \u201c\u2714\u201d (U+2714)) are present. Everybody should be thankful to the Apache Software Foundation and all the POI contributors for their assistance in this matter.\r"; private String expectedText3 = "Thank you, Apache Software Foundation!\r"; - private String illustrativeDocFile; - - protected void setUp() { - - String dirname = System.getProperty("HWPF.testdata.path"); - - illustrativeDocFile = dirname + "/testRangeReplacement.doc"; - } + private String illustrativeDocFile = "testRangeReplacement.doc"; /** * Test just opening the files */ public void testOpen() throws Exception { - HWPFDocument docA = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument docA = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); } /** @@ -62,7 +54,7 @@ public final class TestRangeReplacement extends TestCase { */ public void testDocStructure() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getRange(); assertEquals(414, range.text().length()); @@ -91,7 +83,7 @@ public final class TestRangeReplacement extends TestCase { */ public void testRangeReplacementOne() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getRange(); assertEquals(1, range.numSections()); @@ -124,7 +116,7 @@ public final class TestRangeReplacement extends TestCase { */ public void testRangeReplacementAll() throws Exception { - HWPFDocument daDoc = new HWPFDocument(new FileInputStream(illustrativeDocFile)); + HWPFDocument daDoc = HWPFTestDataSamples.openSampleFile(illustrativeDocFile); Range range = daDoc.getRange(); assertEquals(1, range.numSections()); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestShapes.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestShapes.java index b237da0ca3..2a0e61554c 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestShapes.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestShapes.java @@ -19,24 +19,23 @@ package org.apache.poi.hwpf.usermodel; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; import java.util.List; import junit.framework.TestCase; import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.HWPFTestDataSamples; /** * Test the shapes handling */ public final class TestShapes extends TestCase { - private String dirname = System.getProperty("HWPF.testdata.path"); /** * two shapes, second is a group */ public void testShapes() throws Exception { - HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/WithArtShapes.doc")); + HWPFDocument doc = HWPFTestDataSamples.openSampleFile("WithArtShapes.doc"); List shapes = doc.getShapesTable().getAllShapes(); List vshapes = doc.getShapesTable().getVisibleShapes(); diff --git a/src/testcases/org/apache/poi/POIDataSamples.java b/src/testcases/org/apache/poi/POIDataSamples.java new file mode 100755 index 0000000000..b5f64dd998 --- /dev/null +++ b/src/testcases/org/apache/poi/POIDataSamples.java @@ -0,0 +1,182 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi; + +import java.io.*; + +/** + * Centralises logic for finding/opening sample files + * + */ +public abstract class POIDataSamples { + + private File _resolvedDataDir; + /** true if standard system propery is not set, + * but the data is available on the test runtime classpath */ + private boolean _sampleDataIsAvaliableOnClassPath; + private String _testDataDir; + + /** + * + * @param dir the name of the system property that defines path to the test files + * @param classPathTestFile the name of the test file to check if resources are available from the classpath + */ + public POIDataSamples(String dir, String classPathTestFile){ + _testDataDir = dir; + initialise(classPathTestFile); + } + + /** + * Opens a sample file from the test data directory + * + * @param sampleFileName the file to open + * @return an open InputStream for the specified sample file + */ + public InputStream openResourceAsStream(String sampleFileName) { + + if (_sampleDataIsAvaliableOnClassPath) { + InputStream result = sampleFileName == null ? null : + openClasspathResource(sampleFileName); + if(result == null) { + throw new RuntimeException("specified test sample file '" + sampleFileName + + "' not found on the classpath"); + } + // wrap to avoid temp warning method about auto-closing input stream + return new NonSeekableInputStream(result); + } + if (_resolvedDataDir == null) { + throw new RuntimeException("Must set system property '" + + _testDataDir + + "' properly before running tests"); + } + + File f = new File(_resolvedDataDir, sampleFileName); + if (!f.exists()) { + throw new RuntimeException("Sample file '" + sampleFileName + + "' not found in data dir '" + _resolvedDataDir.getAbsolutePath() + "'"); + } + try { + if(!sampleFileName.equals(f.getCanonicalFile().getName())){ + throw new RuntimeException("File name is case-sensitive: requested '" + sampleFileName + + "' but actual file is '" + f.getCanonicalFile().getName() + "'"); + } + } catch (IOException e){ + throw new RuntimeException(e); + } + + try { + return new FileInputStream(f); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + } + + /** + * + * @param classPathTest test file to check if the resources are avaiable from the classpath + */ + private void initialise(String classPathTest) { + String dataDirName = System.getProperty(_testDataDir); + if (dataDirName == null) { + // check to see if we can just get the resources from the classpath + InputStream is = openClasspathResource(classPathTest); + if (is != null) { + try { + is.close(); // be nice + } catch (IOException e) { + throw new RuntimeException(e); + } + _sampleDataIsAvaliableOnClassPath = true; + return; + } + + throw new RuntimeException("Must set system property '" + + _testDataDir + "' before running tests"); + } + File dataDir = new File(dataDirName); + if (!dataDir.exists()) { + throw new RuntimeException("Data dir '" + dataDirName + + "' specified by system property '" + _testDataDir + + "' does not exist"); + } + // convert to canonical file, to make any subsequent error messages + // clearer. + try { + _resolvedDataDir = dataDir.getCanonicalFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Opens a test sample file from the 'data' sub-package of this class's package. + * + * @param sampleFileName the file to open + * @return null if the sample file is not deployed on the classpath. + */ + private InputStream openClasspathResource(String sampleFileName) { + return getClass().getResourceAsStream("data/" + sampleFileName); + } + + private static final class NonSeekableInputStream extends InputStream { + + private final InputStream _is; + + public NonSeekableInputStream(InputStream is) { + _is = is; + } + + public int read() throws IOException { + return _is.read(); + } + public int read(byte[] b, int off, int len) throws IOException { + return _is.read(b, off, len); + } + public boolean markSupported() { + return false; + } + public void close() throws IOException { + _is.close(); + } + } + + /** + * @param fileName the file to open + * @return byte array of sample file content from file found in standard hssf test data dir + */ + public byte[] readFile(String fileName) { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + try { + InputStream fis = openResourceAsStream(fileName); + + byte[] buf = new byte[512]; + while (true) { + int bytesRead = fis.read(buf); + if (bytesRead < 1) { + break; + } + bos.write(buf, 0, bytesRead); + } + fis.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return bos.toByteArray(); + } + +} diff --git a/src/testcases/org/apache/poi/hssf/HSSFTestDataSamples.java b/src/testcases/org/apache/poi/hssf/HSSFTestDataSamples.java index 113329265f..4d0f3a72c5 100644 --- a/src/testcases/org/apache/poi/hssf/HSSFTestDataSamples.java +++ b/src/testcases/org/apache/poi/hssf/HSSFTestDataSamples.java @@ -26,139 +26,35 @@ import java.io.IOException; import java.io.InputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.POIDataSamples; /** * Centralises logic for finding/opening sample files in the src/testcases/org/apache/poi/hssf/hssf/data folder. * * @author Josh Micich */ -public final class HSSFTestDataSamples { +public final class HSSFTestDataSamples extends POIDataSamples { - private static final String TEST_DATA_DIR_SYS_PROPERTY_NAME = "HSSF.testdata.path"; + private static final HSSFTestDataSamples _inst = new HSSFTestDataSamples("HSSF.testdata.path", "SampleSS.xls"); - private static boolean _isInitialised; - private static File _resolvedDataDir; - /** true if standard system propery is not set, - * but the data is available on the test runtime classpath */ - private static boolean _sampleDataIsAvaliableOnClassPath; + private HSSFTestDataSamples(String dir, String classPathTestFile){ + super(dir, classPathTestFile); + } - /** - * Opens a sample file from the standard HSSF test data directory - * - * @return an open InputStream for the specified sample file - */ - public static InputStream openSampleFileStream(String sampleFileName) { - - if(!_isInitialised) { - try { - initialise(); - } finally { - _isInitialised = true; - } - } - if (_sampleDataIsAvaliableOnClassPath) { - InputStream result = openClasspathResource(sampleFileName); - if(result == null) { - throw new RuntimeException("specified test sample file '" + sampleFileName - + "' not found on the classpath"); - } -// System.out.println("opening cp: " + sampleFileName); - // wrap to avoid temp warning method about auto-closing input stream - return new NonSeekableInputStream(result); - } - if (_resolvedDataDir == null) { - throw new RuntimeException("Must set system property '" - + TEST_DATA_DIR_SYS_PROPERTY_NAME - + "' properly before running tests"); - } - - File f = new File(_resolvedDataDir, sampleFileName); - if (!f.exists()) { - throw new RuntimeException("Sample file '" + sampleFileName - + "' not found in data dir '" + _resolvedDataDir.getAbsolutePath() + "'"); - } - try { - if(!sampleFileName.equals(f.getCanonicalFile().getName())){ - throw new RuntimeException("File name is case-sensitive: requested '" + sampleFileName - + "' but actual file is '" + f.getCanonicalFile().getName() + "'"); - } - } catch (IOException e){ - throw new RuntimeException(e); - } - - try { - return new FileInputStream(f); - } catch (FileNotFoundException e) { - throw new RuntimeException(e); - } - } - - private static void initialise() { - String dataDirName = System.getProperty(TEST_DATA_DIR_SYS_PROPERTY_NAME); - if (dataDirName == null) { - // check to see if we can just get the resources from the classpath - InputStream is = openClasspathResource("SampleSS.xls"); - if (is != null) { - try { - is.close(); // be nice - } catch (IOException e) { - throw new RuntimeException(e); - } - _sampleDataIsAvaliableOnClassPath = true; - return; - } - - throw new RuntimeException("Must set system property '" - + TEST_DATA_DIR_SYS_PROPERTY_NAME + "' before running tests"); - } - File dataDir = new File(dataDirName); - if (!dataDir.exists()) { - throw new RuntimeException("Data dir '" + dataDirName - + "' specified by system property '" + TEST_DATA_DIR_SYS_PROPERTY_NAME - + "' does not exist"); - } - // convert to canonical file, to make any subsequent error messages - // clearer. - try { - _resolvedDataDir = dataDir.getCanonicalFile(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - /** - * Opens a test sample file from the 'data' sub-package of this class's package. - * @return null if the sample file is not deployed on the classpath. - */ - private static InputStream openClasspathResource(String sampleFileName) { - return HSSFTestDataSamples.class.getResourceAsStream("data/" + sampleFileName); - } + public static POIDataSamples getInstance(){ + return _inst; + } - private static final class NonSeekableInputStream extends InputStream { - - private final InputStream _is; - - public NonSeekableInputStream(InputStream is) { - _is = is; - } + public static InputStream openSampleFileStream(String sampleFileName) { + return _inst.openResourceAsStream(sampleFileName); + } + public static byte[] getTestDataFileContent(String fileName) { + return _inst.readFile(fileName); + } - public int read() throws IOException { - return _is.read(); - } - public int read(byte[] b, int off, int len) throws IOException { - return _is.read(b, off, len); - } - public boolean markSupported() { - return false; - } - public void close() throws IOException { - _is.close(); - } - } - - public static HSSFWorkbook openSampleWorkbook(String sampleFileName) { + public static HSSFWorkbook openSampleWorkbook(String sampleFileName) { try { - return new HSSFWorkbook(openSampleFileStream(sampleFileName)); + return new HSSFWorkbook(_inst.openResourceAsStream(sampleFileName)); } catch (IOException e) { throw new RuntimeException(e); } @@ -180,27 +76,4 @@ public final class HSSFTestDataSamples { } } - /** - * @return byte array of sample file content from file found in standard hssf test data dir - */ - public static byte[] getTestDataFileContent(String fileName) { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - try { - InputStream fis = HSSFTestDataSamples.openSampleFileStream(fileName); - - byte[] buf = new byte[512]; - while (true) { - int bytesRead = fis.read(buf); - if (bytesRead < 1) { - break; - } - bos.write(buf, 0, bytesRead); - } - fis.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - return bos.toByteArray(); - } } -- 2.39.5