aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2015-09-13 19:05:40 +0000
committerDominik Stadler <centic@apache.org>2015-09-13 19:05:40 +0000
commitd390a9bf3f83f15bc5c23a678a0be0558c4a38af (patch)
tree14cc55c4dd1e414e55d78c3551dee4af2711f0f0
parentcda2a2b63d12ff3b399f2122ac4d94483d6a8964 (diff)
downloadpoi-d390a9bf3f83f15bc5c23a678a0be0558c4a38af.tar.gz
poi-d390a9bf3f83f15bc5c23a678a0be0558c4a38af.zip
Enhance integration testing to apply OPCPackage tests to more file-types and also run XSSFReader in XSSFFileHandler
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1702801 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/integrationtest/org/apache/poi/TestAllFiles.java17
-rw-r--r--src/integrationtest/org/apache/poi/stress/OPCFileHandler.java15
-rw-r--r--src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java98
3 files changed, 98 insertions, 32 deletions
diff --git a/src/integrationtest/org/apache/poi/TestAllFiles.java b/src/integrationtest/org/apache/poi/TestAllFiles.java
index e69224a7c9..b7427d4d59 100644
--- a/src/integrationtest/org/apache/poi/TestAllFiles.java
+++ b/src/integrationtest/org/apache/poi/TestAllFiles.java
@@ -271,7 +271,16 @@ public class TestAllFiles {
for(String file : scanner.getIncludedFiles()) {
file = file.replace('\\', '/'); // ... failures/handlers lookup doesn't work on windows otherwise
if (IGNORED.contains(file)) continue;
- files.add(new Object[] { file, HANDLERS.get(getExtension(file)) });
+ FileHandler handler = HANDLERS.get(getExtension(file));
+ files.add(new Object[] { file, handler });
+
+ // for some file-types also run OPCFileHandler
+ if(handler instanceof XSSFFileHandler ||
+ handler instanceof XWPFFileHandler ||
+ handler instanceof XSLFFileHandler ||
+ handler instanceof XDGFFileHandler) {
+ files.add(new Object[] { file, HANDLERS.get(".ooxml") });
+ }
}
return files;
@@ -301,8 +310,12 @@ public class TestAllFiles {
handler.handleExtracting(inputFile);
+ // special cases where docx-handling breaks, but OPCPackage handling works
+ boolean ignoredOPC = (file.endsWith(".docx") || file.endsWith(".xlsx") || file.endsWith(".xlsb")) &&
+ handler instanceof OPCFileHandler;
+
assertFalse("Expected to fail for file " + file + " and handler " + handler + ", but did not fail!",
- EXPECTED_FAILURES.contains(file));
+ EXPECTED_FAILURES.contains(file) && !ignoredOPC);
} catch (OldWordFileFormatException e) {
// for old word files we should still support extracting text
if(OLD_FILES.contains(file)) {
diff --git a/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java b/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java
index 41245402ca..50a9577c04 100644
--- a/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java
+++ b/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java
@@ -17,6 +17,7 @@
package org.apache.poi.stress;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
@@ -36,19 +37,23 @@ public class OPCFileHandler extends AbstractFileHandler {
if (POIXMLDocumentHandler.isEncrypted(stream)) return;
OPCPackage p = OPCPackage.open(stream);
-
+
for (PackagePart part : p.getParts()) {
if (part.getPartName().toString().equals("/docProps/core.xml")) {
assertEquals(ContentTypes.CORE_PROPERTIES_PART, part.getContentType());
}
if (part.getPartName().toString().equals("/word/document.xml")) {
- assertEquals(XWPFRelation.DOCUMENT.getContentType(), part.getContentType());
+ assertTrue("Expected one of " + XWPFRelation.MACRO_DOCUMENT + ", " + XWPFRelation.DOCUMENT + ", " + XWPFRelation.TEMPLATE +
+ ", but had " + part.getContentType(),
+ XWPFRelation.DOCUMENT.getContentType().equals(part.getContentType()) ||
+ XWPFRelation.MACRO_DOCUMENT.getContentType().equals(part.getContentType()) ||
+ XWPFRelation.TEMPLATE.getContentType().equals(part.getContentType()));
}
if (part.getPartName().toString().equals("/word/theme/theme1.xml")) {
assertEquals(XWPFRelation.THEME.getContentType(), part.getContentType());
}
}
- }
+ }
public void handleExtracting(File file) throws Exception {
// text-extraction is not possible currenlty for these types of files
@@ -57,7 +62,7 @@ public class OPCFileHandler extends AbstractFileHandler {
// a test-case to test this locally without executing the full TestAllFiles
@Test
public void test() throws Exception {
- File file = new File("test-data/openxml4j/dcterms_bug_56479.zip");
+ File file = new File("test-data/diagram/test.vsdx");
InputStream stream = new PushbackInputStream(new FileInputStream(file), 100000);
try {
@@ -68,4 +73,4 @@ public class OPCFileHandler extends AbstractFileHandler {
handleExtracting(file);
}
-} \ No newline at end of file
+}
diff --git a/src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java b/src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java
index a268ed4658..764ca4ac75 100644
--- a/src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java
+++ b/src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java
@@ -16,14 +16,25 @@
==================================================================== */
package org.apache.poi.stress;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.util.Iterator;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.extractor.XSSFExportToXml;
import org.apache.poi.xssf.usermodel.XSSFMap;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -31,27 +42,64 @@ import org.junit.Test;
import org.xml.sax.SAXException;
public class XSSFFileHandler extends SpreadsheetHandler {
- @Override
+ @Override
public void handleFile(InputStream stream) throws Exception {
- // ignore password protected files
- if (POIXMLDocumentHandler.isEncrypted(stream)) return;
-
- XSSFWorkbook wb = new XSSFWorkbook(stream);
-
- // use the combined handler for HSSF/XSSF
- handleWorkbook(wb, ".xlsx");
-
+ // ignore password protected files
+ if (POIXMLDocumentHandler.isEncrypted(stream)) return;
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ IOUtils.copy(stream, out);
+
+ XSSFWorkbook wb = new XSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+
+ // use the combined handler for HSSF/XSSF
+ handleWorkbook(wb, ".xlsx");
+
// TODO: some documents fail currently...
//XSSFFormulaEvaluator evaluator = new XSSFFormulaEvaluator(wb);
//evaluator.evaluateAll();
- // also verify general POIFS-stuff
- new POIXMLDocumentHandler().handlePOIXMLDocument(wb);
-
- // and finally ensure that exporting to XML works
- exportToXML(wb);
- }
+ // also verify general POIFS-stuff
+ new POIXMLDocumentHandler().handlePOIXMLDocument(wb);
+
+ // and finally ensure that exporting to XML works
+ exportToXML(wb);
+
+ checkXSSFReader(OPCPackage.open(new ByteArrayInputStream(out.toByteArray())));
+ }
+
+ private void checkXSSFReader(OPCPackage p)
+ throws IOException, OpenXML4JException, InvalidFormatException {
+ XSSFReader reader = new XSSFReader(p);
+
+ // these can be null...
+ InputStream sharedStringsData = reader.getSharedStringsData();
+ if(sharedStringsData != null) {
+ sharedStringsData.close();
+ }
+ reader.getSharedStringsTable();
+
+ InputStream stylesData = reader.getStylesData();
+ if(stylesData != null) {
+ stylesData.close();
+ }
+ reader.getStylesTable();
+
+ InputStream themesData = reader.getThemesData();
+ if(themesData != null) {
+ themesData.close();
+ }
+
+ assertNotNull(reader.getWorkbookData());
+
+ Iterator<InputStream> sheetsData = reader.getSheetsData();
+ while(sheetsData.hasNext()) {
+ InputStream str = sheetsData.next();
+ str.close();
+ }
+ }
+
private void exportToXML(XSSFWorkbook wb) throws SAXException,
ParserConfigurationException, TransformerException {
for (XSSFMap map : wb.getCustomXMLMappings()) {
@@ -62,16 +110,16 @@ public class XSSFFileHandler extends SpreadsheetHandler {
}
}
- // a test-case to test this locally without executing the full TestAllFiles
- @Test
- public void test() throws Exception {
- InputStream stream = new FileInputStream("test-data/spreadsheet/WithConditionalFormatting.xlsx");
- try {
- handleFile(stream);
- } finally {
- stream.close();
- }
- }
+ // a test-case to test this locally without executing the full TestAllFiles
+ @Test
+ public void test() throws Exception {
+ InputStream stream = new BufferedInputStream(new FileInputStream("test-data/openxml4j/50154.xlsx"));
+ try {
+ handleFile(stream);
+ } finally {
+ stream.close();
+ }
+ }
// a test-case to test this locally without executing the full TestAllFiles
@Test