mirror of https://github.com/apache/poi.git
60826 -- update stress tests to handle xlsb
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1787264 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e6ff9b74f4
commit
6baa48a5f7
|
@ -17,7 +17,40 @@
|
||||||
package org.apache.poi;
|
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.apache.tools.ant.DirectoryScanner;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
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.Parameter;
|
||||||
import org.junit.runners.Parameterized.Parameters;
|
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
|
* 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.
|
* 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)
|
@RunWith(Parameterized.class)
|
||||||
public class TestAllFiles {
|
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" };
|
static final String[] SCAN_EXCLUDES = new String[] { "**/.svn/**", "lost+found" };
|
||||||
|
|
||||||
|
@ -72,7 +97,7 @@ public class TestAllFiles {
|
||||||
HANDLERS.put(".xlsx", new XSSFFileHandler());
|
HANDLERS.put(".xlsx", new XSSFFileHandler());
|
||||||
HANDLERS.put(".xlsm", new XSSFFileHandler());
|
HANDLERS.put(".xlsm", new XSSFFileHandler());
|
||||||
HANDLERS.put(".xltx", new XSSFFileHandler());
|
HANDLERS.put(".xltx", new XSSFFileHandler());
|
||||||
HANDLERS.put(".xlsb", new XSSFFileHandler());
|
HANDLERS.put(".xlsb", new XSSFBFileHandler());
|
||||||
|
|
||||||
// Word
|
// Word
|
||||||
HANDLERS.put(".doc", new HWPFFileHandler());
|
HANDLERS.put(".doc", new HWPFFileHandler());
|
||||||
|
@ -250,7 +275,6 @@ public class TestAllFiles {
|
||||||
"openxml4j/invalid.xlsx",
|
"openxml4j/invalid.xlsx",
|
||||||
"spreadsheet/54764-2.xlsx", // see TestXSSFBugs.bug54764()
|
"spreadsheet/54764-2.xlsx", // see TestXSSFBugs.bug54764()
|
||||||
"spreadsheet/54764.xlsx", // see TestXSSFBugs.bug54764()
|
"spreadsheet/54764.xlsx", // see TestXSSFBugs.bug54764()
|
||||||
"spreadsheet/Simple.xlsb",
|
|
||||||
"poifs/unknown_properties.msg", // POIFS properties corrupted
|
"poifs/unknown_properties.msg", // POIFS properties corrupted
|
||||||
"poifs/only-zero-byte-streams.ole2", // No actual contents
|
"poifs/only-zero-byte-streams.ole2", // No actual contents
|
||||||
"spreadsheet/poc-xmlbomb.xlsx", // contains xml-entity-expansion
|
"spreadsheet/poc-xmlbomb.xlsx", // contains xml-entity-expansion
|
||||||
|
|
|
@ -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.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,18 +19,24 @@ package org.apache.poi.stress;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
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.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.transform.TransformerException;
|
|
||||||
|
|
||||||
import org.apache.poi.POIXMLException;
|
import org.apache.poi.POIXMLException;
|
||||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
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.OLE2NotOfficeXmlFileException;
|
||||||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
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/SampleSS.strict.xlsx");
|
||||||
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/SimpleStrict.xlsx");
|
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/SimpleStrict.xlsx");
|
||||||
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample.strict.xlsx");
|
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample.strict.xlsx");
|
||||||
// binary format
|
|
||||||
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/Simple.xlsb");
|
|
||||||
// TODO: good to ignore?
|
// TODO: good to ignore?
|
||||||
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample-beta.xlsx");
|
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/sample-beta.xlsx");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue