From 338f323b94e16bad4eea977d4a7d5120b366f90a Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Mon, 24 Jul 2017 14:16:34 +0000 Subject: [PATCH] Refactor test somewhat to make it easier to see what it actually verifies Check some more to see why it fails sometimes in CI, e.g. on node qnode1 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1802817 13f79535-47bb-0310-9956-ffa450edef68 --- .../hssf/usermodel/TestPOIFSProperties.java | 87 +++++++++++-------- 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java b/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java index 13ee6dd16c..bfe4124a8d 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java @@ -18,13 +18,18 @@ package org.apache.poi.hssf.usermodel; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; +import org.apache.poi.hpsf.MarkUnsupportedException; +import org.apache.poi.hpsf.NoPropertySetStreamException; import org.apache.poi.hpsf.PropertySetFactory; import org.apache.poi.hpsf.SummaryInformation; +import org.apache.poi.hpsf.WritingNotSupportedException; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.junit.Test; @@ -33,62 +38,76 @@ import org.junit.Test; * Old-style setting of POIFS properties doesn't work with POI 3.0.2 */ public class TestPOIFSProperties { - private static final String title = "Testing POIFS properties"; @Test public void testFail() throws Exception { - InputStream is = HSSFTestDataSamples.openSampleFileStream("Simple.xls"); - POIFSFileSystem fs = new POIFSFileSystem(is); - is.close(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + { // read the workbook, adjust the SummaryInformation and write the data to a byte array + POIFSFileSystem fs = openFileSystem(); - HSSFWorkbook wb = new HSSFWorkbook(fs); + HSSFWorkbook wb = new HSSFWorkbook(fs); - //set POIFS properties after constructing HSSFWorkbook - //(a piece of code that used to work up to POI 3.0.2) - SummaryInformation summary1 = (SummaryInformation)PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); - summary1.setTitle(title); - //write the modified property back to POIFS - fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete(); - fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME); - - //save the workbook and read the property - ByteArrayOutputStream out = new ByteArrayOutputStream(); - wb.write(out); - out.close(); - wb.close(); + //set POIFS properties after constructing HSSFWorkbook + //(a piece of code that used to work up to POI 3.0.2) + setTitle(fs); - POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray())); - SummaryInformation summary2 = (SummaryInformation)PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); + //save the workbook and read the property + wb.write(out); + out.close(); + wb.close(); + } - //failing assertion - assertEquals(title, summary2.getTitle()); - fs2.close(); + // process the byte array + checkFromByteArray(out.toByteArray()); } @Test public void testOK() throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + { // read the workbook, adjust the SummaryInformation and write the data to a byte array + POIFSFileSystem fs = openFileSystem(); + + //set POIFS properties before constructing HSSFWorkbook + setTitle(fs); + + HSSFWorkbook wb = new HSSFWorkbook(fs); + + wb.write(out); + out.close(); + wb.close(); + } + + // process the byte array + checkFromByteArray(out.toByteArray()); + } + + private POIFSFileSystem openFileSystem() throws IOException { InputStream is = HSSFTestDataSamples.openSampleFileStream("Simple.xls"); POIFSFileSystem fs = new POIFSFileSystem(is); is.close(); + return fs; + } - //set POIFS properties before constructing HSSFWorkbook - SummaryInformation summary1 = (SummaryInformation)PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); - summary1.setTitle(title); + private void setTitle(POIFSFileSystem fs) throws NoPropertySetStreamException, MarkUnsupportedException, IOException, WritingNotSupportedException { + SummaryInformation summary1 = (SummaryInformation) PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); + assertNotNull(summary1); + summary1.setTitle(title); + //write the modified property back to POIFS fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete(); fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME); - HSSFWorkbook wb = new HSSFWorkbook(fs); + // check that the information was added successfully to the filesystem object + SummaryInformation summaryCheck = (SummaryInformation) PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); + assertNotNull(summaryCheck); + } - ByteArrayOutputStream out = new ByteArrayOutputStream(); - wb.write(out); - out.close(); - wb.close(); + private void checkFromByteArray(byte[] bytes) throws IOException, NoPropertySetStreamException, MarkUnsupportedException { + POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(bytes)); + SummaryInformation summary2 = (SummaryInformation) PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); + assertNotNull(summary2); - //read the property - POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(out.toByteArray())); - SummaryInformation summary2 = (SummaryInformation)PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); assertEquals(title, summary2.getTitle()); fs2.close(); } -- 2.39.5