]> source.dussan.org Git - poi.git/commitdiff
60826 -- update stress tests to handle xlsb
authorTim Allison <tallison@apache.org>
Thu, 16 Mar 2017 22:32:24 +0000 (22:32 +0000)
committerTim Allison <tallison@apache.org>
Thu, 16 Mar 2017 22:32:24 +0000 (22:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1787264 13f79535-47bb-0310-9956-ffa450edef68

src/integrationtest/org/apache/poi/TestAllFiles.java
src/integrationtest/org/apache/poi/stress/XSSFBFileHandler.java [new file with mode: 0644]
src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java

index 9ebe79d76851e014f65e581aa76a8ada50f2df16..2311421aaa65880d4807cedf57e7af4bf8515679 100644 (file)
 package org.apache.poi;
 
 
-import org.apache.poi.stress.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+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.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.poi.stress.AbstractFileHandler;
+import org.apache.poi.stress.FileHandler;
+import org.apache.poi.stress.HDGFFileHandler;
+import org.apache.poi.stress.HMEFFileHandler;
+import org.apache.poi.stress.HPBFFileHandler;
+import org.apache.poi.stress.HPSFFileHandler;
+import org.apache.poi.stress.HSLFFileHandler;
+import org.apache.poi.stress.HSMFFileHandler;
+import org.apache.poi.stress.HSSFFileHandler;
+import org.apache.poi.stress.HWPFFileHandler;
+import org.apache.poi.stress.OPCFileHandler;
+import org.apache.poi.stress.POIFSFileHandler;
+import org.apache.poi.stress.XDGFFileHandler;
+import org.apache.poi.stress.XSLFFileHandler;
+import org.apache.poi.stress.XSSFBFileHandler;
+import org.apache.poi.stress.XSSFFileHandler;
+import org.apache.poi.stress.XWPFFileHandler;
 import org.apache.tools.ant.DirectoryScanner;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -25,15 +58,6 @@ import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.*;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-
 /**
  *  This is an integration test which performs various actions on all stored test-files and tries
  *  to reveal problems which are introduced, but not covered (yet) by unit tests. 
@@ -60,7 +84,8 @@ import static org.junit.Assert.assertNotNull;
  */
 @RunWith(Parameterized.class)
 public class TestAllFiles {
-    private static final File ROOT_DIR = new File("test-data");
+
+    private static final File ROOT_DIR = new File("C:/users/tallison/idea projects/poi-trunk/test-data");
 
     static final String[] SCAN_EXCLUDES = new String[] { "**/.svn/**", "lost+found" };
     
@@ -72,7 +97,7 @@ public class TestAllFiles {
         HANDLERS.put(".xlsx", new XSSFFileHandler());
         HANDLERS.put(".xlsm", new XSSFFileHandler());
         HANDLERS.put(".xltx", new XSSFFileHandler());
-        HANDLERS.put(".xlsb", new XSSFFileHandler());
+        HANDLERS.put(".xlsb", new XSSFBFileHandler());
 
         // Word
         HANDLERS.put(".doc", new HWPFFileHandler());
@@ -250,7 +275,6 @@ public class TestAllFiles {
         "openxml4j/invalid.xlsx",
         "spreadsheet/54764-2.xlsx",   // see TestXSSFBugs.bug54764()
         "spreadsheet/54764.xlsx",     // see TestXSSFBugs.bug54764()
-        "spreadsheet/Simple.xlsb",
         "poifs/unknown_properties.msg", // POIFS properties corrupted
         "poifs/only-zero-byte-streams.ole2", // No actual contents
         "spreadsheet/poc-xmlbomb.xlsx",  // contains xml-entity-expansion
diff --git a/src/integrationtest/org/apache/poi/stress/XSSFBFileHandler.java b/src/integrationtest/org/apache/poi/stress/XSSFBFileHandler.java
new file mode 100644 (file)
index 0000000..9b07d48
--- /dev/null
@@ -0,0 +1,96 @@
+/* ====================================================================
+   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 java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.XLSBUnsupportedException;
+import org.apache.poi.xssf.extractor.XSSFBEventBasedExcelExtractor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+public class XSSFBFileHandler extends AbstractFileHandler {
+
+    static {
+        //this is a "Beta" xlsb version and is not openable with Excel 2016
+        //TODO: see if we can support this easily enough
+        AbstractFileHandler.EXPECTED_EXTRACTOR_FAILURES.add(
+                "spreadsheet/Simple.xlsb"
+        );
+    }
+
+
+    @Override
+    public void handleFile(InputStream stream) throws Exception {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        IOUtils.copy(stream, out);
+
+        final byte[] bytes = out.toByteArray();
+        OPCPackage opcPackage = OPCPackage.open(new ByteArrayInputStream(bytes));
+        try {
+            testOne(opcPackage);
+        } finally {
+            opcPackage.close();
+        }
+
+        testNotHandledByWorkbookException(OPCPackage.open(new ByteArrayInputStream(bytes)));
+
+    }
+
+    private void testNotHandledByWorkbookException(OPCPackage pkg) throws IOException {
+
+        try {
+            XSSFWorkbook workbook = new XSSFWorkbook(pkg);
+        } catch (XLSBUnsupportedException e) {
+            //this is what we'd expect
+            //swallow
+        }
+    }
+
+    @Override
+    public void handleExtracting(File file) throws Exception {
+        OPCPackage pkg = OPCPackage.open(file, PackageAccess.READ);
+        try {
+            testOne(pkg);
+        } finally {
+            pkg.close();
+        }
+
+        pkg = OPCPackage.open(file, PackageAccess.READ);
+        try {
+            testNotHandledByWorkbookException(pkg);
+        } finally {
+            pkg.close();
+        }
+    }
+
+    private void testOne(OPCPackage pkg) throws Exception {
+        XSSFBEventBasedExcelExtractor ex = new XSSFBEventBasedExcelExtractor(pkg);
+        String txt = ex.getText();
+        if (txt.length() < 1) {
+            throw new RuntimeException("Should have gotten some text.");
+        }
+
+    }
+
+}
index bfa31c7127692f041731c8e68364b5ea7d9f7f10..111efe48c6d4287663e43075ae5348840193fcd7 100644 (file)
@@ -19,18 +19,24 @@ package org.apache.poi.stress;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
-import java.io.*;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+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.io.OutputStream;
+import java.io.PrintStream;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Set;
 
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
 import org.apache.poi.POIXMLException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException;
 import org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -131,8 +137,6 @@ public class XSSFFileHandler extends SpreadsheetHandler {
         EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/SampleSS.strict.xlsx");
         EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/SimpleStrict.xlsx");
         EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample.strict.xlsx");
-        // binary format
-        EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/Simple.xlsb");
         // TODO: good to ignore?
         EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample-beta.xlsx");