]> source.dussan.org Git - poi.git/commitdiff
Refactor test somewhat to make it easier to see what it actually verifies
authorDominik Stadler <centic@apache.org>
Mon, 24 Jul 2017 14:16:34 +0000 (14:16 +0000)
committerDominik Stadler <centic@apache.org>
Mon, 24 Jul 2017 14:16:34 +0000 (14:16 +0000)
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

src/testcases/org/apache/poi/hssf/usermodel/TestPOIFSProperties.java

index 13ee6dd16c56a8ebb378e507e520e52bbc278206..bfe4124a8d7a7e960dc9e8a6a33eeb7a0fc1d688 100644 (file)
 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();
     }