mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
cda2a2b63d
commit
d390a9bf3f
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue