simplify bug 57880 test case:

remove unrelated DataFormat code (not worried about wrap-around here since Excel supports up to 250 data formats and we're using the short data type)
replace complex write-out, close, read-back, delete code with new better test apparatus

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1721922 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Javen O'Neal 2015-12-28 14:03:52 +00:00
parent 934effd443
commit f3c14d82a6

View File

@ -32,7 +32,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashSet; import java.util.HashSet;
@ -57,6 +56,7 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.formula.WorkbookEvaluator; import org.apache.poi.ss.formula.WorkbookEvaluator;
@ -2497,52 +2497,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
/** /**
* .xlsx supports 64000 cell styles, the style indexes after * .xlsx supports 64000 cell styles, the style indexes after
* 32,767 must not be -32,768, then -32,767, -32,766 * 32,767 must not be -32,768, then -32,767, -32,766
* @throws InvalidFormatException
*/ */
@Test @Test
public void bug57880() throws IOException, InvalidFormatException { public void bug57880() throws IOException {
int numStyles = 33000; int numStyles = 33000;
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
//XSSFSheet s = wb.createSheet("TestSheet");
XSSFDataFormat fmt = wb.getCreationHelper().createDataFormat();
for (int i=1; i<numStyles; i++) { for (int i=1; i<numStyles; i++) {
short df = fmt.getFormat("test"+i);
// Format indexes will be wrapped beyond 32,676
assertEquals(164+i, df&0xffff);
// Create a style and use it // Create a style and use it
XSSFCellStyle style = wb.createCellStyle(); XSSFCellStyle style = wb.createCellStyle();
assertEquals(i, style.getUIndex()); assertEquals(i, style.getUIndex());
style.setDataFormat(df);
/*XSSFCell c = s.createRow(i).createCell(0, Cell.CELL_TYPE_NUMERIC);
c.setCellStyle(style);
c.setCellValue(i);*/
} }
// using temp file instead of ByteArrayOutputStream because of OOM in gump run // avoid OOM in gump run
File tmp = TempFile.createTempFile("poi-test", ".bug57880"); File file = XSSFTestDataSamples.writeOutAndClose(wb, "bug57880");
OutputStream fos = new FileOutputStream(tmp); wb = null;
try { // Garbage collection may happen here
wb.write(fos);
} finally {
fos.close();
}
wb.close(); // avoid zip bomb detection
fmt = null; /*s = null;*/ wb = null; double ratio = ZipSecureFile.getMinInflateRatio();
// System.gc(); ZipSecureFile.setMinInflateRatio(0.00005);
wb = XSSFTestDataSamples.readBackAndDelete(file);
ZipSecureFile.setMinInflateRatio(ratio);
wb = new XSSFWorkbook(tmp); //Assume identical cell styles aren't consolidated
fmt = wb.getCreationHelper().createDataFormat(); //If XSSFWorkbooks ever implicitly optimize/consolidate cell styles (such as when the workbook is written to disk)
// s = wb.getSheetAt(0); //then this unit test should be updated
for (int i=1; i<numStyles; i++) { for (int i=1; i<numStyles; i++) {
XSSFCellStyle style = wb.getCellStyleAt((short)i); XSSFCellStyle style = wb.getCellStyleAt(i);
assertNotNull(style); assertNotNull(style);
assertEquals(i, style.getUIndex()); assertEquals(i, style.getUIndex());
assertEquals(164+i, style.getDataFormat()&0xffff);
assertEquals("test"+i, style.getDataFormatString());
} }
wb.close(); wb.close();
tmp.delete();
} }