You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2021/01/15 23:50:42 UTC
svn commit: r1885538 - in /poi/trunk: ./
src/examples/src/org/apache/poi/examples/hpsf/
src/integrationtest/org/apache/poi/stress/ src/java/org/apache/poi/util/
src/multimodule/integration/java9/ test-data/spreadsheet/
Author: kiwiwings
Date: Fri Jan 15 23:50:42 2021
New Revision: 1885538
URL: http://svn.apache.org/viewvc?rev=1885538&view=rev
Log:
#65046 - Simplify integration tests
Added:
poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java (with props)
poi/trunk/test-data/spreadsheet/stress.xls (with props)
Removed:
poi/trunk/src/integrationtest/org/apache/poi/stress/HSSFRecordsStresser.java
poi/trunk/src/integrationtest/org/apache/poi/stress/POIFileScanner.java
Modified:
poi/trunk/build.xml
poi/trunk/src/examples/src/org/apache/poi/examples/hpsf/CopyCompare.java
poi/trunk/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java
poi/trunk/src/integrationtest/org/apache/poi/stress/BaseIntegrationTest.java
poi/trunk/src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java
poi/trunk/src/integrationtest/org/apache/poi/stress/TestAllFiles.java
poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java
poi/trunk/src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java
poi/trunk/src/java/org/apache/poi/util/Configurator.java
poi/trunk/src/multimodule/integration/java9/module-info.java
Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Fri Jan 15 23:50:42 2021
@@ -1277,6 +1277,7 @@ under the License.
<!-- jvmarg value="-Duser.timezone=UTC"/ -->
<jvmarg value="${file.leak.detector}" />
+ <jvmarg value="-Djunit.jupiter.execution.parallel.enabled=true" />
<jvmarg value="-Xjit:verbose={compileStart|compileEnd},vlog=build/jit.log${no.jit.sherlock}" if:true="${isIBMVM}"/>
<modulepath refid="@{modulepath-ref}" unless:true="${isJava8}"/>
@@ -1285,6 +1286,10 @@ under the License.
<jvmarg line="--add-modules org.junit.jupiter.params" unless:true="${isJava8}"/>
<jvmarg line="--add-modules org.apache.poi.@{module1}" if:set="use_module1"/>
<jvmarg line="--add-modules org.apache.poi.@{module2}" if:set="use_module2"/>
+
+ <!-- mute some notorious talkative classes -->
+ <jvmarg line="-Dorg.slf4j.simpleLogger.log.org.apache.poi.hdgf.chunks.Chunk=off"/>
+ <jvmarg line="-Dorg.slf4j.simpleLogger.log.org.apache.poi=error"/>
</fork>
<!-- can't use resultfile="status-as-tests-run.txt" here ... it's truncated with every test -->
Modified: poi/trunk/src/examples/src/org/apache/poi/examples/hpsf/CopyCompare.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/examples/hpsf/CopyCompare.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/examples/src/org/apache/poi/examples/hpsf/CopyCompare.java (original)
+++ poi/trunk/src/examples/src/org/apache/poi/examples/hpsf/CopyCompare.java Fri Jan 15 23:50:42 2021
@@ -22,6 +22,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import org.apache.poi.hpsf.DocumentSummaryInformation;
@@ -63,6 +64,8 @@ import org.apache.poi.util.TempFile;
public final class CopyCompare {
private CopyCompare() {}
+ private static final ThreadLocal<PrintStream> out = ThreadLocal.withInitial(() -> System.out);
+
/**
* Runs the example program. The application expects one or two arguments:
*
@@ -117,10 +120,14 @@ public final class CopyCompare {
POIFSFileSystem cpfs = new POIFSFileSystem(new File(copyFileName))) {
final DirectoryEntry oRoot = opfs.getRoot();
final DirectoryEntry cRoot = cpfs.getRoot();
- System.out.println(EntryUtils.areDirectoriesIdentical(oRoot, cRoot) ? "Equal" : "Not equal");
+ out.get().println(EntryUtils.areDirectoriesIdentical(oRoot, cRoot) ? "Equal" : "Not equal");
}
}
+ public static void setOut(PrintStream ps) {
+ out.set(ps);
+ }
+
private interface InputStreamSupplier {
InputStream get() throws IOException, WritingNotSupportedException;
}
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java Fri Jan 15 23:50:42 2021
@@ -34,6 +34,7 @@ import org.apache.poi.extractor.POIOLE2T
import org.apache.poi.extractor.POITextExtractor;
import org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor;
import org.apache.poi.hssf.extractor.EventBasedExcelExtractor;
+import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.ss.extractor.ExcelExtractor;
import org.apache.poi.util.IOUtils;
@@ -118,10 +119,10 @@ public abstract class AbstractFileHandle
}
// test again with including formulas and cell-comments as this caused some bugs
- if(extractor instanceof ExcelExtractor &&
- // comment-extraction and formula extraction are not well supported in event based extraction
- !(extractor instanceof EventBasedExcelExtractor)) {
- ((ExcelExtractor)extractor).setFormulasNotResults(true);
+ if (extractor instanceof ExcelExtractor &&
+ // comment-extraction and formula extraction are not well supported in event based extraction
+ !(extractor instanceof EventBasedExcelExtractor)) {
+ ((ExcelExtractor) extractor).setFormulasNotResults(true);
String text = extractor.getText();
assertNotNull(text);
@@ -132,6 +133,17 @@ public abstract class AbstractFileHandle
text = extractor.getText();
assertNotNull(text);
}
+ } catch (IOException | POIXMLException e) {
+ Exception prevE = e;
+ Throwable cause;
+ while ((cause = prevE.getCause()) instanceof Exception) {
+ if (cause instanceof IOException || cause instanceof POIXMLException) {
+ prevE = (Exception)cause;
+ } else {
+ throw (Exception)cause;
+ }
+ }
+ throw e;
} catch (IllegalArgumentException e) {
if(!EXPECTED_EXTRACTOR_FAILURES.contains(fileAndParentName)) {
throw e;
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/BaseIntegrationTest.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/BaseIntegrationTest.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/BaseIntegrationTest.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/BaseIntegrationTest.java Fri Jan 15 23:50:42 2021
@@ -50,7 +50,7 @@ public class BaseIntegrationTest {
}
void test() throws Exception {
- assertNotNull( handler, "Unknown file extension for file: " + file + ": " + TestAllFiles.getExtension(file) );
+ assertNotNull( handler, "Unknown file extension for file: " + file );
testOneFile(new File(rootDir, file));
}
@@ -123,29 +123,29 @@ public class BaseIntegrationTest {
message.equals("The document is really a HTML file")), "File " + file + " excluded because it is actually a PDF/RTF/HTML file" );
if(message != null && (message.equals("The document is really a XLS file"))) {
- handler = TestAllFiles.HANDLERS.get(".xls");
+ handler = new HSSFFileHandler();
} else if(message != null && (message.equals("The document is really a PPT file"))) {
- handler = TestAllFiles.HANDLERS.get(".ppt");
+ handler = new HSLFFileHandler();
} else if(message != null && (message.equals("The document is really a DOC file"))) {
- handler = TestAllFiles.HANDLERS.get(".doc");
+ handler = new HWPFFileHandler();
} else if(message != null && (message.equals("The document is really a VSD file"))) {
- handler = TestAllFiles.HANDLERS.get(".vsd");
+ handler = new HDGFFileHandler();
// use XWPF instead of HWPF and XSSF instead of HSSF as the file seems to have the wrong extension
} else if (handler instanceof HWPFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".docx");
+ handler = new XWPFFileHandler();
} else if (handler instanceof HSSFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".xlsx");
+ handler = new XSSFFileHandler();
} else if (handler instanceof HSLFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".pptx");
+ handler = new XSLFFileHandler();
// and the other way around, use HWPF instead of XWPF and so forth
} else if(handler instanceof XWPFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".doc");
+ handler = new HWPFFileHandler();
} else if(handler instanceof XSSFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".xls");
+ handler = new HSSFFileHandler();
} else if(handler instanceof XSLFFileHandler) {
- handler = TestAllFiles.HANDLERS.get(".ppt");
+ handler = new HSLFFileHandler();
} else {
// nothing matched => throw the exception to the outside
throw e;
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java Fri Jan 15 23:50:42 2021
@@ -18,6 +18,7 @@ package org.apache.poi.stress;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
import java.io.ByteArrayOutputStream;
@@ -46,7 +47,7 @@ import org.junit.jupiter.api.Test;
class HPSFFileHandler extends POIFSFileHandler {
private static final String NL = System.getProperty("line.separator");
- private static File copyOutput;
+ private static final ThreadLocal<File> copyOutput = ThreadLocal.withInitial(HPSFFileHandler::getTempFile);
static final Set<String> EXCLUDES_HANDLE_ADD = unmodifiableHashSet(
"spreadsheet/45290.xls",
@@ -58,12 +59,6 @@ class HPSFFileHandler extends POIFSFileH
"document/word2.doc"
);
- static final Set<String> EXCLUDES_HANDLE_FILE = unmodifiableHashSet(
- "hpsf/Test_Humor-Generation.ppt",
- "slideshow/missing-moveto.ppt" // POIFS properties corrupted
- );
-
-
private static Set<String> unmodifiableHashSet(String... a) {
return Collections.unmodifiableSet(new HashSet<>(Arrays.asList(a)));
}
@@ -71,7 +66,6 @@ class HPSFFileHandler extends POIFSFileH
@Override
public void handleFile(InputStream stream, String path) throws Exception {
- assumeFalse(EXCLUDES_HANDLE_FILE.contains(path));
POIFSFileSystem poifs = new POIFSFileSystem(stream);
HPSFPropertiesOnlyDocument hpsf = new HPSFPropertiesOnlyDocument(poifs);
DocumentSummaryInformation dsi = hpsf.getDocumentSummaryInformation();
@@ -95,24 +89,26 @@ class HPSFFileHandler extends POIFSFileH
}
}
+ private static File getTempFile() {
+ File f = null;
+ try {
+ f = TempFile.createTempFile("hpsfCopy", "out");
+ } catch (IOException e) {
+ fail(e);
+ }
+ f.deleteOnExit();
+ return f;
+ }
+
@Override
public void handleAdditional(File file) throws Exception {
assumeFalse(EXCLUDES_HANDLE_ADD.contains(file.getParentFile().getName()+"/"+file.getName()));
- if (copyOutput == null) {
- copyOutput = TempFile.createTempFile("hpsfCopy", "out");
- copyOutput.deleteOnExit();
- }
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PrintStream psNew = new PrintStream(bos, true, "ISO-8859-1");
- PrintStream ps = System.out;
- try {
- System.setOut(psNew);
- CopyCompare.main(new String[]{file.getAbsolutePath(), copyOutput.getAbsolutePath()});
- assertEquals("Equal" + NL, bos.toString(StandardCharsets.UTF_8.name()));
- } finally {
- System.setOut(ps);
- }
+ CopyCompare.setOut(psNew);
+ CopyCompare.main(new String[]{file.getAbsolutePath(), copyOutput.get().getAbsolutePath()});
+ assertEquals("Equal" + NL, bos.toString(StandardCharsets.UTF_8.name()));
}
Added: poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java?rev=1885538&view=auto
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java (added)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java Fri Jan 15 23:50:42 2021
@@ -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.stress;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import org.apache.poi.hwpf.HWPFOldDocument;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.junit.jupiter.api.Test;
+
+public class OWPFFileHandler extends POIFSFileHandler {
+ @Override
+ public void handleFile(InputStream stream, String path) throws Exception {
+ try (POIFSFileSystem poifs = new POIFSFileSystem(stream)) {
+ HWPFOldDocument doc = new HWPFOldDocument(poifs);
+ assertNotNull(doc.getOldFontTable());
+ assertNotNull(doc.getCharacterTable());
+ }
+ }
+
+ // a test-case to test this locally without executing the full TestAllFiles
+ @Override
+ @Test
+ @SuppressWarnings("java:S2699")
+ public void test() throws Exception {
+ File file = new File("test-data/document/52117.doc");
+
+ try (InputStream stream = new FileInputStream(file)) {
+ handleFile(stream, file.getPath());
+ }
+
+ handleExtracting(file);
+
+ try (FileInputStream stream = new FileInputStream(file);
+ WordExtractor extractor = new WordExtractor(stream)) {
+ assertNotNull(extractor.getText());
+ }
+ }
+
+ @Test
+ public void testExtractingOld() {
+ File file = new File("test-data/document/52117.doc");
+ assertDoesNotThrow(() -> handleExtracting(file));
+ }
+}
Propchange: poi/trunk/src/integrationtest/org/apache/poi/stress/OWPFFileHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/TestAllFiles.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/TestAllFiles.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/TestAllFiles.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/TestAllFiles.java Fri Jan 15 23:50:42 2021
@@ -17,32 +17,48 @@
package org.apache.poi.stress;
-import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
-import java.util.Set;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
-import org.apache.poi.OldFileFormatException;
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
-import org.apache.poi.poifs.crypt.Decryptor;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.tools.ant.DirectoryScanner;
+import org.junit.jupiter.api.function.Executable;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import org.opentest4j.TestAbortedException;
+import org.opentest4j.AssertionFailedError;
/**
* This is an integration test which performs various actions on all stored test-files and tries
@@ -68,395 +84,256 @@ import org.opentest4j.TestAbortedExcepti
* here as well! This is to ensure that files that should not work really do not work, e.g.
* that we do not remove expected sanity checks.
*/
-class TestAllFiles {
+// also need to set JVM parameter: -Djunit.jupiter.execution.parallel.enabled=true
+@Execution(ExecutionMode.CONCURRENT)
+public class TestAllFiles {
private static final File ROOT_DIR = new File("test-data");
- private static final boolean IGNORE_SCRATCHPAD = Boolean.getBoolean("scratchpad.ignore");
- public static final String[] SCAN_EXCLUDES = new String[] { "**/.svn/**", "lost+found", "**/.git/**" };
- private static final Map<String,String> FILE_PASSWORD;
-
-
- // map file extensions to the actual mappers
- public static final Map<String, FileHandler> HANDLERS = new HashMap<>();
-
- static {
- // Excel
- HANDLERS.put(".xls", new HSSFFileHandler());
- HANDLERS.put(".xlsx", new XSSFFileHandler());
- HANDLERS.put(".xlsm", new XSSFFileHandler());
- HANDLERS.put(".xltx", new XSSFFileHandler());
- HANDLERS.put(".xlsb", new XSSFBFileHandler());
-
- // Word
- HANDLERS.put(".doc", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HWPFFileHandler());
- HANDLERS.put(".docx", new XWPFFileHandler());
- HANDLERS.put(".dotx", new XWPFFileHandler());
- HANDLERS.put(".docm", new XWPFFileHandler());
-
- // OpenXML4J files
- HANDLERS.put(".ooxml", new OPCFileHandler());
- HANDLERS.put(".zip", new OPCFileHandler());
-
- // Powerpoint
- HANDLERS.put(".ppt", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HSLFFileHandler());
- HANDLERS.put(".pot", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HSLFFileHandler());
- HANDLERS.put(".pptx", new XSLFFileHandler());
- HANDLERS.put(".pptm", new XSLFFileHandler());
- HANDLERS.put(".ppsm", new XSLFFileHandler());
- HANDLERS.put(".ppsx", new XSLFFileHandler());
- HANDLERS.put(".thmx", new XSLFFileHandler());
- HANDLERS.put(".potx", new XSLFFileHandler());
-
- // Outlook
- HANDLERS.put(".msg", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HSMFFileHandler());
-
- // Publisher
- HANDLERS.put(".pub", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HPBFFileHandler());
-
- // Visio - binary
- HANDLERS.put(".vsd", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HDGFFileHandler());
-
- // Visio - ooxml
- HANDLERS.put(".vsdm", new XDGFFileHandler());
- HANDLERS.put(".vsdx", new XDGFFileHandler());
- HANDLERS.put(".vssm", new XDGFFileHandler());
- HANDLERS.put(".vssx", new XDGFFileHandler());
- HANDLERS.put(".vstm", new XDGFFileHandler());
- HANDLERS.put(".vstx", new XDGFFileHandler());
-
- // Visio - not handled yet
- HANDLERS.put(".vst", NullFileHandler.instance);
- HANDLERS.put(".vss", NullFileHandler.instance);
-
- // POIFS
- HANDLERS.put(".ole2", new POIFSFileHandler());
-
- // Microsoft Admin Template?
- HANDLERS.put(".adm", new HPSFFileHandler());
-
- // Microsoft TNEF
- HANDLERS.put(".dat", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HMEFFileHandler());
-
- // TODO: are these readable by some of the formats?
- HANDLERS.put(".wri", NullFileHandler.instance);
- HANDLERS.put(".shw", NullFileHandler.instance);
- HANDLERS.put(".zvi", NullFileHandler.instance);
- HANDLERS.put(".mpp", NullFileHandler.instance);
- HANDLERS.put(".qwp", NullFileHandler.instance);
- HANDLERS.put(".wps", NullFileHandler.instance);
- HANDLERS.put(".bin", NullFileHandler.instance);
- HANDLERS.put(".xps", NullFileHandler.instance);
- HANDLERS.put(".sldprt", NullFileHandler.instance);
- HANDLERS.put(".mdb", NullFileHandler.instance);
- HANDLERS.put(".vml", NullFileHandler.instance);
-
- // ignore some file types, images, other formats, ...
- HANDLERS.put(".txt", NullFileHandler.instance);
- HANDLERS.put(".pdf", NullFileHandler.instance);
- HANDLERS.put(".rtf", NullFileHandler.instance);
- HANDLERS.put(".gif", NullFileHandler.instance);
- HANDLERS.put(".html", NullFileHandler.instance);
- HANDLERS.put(".png", NullFileHandler.instance);
- HANDLERS.put(".wmf", NullFileHandler.instance);
- HANDLERS.put(".emf", NullFileHandler.instance);
- HANDLERS.put(".dib", NullFileHandler.instance);
- HANDLERS.put(".svg", NullFileHandler.instance);
- HANDLERS.put(".pict", NullFileHandler.instance);
- HANDLERS.put(".jpg", NullFileHandler.instance);
- HANDLERS.put(".jpeg", NullFileHandler.instance);
- HANDLERS.put(".tif", NullFileHandler.instance);
- HANDLERS.put(".tiff", NullFileHandler.instance);
- HANDLERS.put(".wav", NullFileHandler.instance);
- HANDLERS.put(".xml", NullFileHandler.instance);
- HANDLERS.put(".csv", NullFileHandler.instance);
- HANDLERS.put(".ods", NullFileHandler.instance);
- HANDLERS.put(".ttf", NullFileHandler.instance);
- HANDLERS.put(".fntdata", NullFileHandler.instance);
- // VBA source files
- HANDLERS.put(".vba", NullFileHandler.instance);
- HANDLERS.put(".bas", NullFileHandler.instance);
- HANDLERS.put(".frm", NullFileHandler.instance);
- HANDLERS.put(".frx", NullFileHandler.instance); //binary
- HANDLERS.put(".cls", NullFileHandler.instance);
-
- // map some files without extension
- HANDLERS.put("spreadsheet/BigSSTRecord", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR1", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR2", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR3", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR4", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR5", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR6", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecord2CR7", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/BigSSTRecordCR", NullFileHandler.instance);
- HANDLERS.put("spreadsheet/test_properties1", NullFileHandler.instance);
-
- // keystore files
- HANDLERS.put(".pfx", NullFileHandler.instance);
- HANDLERS.put(".pem", NullFileHandler.instance);
- HANDLERS.put(".jks", NullFileHandler.instance);
- HANDLERS.put(".pkcs12", NullFileHandler.instance);
-
- Map<String,String> passmap = new HashMap<>();
- passmap.put("slideshow/Password_Protected-hello.ppt", "hello");
- passmap.put("slideshow/Password_Protected-56-hello.ppt", "hello");
- passmap.put("slideshow/Password_Protected-np-hello.ppt", "hello");
- passmap.put("slideshow/cryptoapi-proc2356.ppt", "crypto");
- passmap.put("spreadsheet/xor-encryption-abc.xls", "abc");
- passmap.put("spreadsheet/35897-type4.xls", "freedom");
- passmap.put("spreadsheet/58616.xlsx", Decryptor.DEFAULT_PASSWORD);
- passmap.put("spreadsheet/password.xls", "password");
- passmap.put("spreadsheet/protected_passtika.xlsx", "tika");
- passmap.put("document/bug53475-password-is-pass.docx", "pass");
- passmap.put("document/bug53475-password-is-solrcell.docx", "solrcell");
- passmap.put("document/password_password_cryptoapi.doc", "password");
- passmap.put("document/password_tika_binaryrc4.doc", "tika");
- passmap.put("poifs/protect.xlsx", Decryptor.DEFAULT_PASSWORD);
- passmap.put("poifs/extenxls_pwd123.xlsx", "pwd123");
- passmap.put("poifs/protected_agile.docx", Decryptor.DEFAULT_PASSWORD);
- passmap.put("poifs/60320-protected.xlsx", "Test001!!");
- passmap.put("poifs/protected_sha512.xlsx", "this is a test");
-
- FILE_PASSWORD = Collections.unmodifiableMap(passmap);
- }
-
- private static Set<String> unmodifiableHashSet(String... a) {
- return Collections.unmodifiableSet(hashSet(a));
- }
- private static Set<String> hashSet(String... a) {
- return new HashSet<>(Arrays.asList(a));
- }
-
- // Old Word Documents where we can at least extract some text
- private static final Set<String> OLD_FILES_HWPF = unmodifiableHashSet(
- "document/Bug49933.doc",
- "document/Bug51944.doc",
- "document/Word6.doc",
- "document/Word6_sections.doc",
- "document/Word6_sections2.doc",
- "document/Word95.doc",
- "document/word95err.doc",
- "document/Bug60936.doc",
- "document/Bug60942.doc",
- "document/Bug60942b.doc",
- "document/cn.orthodox.www_divenbog_APRIL_30-APRIL.DOC",
- "hpsf/TestMickey.doc",
- "document/52117.doc",
- "hpsf/TestInvertedClassID.doc",
- "hpsf/TestBug52117.doc"
- );
-
- private static final Set<String> EXPECTED_FAILURES = unmodifiableHashSet(
- // password protected files without known password
- "spreadsheet/51832.xls",
- "spreadsheet/64759.xlsx",
- "document/PasswordProtected.doc",
-
- // TODO: fails XMLExportTest, is this ok?
- "spreadsheet/CustomXMLMapping-singleattributenamespace.xlsx",
- "spreadsheet/55864.xlsx",
- "spreadsheet/57890.xlsx",
- "spreadsheet/xxe_in_schema.xlsx",
-
- // TODO: these fail now with some NPE/file read error because we now try to compute every value via Cell.toString()!
- "spreadsheet/44958.xls",
- "spreadsheet/44958_1.xls",
- "spreadsheet/testArraysAndTables.xls",
-
- // TODO: good to ignore?
- "spreadsheet/sample-beta.xlsx",
- "document/cpansearch.perl.org_src_tobyink_acme-rundoc-0.001_word-lib_hello_world.docm",
-
- // This is actually a spreadsheet!
- "hpsf/TestRobert_Flaherty.doc",
-
- // some files that are broken, eg Word 95, ...
- "spreadsheet/43493.xls",
- "spreadsheet/46904.xls",
- "document/Bug50955.doc",
- "document/57843.doc",
- "slideshow/PPT95.ppt",
- "slideshow/pp40only.ppt",
- "slideshow/Divino_Revelado.pptx",
- "openxml4j/OPCCompliance_CoreProperties_DCTermsNamespaceLimitedUseFAIL.docx",
- "openxml4j/OPCCompliance_CoreProperties_DoNotUseCompatibilityMarkupFAIL.docx",
- "openxml4j/OPCCompliance_CoreProperties_LimitedXSITypeAttribute_NotPresentFAIL.docx",
- "openxml4j/OPCCompliance_CoreProperties_LimitedXSITypeAttribute_PresentWithUnauthorizedValueFAIL.docx",
- "openxml4j/OPCCompliance_CoreProperties_OnlyOneCorePropertiesPartFAIL.docx",
- "openxml4j/OPCCompliance_CoreProperties_UnauthorizedXMLLangAttributeFAIL.docx",
- "openxml4j/OPCCompliance_DerivedPartNameFAIL.docx",
- "openxml4j/invalid.xlsx",
- "openxml4j/62592.thmx",
- "spreadsheet/54764-2.xlsx", // see TestXSSFBugs.bug54764()
- "spreadsheet/54764.xlsx", // see TestXSSFBugs.bug54764()
- "poifs/unknown_properties.msg", // POIFS properties corrupted
- "poifs/only-zero-byte-streams.ole2", // No actual contents
- "spreadsheet/poc-xmlbomb.xlsx", // contains xml-entity-expansion
- "spreadsheet/poc-xmlbomb-empty.xlsx", // contains xml-entity-expansion
- "spreadsheet/poc-shared-strings.xlsx", // contains shared-string-entity-expansion
- "document/61612a.docx",
- "document/word2.doc",
- "spreadsheet/xlsx-corrupted.xlsx",
- "integration/stress025.docx",
-
- // old Excel files, which we only support simple text extraction of
- "spreadsheet/testEXCEL_2.xls",
- "spreadsheet/testEXCEL_3.xls",
- "spreadsheet/testEXCEL_4.xls",
- "spreadsheet/testEXCEL_5.xls",
- "spreadsheet/testEXCEL_95.xls",
- "spreadsheet/59074.xls",
- "spreadsheet/60284.xls",
- "spreadsheet/64130.xls",
-
- // OOXML Strict is not yet supported, see bug #57699
- "spreadsheet/SampleSS.strict.xlsx",
- "spreadsheet/SimpleStrict.xlsx",
- "spreadsheet/sample.strict.xlsx",
- "spreadsheet/57914.xlsx",
-
- // files with XML entities
- "openxml4j/ContentTypeHasEntities.ooxml",
-
- // non-TNEF files
- "ddf/Container.dat",
- "ddf/47143.dat",
-
- // sheet cloning errors
- "spreadsheet/56450.xls",
- // "spreadsheet/OddStyleRecord.xls",
-
- // msg files with non-standard encodings
- "hsmf/ASCII_CP1251_LCID1049.msg",
- "hsmf/ASCII_UTF-8_CP1252_LCID1031.msg",
- "hsmf/ASCII_UTF-8_CP1252_LCID1031_HTML.msg",
- "hsmf/HTMLBodyBinary_CP1251.msg",
- "hsmf/HTMLBodyBinary_UTF-8.msg"
- );
-
- private static final Set<String> IGNORED = unmodifiableHashSet(
- // OPC handler works / XSSF handler fails
- "spreadsheet/57181.xlsm",
- "spreadsheet/61300.xls"//intentionally fuzzed -- used to cause infinite loop
- );
+ public static final String[] SCAN_EXCLUDES = {
+ "**/.svn/**",
+ "lost+found",
+ "**/.git/**",
+ };
+
+ public static Stream<Arguments> allfiles(String testName) throws IOException {
+ MultiValuedMap<String, ExcInfo> exMap;
+ Map<String,String> handlerMap;
+ try (Workbook wb = WorkbookFactory.create(new File(ROOT_DIR, "spreadsheet/stress.xls"))) {
+ exMap = readExMap(wb.getSheet("Exceptions"));
+ handlerMap = readHandlerMap(wb.getSheet("Handlers"));
+ }
- public static Stream<Arguments> files() {
DirectoryScanner scanner = new DirectoryScanner();
scanner.setBasedir(ROOT_DIR);
scanner.setExcludes(SCAN_EXCLUDES);
scanner.scan();
- System.out.println("Handling " + scanner.getIncludedFiles().length + " files");
-
- List<Arguments> files = new ArrayList<>();
- for(String file : scanner.getIncludedFiles()) {
- file = file.replace('\\', '/'); // ... failures/handlers lookup doesn't work on windows otherwise
- if (IGNORED.contains(file)) {
- System.out.println("Ignoring " + file);
- continue;
+ final List<Arguments> result = new ArrayList<>(100);
+ for (String file : scanner.getIncludedFiles()) {
+ // ... failures/handlers lookup doesn't work on windows otherwise
+ final String uniFile = file.replace('\\', '/');
+
+ String firstHandler = handlerMap.entrySet().stream()
+ .filter(me -> uniFile.endsWith(me.getKey()))
+ .map(Map.Entry::getValue).findFirst().orElse("NULL");
+
+ final String[] handlerStr = { firstHandler, secondHandler(firstHandler) };
+ for (String hs : handlerStr) {
+ if ("NULL".equals(hs)) continue;
+ ExcInfo info1 = exMap.get(file).stream()
+ .filter(e ->
+ (e.tests == null || e.tests.contains(testName) || "IGNORE".equals(e.tests)) &&
+ (e.handler == null || e.handler.contains(hs))
+ ).findFirst().orElse(null);
+
+ if (info1 == null || !"IGNORE".equals(info1.tests)) {
+ result.add(Arguments.of(
+ file,
+ hs,
+ (info1 != null) ? info1.password : null,
+ (info1 != null) ? info1.exClazz : null,
+ (info1 != null) ? info1.exMessage : null
+ ));
+ }
}
- FileHandler handler = HANDLERS.get(getExtension(file));
- files.add(Arguments.of( file, handler ));
+ }
- // for some file-types also run OPCFileHandler
- if(handler instanceof XSSFFileHandler ||
- handler instanceof XWPFFileHandler ||
- handler instanceof XSLFFileHandler ||
- handler instanceof XDGFFileHandler) {
- files.add(Arguments.of( file, new OPCFileHandler() ));
- }
+ return result.stream();
+ }
- if (handler instanceof HSSFFileHandler ||
- handler instanceof HSLFFileHandler ||
- handler instanceof HWPFFileHandler ||
- handler instanceof HDGFFileHandler) {
- files.add(Arguments.of( file, new HPSFFileHandler() ));
- }
+ public static Stream<Arguments> extractFiles() throws IOException {
+ return allfiles("extract");
+ }
+
+ @ParameterizedTest(name = "#{index} {0} {1}")
+ @MethodSource("extractFiles")
+ void handleExtracting(String file, String handler, String password, Class<? extends Throwable> exClass, String exMessage) throws IOException {
+ System.out.println("Running extractFiles on "+file);
+ FileHandler fileHandler = Handler.valueOf(handler).fileHandler.get();
+ assertNotNull(fileHandler, "Did not find a handler for file " + file);
+ Executable exec = () -> fileHandler.handleExtracting(new File(ROOT_DIR, file));
+ verify(exec, exClass, exMessage, password);
+ }
+
+
+ public static Stream<Arguments> handleFiles() throws IOException {
+ return allfiles("handle");
+ }
+
+ @ParameterizedTest(name = "#{index} {0} {1}")
+ @MethodSource("handleFiles")
+ void handleFile(String file, String handler, String password, Class<? extends Throwable> exClass, String exMessage) throws IOException {
+ System.out.println("Running handleFiles on "+file);
+ FileHandler fileHandler = Handler.valueOf(handler).fileHandler.get();
+ assertNotNull(fileHandler, "Did not find a handler for file " + file);
+ try (InputStream stream = new BufferedInputStream(new FileInputStream(new File(ROOT_DIR, file)), 64 * 1024)) {
+ Executable exec = () -> fileHandler.handleFile(stream, file);
+ verify(exec, exClass, exMessage, password);
}
+ }
- return files.stream();
+ public static Stream<Arguments> handleAdditionals() throws IOException {
+ return allfiles("additional");
}
- // the display name annotation is ignored by ants junitlauncher listeners :(
- // ... even when using a custom display name generator
- @ParameterizedTest(name = "#{index} {0}" )
- @MethodSource("files")
- void testAllFiles(String file, FileHandler handler) throws Exception {
- assertNotNull(handler, "Did not find a handler for file " + file);
+ @ParameterizedTest(name = "#{index} {0} {1}")
+ @MethodSource("handleAdditionals")
+ void handleAdditional(String file, String handler, String password, Class<? extends Throwable> exClass, String exMessage) {
+ System.out.println("Running additionals on "+file);
+ FileHandler fileHandler = Handler.valueOf(handler).fileHandler.get();
+ assertNotNull(fileHandler, "Did not find a handler for file " + file);
+ Executable exec = () -> fileHandler.handleAdditional(new File(ROOT_DIR, file));
+ verify(exec, exClass, exMessage, password);
+ }
+ @SuppressWarnings("unchecked")
+ private static void verify(Executable exec, Class<? extends Throwable> exClass, String exMessage, String password) {
// this also removes the password for non encrypted files
- String pass = TestAllFiles.FILE_PASSWORD.get(file);
- Biff8EncryptionKey.setCurrentUserPassword(pass);
+ Biff8EncryptionKey.setCurrentUserPassword(password);
+ if (exClass != null && AssertionFailedError.class.isAssignableFrom(exClass)) {
+ try {
+ exec.execute();
+ fail("expected failed assertion");
+ } catch (AssertionFailedError e) {
+ assertEquals(exMessage, e.getMessage());
+ } catch (Throwable e) {
+ fail("unexpected exception", e);
+ }
+ } else if (exClass != null) {
+ Exception e = assertThrows((Class<? extends Exception>)exClass, exec);
+ String actMsg = e.getMessage();
+ if (exMessage == null) {
+ assertNull(actMsg);
+ } else {
+ assertNotNull(actMsg);
+ assertTrue(actMsg.startsWith(exMessage), "Message: "+actMsg+" - didn't start with "+exMessage);
+ }
+ } else {
+ assertDoesNotThrow(exec);
+ }
+ }
+
+ private static String secondHandler(String handlerStr) {
+ switch (handlerStr) {
+ case "XSSF":
+ case "XWPF":
+ case "XSLF":
+ case "XDGF":
+ return "OPC";
+ case "HSSF":
+ case "HWPF":
+ case "HSLF":
+ case "HDGF":
+ case "HSMF":
+ case "HBPF":
+ return "HPSF";
+ default:
+ return "NULL";
+ }
+ }
- System.out.println("Reading " + file + " with " + handler.getClass().getSimpleName());
- assertNotNull( handler, "Unknown file extension for file: " + file + ": " + getExtension(file) );
- File inputFile = new File(ROOT_DIR, file);
-
- // special cases where docx-handling breaks, but OPCPackage handling works
- boolean ignoredOPC = (file.endsWith(".docx") || file.endsWith(".xlsx") ||
- file.endsWith(".xlsb") || file.endsWith(".pptx")) &&
- handler instanceof OPCFileHandler;
- boolean ignoreHPSF = (handler instanceof HPSFFileHandler);
-
- try {
- try (InputStream stream = new BufferedInputStream(new FileInputStream(inputFile), 64 * 1024)) {
- handler.handleFile(stream, file);
- assertFalse( OLD_FILES_HWPF.contains(file) && !ignoreHPSF, "Expected to fail for file " + file + " and handler " + handler + ", but did not fail!" );
+ private static Map<String,String> readHandlerMap(Sheet sh) {
+ Map<String,String> handlerMap = new LinkedHashMap<>();
+ boolean IGNORE_SCRATCHPAD = Boolean.getBoolean("scratchpad.ignore");
+ boolean isFirst = true;
+ for (Row row : sh) {
+ if (isFirst) {
+ isFirst = false;
+ continue;
+ }
+ Cell cell = row.getCell(2);
+ if (IGNORE_SCRATCHPAD || cell == null || cell.getCellType() != CellType.STRING) {
+ cell = row.getCell(1);
}
+ handlerMap.put(row.getCell(0).getStringCellValue(), cell.getStringCellValue());
+ }
+ return handlerMap;
+ }
- handler.handleExtracting(inputFile);
- assertFalse( EXPECTED_FAILURES.contains(file) && !ignoredOPC && !ignoreHPSF, "Expected to fail for file " + file + " and handler " + handler + ", but did not fail!" );
- } catch (OldFileFormatException e) {
- // for old word files we should still support extracting text
- if(OLD_FILES_HWPF.contains(file)) {
- handler.handleExtracting(inputFile);
- } else {
- // check if we expect failure for this file
- if(!EXPECTED_FAILURES.contains(file) && !AbstractFileHandler.EXPECTED_EXTRACTOR_FAILURES.contains(file)) {
- System.out.println("Failed: " + file);
- throw new Exception("While handling " + file, e);
+ private static MultiValuedMap<String, ExcInfo> readExMap(Sheet sh) {
+ MultiValuedMap<String, ExcInfo> exMap = new ArrayListValuedHashMap<>();
+
+ Iterator<Row> iter = sh.iterator();
+ List<BiConsumer<ExcInfo,String>> cols = initCols(iter.next());
+
+ while (iter.hasNext()) {
+ ExcInfo info = new ExcInfo();
+ for (Cell cell : iter.next()) {
+ if (cell.getCellType() == CellType.STRING) {
+ cols.get(cell.getColumnIndex()).accept(info, cell.getStringCellValue());
}
}
- } catch (TestAbortedException e) {
- // file handler ignored this file
- } catch (Exception e) {
- // check if we expect failure for this file
- if(!EXPECTED_FAILURES.contains(file) && !AbstractFileHandler.EXPECTED_EXTRACTOR_FAILURES.contains(file)) {
- System.out.println("Failed: " + file);
- throw new Exception("While handling " + file, e);
- }
+ exMap.put(info.file, info);
}
+ return exMap;
+ }
+
- try {
- // let some file handlers do additional stuff
- handler.handleAdditional(inputFile);
- } catch (TestAbortedException e) {
- // file handler ignored this file
- } catch (Exception e) {
- if(!EXPECTED_FAILURES.contains(file) && !AbstractFileHandler.EXPECTED_EXTRACTOR_FAILURES.contains(file)) {
- System.out.println("Failed: " + file);
- throw new Exception("While handling " + file, e);
+ private static List<BiConsumer<ExcInfo,String>> initCols(Row row) {
+ Map<String,BiConsumer<ExcInfo,String>> m = new HashMap<>();
+ m.put("File", (e,s) -> e.file = s);
+ m.put("Tests", (e,s) -> e.tests = s);
+ m.put("Handler", (e,s) -> e.handler = s);
+ m.put("Password", (e,s) -> e.password = s);
+ m.put("Exception Class", (e,s) -> {
+ try {
+ e.exClazz = (Class<? extends Exception>) Class.forName(s);
+ } catch (ClassNotFoundException ex) {
+ fail(ex);
}
- }
+ });
+ m.put("Exception Message", (e,s) -> e.exMessage = s);
+
+ return StreamSupport
+ .stream(row.spliterator(), false)
+ .map(Cell::getStringCellValue)
+ .map(v -> m.getOrDefault(v, (e,s) -> {}))
+ .collect(Collectors.toList());
}
- public static String getExtension(String file) {
- int pos = file.lastIndexOf('.');
- if(pos == -1 || pos == file.length()-1) {
- return file;
- }
+ private static class ExcInfo {
+ String file;
+ String tests;
+ String handler;
+ String password;
+ Class<? extends Throwable> exClazz;
+ String exMessage;
+
- return file.substring(pos).toLowerCase(Locale.ROOT);
}
- public static class NullFileHandler implements FileHandler {
- public static final FileHandler instance = new NullFileHandler();
+ @SuppressWarnings("unused")
+ private enum Handler {
+ HDGF(HDGFFileHandler::new),
+ HMEF(HMEFFileHandler::new),
+ HPBF(HPBFFileHandler::new),
+ HPSF(HPSFFileHandler::new),
+ HSLF(HSLFFileHandler::new),
+ HSMF(HSMFFileHandler::new),
+ HSSF(HSSFFileHandler::new),
+ HWPF(HWPFFileHandler::new),
+ OPC(OPCFileHandler::new),
+ POIFS(POIFSFileHandler::new),
+ XDGF(XDGFFileHandler::new),
+ XSLF(XSLFFileHandler::new),
+ XSSFB(XSSFBFileHandler::new),
+ XSSF(XSSFFileHandler::new),
+ XWPF(XWPFFileHandler::new),
+ OWPF(OWPFFileHandler::new),
+ NULL(NullFileHandler::new)
+ ;
+
+ final Supplier<FileHandler> fileHandler;
+ Handler(Supplier<FileHandler> fileHandler) {
+ this.fileHandler = fileHandler;
+ }
+ }
+ public static class NullFileHandler implements FileHandler {
@Override
public void handleFile(InputStream stream, String path) {
}
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java Fri Jan 15 23:50:42 2021
@@ -24,6 +24,7 @@ import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.extractor.ExtractorFactory;
+import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.sl.extractor.SlideShowExtractor;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlideShow;
@@ -32,18 +33,20 @@ import org.junit.jupiter.api.Test;
class XSLFFileHandler extends SlideShowHandler {
@Override
public void handleFile(InputStream stream, String path) throws Exception {
- XMLSlideShow slide = new XMLSlideShow(stream);
- XSLFSlideShow slideInner = new XSLFSlideShow(slide.getPackage());
- assertNotNull(slideInner.getPresentation());
- assertNotNull(slideInner.getSlideMasterReferences());
- assertNotNull(slideInner.getSlideReferences());
-
- new POIXMLDocumentHandler().handlePOIXMLDocument(slide);
-
- handleSlideShow(slide);
-
- slideInner.close();
- slide.close();
+ try (XMLSlideShow slide = new XMLSlideShow(stream);
+ XSLFSlideShow slideInner = new XSLFSlideShow(slide.getPackage())) {
+ ;
+ assertNotNull(slideInner.getPresentation());
+ assertNotNull(slideInner.getSlideMasterReferences());
+ assertNotNull(slideInner.getSlideReferences());
+
+ new POIXMLDocumentHandler().handlePOIXMLDocument(slide);
+
+ handleSlideShow(slide);
+ } catch (POIXMLException e) {
+ Exception cause = (Exception)e.getCause();
+ throw cause == null ? e : cause;
+ }
}
@Override
Modified: poi/trunk/src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java Fri Jan 15 23:50:42 2021
@@ -21,6 +21,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
+import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.junit.jupiter.api.Test;
@@ -30,9 +31,13 @@ class XWPFFileHandler extends AbstractFi
// ignore password protected files
if (POIXMLDocumentHandler.isEncrypted(stream)) return;
- XWPFDocument doc = new XWPFDocument(stream);
+ try (XWPFDocument doc = new XWPFDocument(stream)) {
- new POIXMLDocumentHandler().handlePOIXMLDocument(doc);
+ new POIXMLDocumentHandler().handlePOIXMLDocument(doc);
+ } catch (POIXMLException e) {
+ Exception cause = (Exception)e.getCause();
+ throw cause == null ? e : cause;
+ }
}
// a test-case to test this locally without executing the full TestAllFiles
Modified: poi/trunk/src/java/org/apache/poi/util/Configurator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/Configurator.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/Configurator.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/Configurator.java Fri Jan 15 23:50:42 2021
@@ -24,13 +24,15 @@ public class Configurator {
private static POILogger logger = POILogFactory.getLogger(Configurator.class);
public static int getIntValue(String systemProperty, int defaultValue) {
- int result = defaultValue;
String property = System.getProperty(systemProperty);
+ if (property == null || "".equals(property) || "null".equals(property)) {
+ return defaultValue;
+ }
try {
- result = Integer.parseInt(property);
+ return Integer.parseInt(property);
} catch (Exception e) {
logger.log(POILogger.ERROR, "System property -D", systemProperty, " does not contains a valid integer: ", property);
+ return defaultValue;
}
- return result;
}
}
Modified: poi/trunk/src/multimodule/integration/java9/module-info.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/multimodule/integration/java9/module-info.java?rev=1885538&r1=1885537&r2=1885538&view=diff
==============================================================================
--- poi/trunk/src/multimodule/integration/java9/module-info.java (original)
+++ poi/trunk/src/multimodule/integration/java9/module-info.java Fri Jan 15 23:50:42 2021
@@ -21,6 +21,7 @@ module org.apache.poi.stress {
requires net.bytebuddy;
requires java.desktop;
+ requires org.apache.commons.collections4;
requires org.apache.poi.examples;
exports org.apache.poi.stress;
Added: poi/trunk/test-data/spreadsheet/stress.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/stress.xls?rev=1885538&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/spreadsheet/stress.xls
------------------------------------------------------------------------------
svn:mime-type = application/vnd.ms-excel
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org