]> source.dussan.org Git - poi.git/commitdiff
eclipse warnings - close resources
authorAndreas Beeker <kiwiwings@apache.org>
Tue, 13 Dec 2016 00:36:03 +0000 (00:36 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Tue, 13 Dec 2016 00:36:03 +0000 (00:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1773910 13f79535-47bb-0310-9956-ffa450edef68

19 files changed:
src/examples/src/org/apache/poi/hslf/examples/DataExtraction.java
src/examples/src/org/apache/poi/hsmf/examples/Msg2txt.java
src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java
src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleImages.java
src/integrationtest/org/apache/poi/stress/HSMFFileHandler.java
src/java/org/apache/poi/POIDocument.java
src/java/org/apache/poi/hssf/record/HyperlinkRecord.java
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/FileHelper.java
src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java
src/scratchpad/src/org/apache/poi/extractor/OLE2ScratchpadExtractorFactory.java
src/scratchpad/testcases/org/apache/poi/hpbf/extractor/TestPublisherTextExtractor.java
src/scratchpad/testcases/org/apache/poi/hpbf/model/TestQuillContents.java
src/scratchpad/testcases/org/apache/poi/hslf/TestEncryptedFile.java
src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFWrite.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java

index 514c01ba08a3c6cdb40e1172ccad3badfafde556..ad71ceff6c572d38fd513aba2f5f0c03eff94d0b 100644 (file)
@@ -36,8 +36,6 @@ import org.apache.poi.hwpf.usermodel.Range;
 
 /**
  * Demonstrates how you can extract misc embedded data from a ppt file
- *
- * @author Yegor Kozlov
  */
 public final class DataExtraction {
 
@@ -93,6 +91,7 @@ public final class DataExtraction {
                         FileOutputStream out = new FileOutputStream(name + "-("+(oleIdx)+").doc");
                         doc.write(out);
                         out.close();
+                        doc.close();
                      }  else {
                         FileOutputStream out = new FileOutputStream(ole.getProgID() + "-"+(oleIdx+1)+".dat");
                         InputStream dis = data.getData();
@@ -117,8 +116,8 @@ public final class DataExtraction {
                     out.close();
                 }
             }
-
         }
+        ppt.close();
     }
 
     private static void usage(){
index bf018a3e413e96d9fe29fe2106da2ce64149190e..9eeba8ce53bb4cceca19a08a974839ed7acada1a 100644 (file)
@@ -131,16 +131,16 @@ public class Msg2txt {
         */
        public void processAttachment(AttachmentChunks attachment, 
              File dir) throws IOException {
-          String fileName = attachment.attachFileName.toString();
-          if(attachment.attachLongFileName != null) {
-             fileName = attachment.attachLongFileName.toString();
+          String fileName = attachment.getAttachFileName().toString();
+          if(attachment.getAttachLongFileName() != null) {
+             fileName = attachment.getAttachLongFileName().toString();
           }
           
                File f = new File(dir, fileName);
                OutputStream fileOut = null;
                try {
                        fileOut = new FileOutputStream(f);
-                       fileOut.write(attachment.attachData.getValue());
+                       fileOut.write(attachment.getAttachData().getValue());
                } finally {
                        if(fileOut != null) {
                                fileOut.close();
index 1553321cd460c2447aeb685657a71b917d88b79f..4f5487b1fc80cdeae53a1a6c687d66c52549ddc1 100644 (file)
@@ -32,8 +32,6 @@ import org.apache.poi.xwpf.usermodel.XWPFRun;
 
 /**
  * A simple WOrdprocessingML document created by POI XWPF API
- *
- * @author Yegor Kozlov
  */
 public class SimpleDocument {
 
@@ -71,18 +69,18 @@ public class SimpleDocument {
 
         XWPFRun r2 = p2.createRun();
         r2.setText("jumped over the lazy dog");
-        r2.setStrike(true);
+        r2.setStrikeThrough(true);
         r2.setFontSize(20);
 
         XWPFRun r3 = p2.createRun();
         r3.setText("and went away");
-        r3.setStrike(true);
+        r3.setStrikeThrough(true);
         r3.setFontSize(20);
         r3.setSubscript(VerticalAlign.SUPERSCRIPT);
 
 
         XWPFParagraph p3 = doc.createParagraph();
-        p3.setWordWrap(true);
+        p3.setWordWrapped(true);
         p3.setPageBreak(true);
                 
         //p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
@@ -127,6 +125,6 @@ public class SimpleDocument {
         FileOutputStream out = new FileOutputStream("simple.docx");
         doc.write(out);
         out.close();
-
+        doc.close();
     }
 }
index 7e95c7a7f3b532606ed9282b58887b0d0c07c7b8..638cf91b12300ca48d834b0302c9797fb7aa9620 100644 (file)
  */
 package org.apache.poi.xwpf.usermodel.examples;
 
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.util.Units;
 import org.apache.poi.xwpf.usermodel.BreakType;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRun;
 
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
 /**
  * Demonstrates how to add pictures in a .docx document
- *
- * @author Yegor Kozlov
  */
 public class SimpleImages {
 
-    public static void main(String[] args) throws Exception {
+    public static void main(String[] args) throws IOException, InvalidFormatException {
         XWPFDocument doc = new XWPFDocument();
         XWPFParagraph p = doc.createParagraph();
 
@@ -69,6 +69,7 @@ public class SimpleImages {
         FileOutputStream out = new FileOutputStream("images.docx");
         doc.write(out);
         out.close();
+        doc.close();
     }
 
 
index c22edf2fc08a487903bd44fadb794f4bf5b0ddc5..4f7bd4b5d062ceb514874161ba98e4a4d60c130b 100644 (file)
@@ -38,7 +38,7 @@ public class HSMFFileHandler extends POIFSFileHandler {
 
                for(AttachmentChunks attachment : attachments) {
 
-                  DirectoryChunk chunkDirectory = attachment.attachmentDirectory;
+                  DirectoryChunk chunkDirectory = attachment.getAttachmentDirectory();
                   if(chunkDirectory != null) {
                           MAPIMessage attachmentMSG = chunkDirectory.getAsEmbededMessage();
                           assertNotNull(attachmentMSG);
index afd78a46787efab1a7ed74bd5088e5772a1ff15e..ed8e6783e49ca65a14a55da96ca40660be42305e 100644 (file)
@@ -420,6 +420,7 @@ public abstract class POIDocument implements Closeable {
      * 
      * @return {@code true} if dummy directory was created, {@code false} otherwise
      */
+    @SuppressWarnings("resource")
     @Internal
     protected boolean initDirectory() {
         if (directory == null) {
index 4048255f4773d953a32f73bc60e7e92b775d607a..e4096e226a8f97c1ac3073d82c67edd459182752 100644 (file)
 
 package org.apache.poi.hssf.record;
 
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.HexDump;
 import org.apache.poi.util.HexRead;
-import org.apache.poi.util.LittleEndianByteArrayInputStream;
+import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.LittleEndianInput;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.POILogFactory;
@@ -107,15 +103,14 @@ public final class HyperlinkRecord extends StandardRecord implements Cloneable {
                }
 
                public long getD4() {
-                       //
-                       ByteArrayOutputStream baos = new ByteArrayOutputStream(8);
-                       try {
-                               new DataOutputStream(baos).writeLong(_d4);
-                       } catch (IOException e) {
-                               throw new RuntimeException(e);
-                       }
-                       byte[] buf = baos.toByteArray();
-                       return new LittleEndianByteArrayInputStream(buf).readLong();
+                   byte[] result = new byte[Long.SIZE/Byte.SIZE];
+                   long l = _d4;
+                   for (int i = result.length-1; i >= 0; i--) {
+                       result[i] = (byte)(l & 0xFF);
+                       l >>= 8;
+                   }
+                   
+                       return LittleEndian.getLong(result, 0);
                }
 
                public String formatAsString() {
index cc41e43520db8b669dcbc90d08365aafa734ba5d..bf7402ea0ed67fec7373245bbf83a6f6cea886b5 100644 (file)
@@ -64,11 +64,15 @@ public final class FileHelper {
         *             If an I/O error occur.
         */
        public static void copyFile(File in, File out) throws IOException {
-               FileChannel sourceChannel = new FileInputStream(in).getChannel();
-               FileChannel destinationChannel = new FileOutputStream(out).getChannel();
+           FileInputStream fis = new FileInputStream(in);
+           FileOutputStream fos = new FileOutputStream(out);
+               FileChannel sourceChannel = fis.getChannel();
+               FileChannel destinationChannel = fos.getChannel();
                sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
                sourceChannel.close();
                destinationChannel.close();
+               fos.close();
+               fis.close();
        }
 
        /**
index c59be45256f832185543398cfb49601ec5326f8c..a910acc0e60cfd3bd860357178da86710a5ea2b5 100644 (file)
 \r
 package org.apache.poi.openxml4j.opc;\r
 \r
+import static org.junit.Assert.assertArrayEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertTrue;\r
+\r
 import java.io.BufferedInputStream;\r
 import java.io.ByteArrayOutputStream;\r
 import java.io.File;\r
 import java.io.FileInputStream;\r
 import java.io.IOException;\r
-import java.util.Iterator;\r
 import java.util.Set;\r
 import java.util.TreeMap;\r
 import java.util.zip.ZipEntry;\r
 import java.util.zip.ZipInputStream;\r
 \r
-import junit.framework.Assert;\r
+import org.junit.Assert;\r
+\r
 import junit.framework.AssertionFailedError;\r
 \r
 /**\r
  * Compare the contents of 2 zip files.\r
- * \r
- * @author CDubettier\r
  */\r
 public class ZipFileAssert {\r
        private ZipFileAssert() {\r
@@ -42,55 +44,31 @@ public class ZipFileAssert {
 \r
        static final int BUFFER_SIZE = 2048;\r
 \r
-       protected static boolean equals(\r
+       protected static void equals(\r
                        TreeMap<String, ByteArrayOutputStream> file1,\r
                        TreeMap<String, ByteArrayOutputStream> file2) {\r
-               Set listFile1 = file1.keySet();\r
-               if (listFile1.size() == file2.keySet().size()) {\r
-                       for (Iterator iter = listFile1.iterator(); iter.hasNext();) {\r
-                               String fileName = (String) iter.next();\r
-                               // extract the contents for both\r
-                               ByteArrayOutputStream contain2 = file2.get(fileName);\r
-                               ByteArrayOutputStream contain1 = file1.get(fileName);\r
-\r
-                               if (contain2 == null) {\r
-                                       // file not found in archive 2\r
-                                       Assert.fail(fileName + " not found in 2nd zip");\r
-                                       return false;\r
-                               }\r
-                               // no need to check for contain1. The key come from it\r
-\r
-                               if ((fileName.endsWith(".xml")) || fileName.endsWith(".rels")) {\r
-                                       // we have a xml file\r
-                    // TODO\r
-                    // YK: the original OpenXML4J version attempted to compare xml using xmlunit (http://xmlunit.sourceforge.net),\r
-                    // but POI does not depend on this library\r
-                } else {\r
-                                       // not xml, may be an image or other binary format\r
-                                       if (contain2.size() != contain1.size()) {\r
-                                               // not the same size\r
-                                               Assert.fail(fileName\r
-                                                               + " does not have the same size in both zip:"\r
-                                                               + contain2.size() + "!=" + contain1.size());\r
-                                               return false;\r
-                                       }\r
-                                       byte array1[] = contain1.toByteArray();\r
-                                       byte array2[] = contain2.toByteArray();\r
-                                       for (int i = 0; i < array1.length; i++) {\r
-                                               if (array1[i] != array2[i]) {\r
-                                                       Assert.fail(fileName + " differ at index:" + i);\r
-                                                       return false;\r
-                                               }\r
-                                       }\r
-                               }\r
+               Set<String> listFile1 = file1.keySet();\r
+               Assert.assertEquals("not the same number of files in zip:", listFile1.size(), file2.keySet().size());\r
+               \r
+               for (String fileName : listFile1) {\r
+                       // extract the contents for both\r
+                       ByteArrayOutputStream contain2 = file2.get(fileName);\r
+                       ByteArrayOutputStream contain1 = file1.get(fileName);\r
+\r
+                       assertNotNull(fileName + " not found in 2nd zip", contain2);\r
+                       // no need to check for contain1. The key come from it\r
+\r
+                       if ((fileName.endsWith(".xml")) || fileName.endsWith(".rels")) {\r
+                               // we have a xml file\r
+                // TODO\r
+                // YK: the original OpenXML4J version attempted to compare xml using xmlunit (http://xmlunit.sourceforge.net),\r
+                // but POI does not depend on this library\r
+            } else {\r
+                               // not xml, may be an image or other binary format\r
+                Assert.assertEquals(fileName + " does not have the same size in both zip:", contain2.size(), contain1.size());\r
+                               assertArrayEquals("contents differ", contain1.toByteArray(), contain2.toByteArray());\r
                        }\r
-               } else {\r
-                       // not the same number of files -> cannot be equals\r
-                       Assert.fail("not the same number of files in zip:"\r
-                                       + listFile1.size() + "!=" + file2.keySet().size());\r
-                       return false;\r
                }\r
-               return true;\r
        }\r
 \r
        protected static TreeMap<String, ByteArrayOutputStream> decompress(\r
@@ -139,16 +117,16 @@ public class ZipFileAssert {
         * \r
         */\r
        public static void assertEquals(File expected, File actual) {\r
-               Assert.assertNotNull(expected);\r
-               Assert.assertNotNull(actual);\r
+               assertNotNull(expected);\r
+               assertNotNull(actual);\r
 \r
-               Assert.assertTrue("File does not exist [" + expected.getAbsolutePath()\r
+               assertTrue("File does not exist [" + expected.getAbsolutePath()\r
                                + "]", expected.exists());\r
-               Assert.assertTrue("File does not exist [" + actual.getAbsolutePath()\r
+               assertTrue("File does not exist [" + actual.getAbsolutePath()\r
                                + "]", actual.exists());\r
 \r
-               Assert.assertTrue("Expected file not readable", expected.canRead());\r
-               Assert.assertTrue("Actual file not readable", actual.canRead());\r
+               assertTrue("Expected file not readable", expected.canRead());\r
+               assertTrue("Actual file not readable", actual.canRead());\r
 \r
                try {\r
                        TreeMap<String, ByteArrayOutputStream> file1 = decompress(expected);\r
index 115b74a39c3563a309c7edef302ddc6eccf31c08..429e257aba43e998fda60af59c4a1b9fcb1d4bf8 100644 (file)
@@ -133,11 +133,11 @@ public class OLE2ScratchpadExtractorFactory {
             // Stored in the Attachment blocks
             MAPIMessage msg = ((OutlookTextExtactor)ext).getMAPIMessage();
             for (AttachmentChunks attachment : msg.getAttachmentFiles()) {
-                if (attachment.attachData != null) {
-                    byte[] data = attachment.attachData.getValue();
+                if (attachment.getAttachData() != null) {
+                    byte[] data = attachment.getAttachData().getValue();
                     nonPOIFS.add( new ByteArrayInputStream(data) );
-                } else if (attachment.attachmentDirectory != null) {
-                    dirs.add(attachment.attachmentDirectory.getDirectory());
+                } else if (attachment.getAttachmentDirectory() != null) {
+                    dirs.add(attachment.getAttachmentDirectory().getDirectory());
                 }
             }
         }
index 63af798f9e920304671690b8cd6f12f1b12af4c0..35920b577901b929aa9aaf3ddee9622fdf3c2adc 100644 (file)
 
 package org.apache.poi.hpbf.extractor;
 
-import java.io.File;
-import java.io.FileInputStream;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
-import junit.framework.TestCase;
+import java.io.IOException;
+import java.io.InputStream;
 
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hpbf.HPBFDocument;
 import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
+import org.junit.Test;
 
-public final class TestPublisherTextExtractor extends TestCase {
+public final class TestPublisherTextExtractor {
     private static final POIDataSamples _samples = POIDataSamples.getPublisherInstance();
-    
+
     private static final String SAMPLE_TEXT = 
-       "This is some text on the first page\n" +
-       "It\u2019s in times new roman, font size 10, all normal\n" +
-       "" +
-       "This is in bold and italic\n" +
-       "It\u2019s Arial, 20 point font\n" +
-       "It\u2019s in the second textbox on the first page\n" +
-       "" +
-       "This is the second page\n\n" +
-       "" +
-       "It is also times new roman, 10 point\n" +
-       "" +
-       "Table on page 2\nTop right\n" +
-       "P2 table left\nP2 table right\n" +
-       "Bottom Left\nBottom Right\n" +
-       "" +
-       "This text is on page two\n" +
-       "#This is a link to Apache POI\n" +
-       "More normal text\n" +
-       "Link to a file\n" +
-       "" +
-       "More text, more hyperlinks\n" +
-       "email link\n" +
-       "Final hyperlink\n" +
-       "Within doc to page 1\n";
+        "This is some text on the first page\n" +
+        "It\u2019s in times new roman, font size 10, all normal\n" +
+        "" +
+        "This is in bold and italic\n" +
+        "It\u2019s Arial, 20 point font\n" +
+        "It\u2019s in the second textbox on the first page\n" +
+        "" +
+        "This is the second page\n\n" +
+        "" +
+        "It is also times new roman, 10 point\n" +
+        "" +
+        "Table on page 2\nTop right\n" +
+        "P2 table left\nP2 table right\n" +
+        "Bottom Left\nBottom Right\n" +
+        "" +
+        "This text is on page two\n" +
+        "#This is a link to Apache POI\n" +
+        "More normal text\n" +
+        "Link to a file\n" +
+        "" +
+        "More text, more hyperlinks\n" +
+        "email link\n" +
+        "Final hyperlink\n" +
+        "Within doc to page 1\n";
+
     private static final String SIMPLE_TEXT =
-       "0123456789\n" +
-       "0123456789abcdef\n" +
-       "0123456789abcdef0123456789abcdef\n" +
-       "0123456789\n" +
-       "0123456789abcdef\n" +
-       "0123456789abcdef0123456789abcdef\n" +
-       "0123456789abcdef0123456789abcdef0123456789abcdef\n";
-
-       public void testBasics() throws Exception {
-               HPBFDocument doc = new HPBFDocument(
-                               _samples.openResourceAsStream("Sample.pub")
-               );
-
-               PublisherTextExtractor ext =
-                       new PublisherTextExtractor(doc);
-               ext.getText();
-
-               ext = new PublisherTextExtractor(
-                _samples.openResourceAsStream("Simple.pub")
-               );
-               ext.getText();
-       }
-
-       public void testContents() throws Exception {
-          PublisherTextExtractor ext;
-          File sample = _samples.getFile("Sample.pub");
-      File simple = _samples.getFile("Simple.pub");
-          
-          // Check this complicated file using POIFS
-               HPBFDocument docOPOIFS = new HPBFDocument(
-                     new FileInputStream(sample)
-               );
-      ext = new PublisherTextExtractor(docOPOIFS);
-      assertEquals( SAMPLE_TEXT, ext.getText() );
-
-      // And with NPOIFS
-      NPOIFSFileSystem fs = new NPOIFSFileSystem(sample);
-    HPBFDocument docNPOIFS = new HPBFDocument(
-            fs
-      );
-               ext = new PublisherTextExtractor(docNPOIFS);
-               assertEquals( SAMPLE_TEXT, ext.getText() );
-
-               
-               // Now a simpler file
-               ext = new PublisherTextExtractor(
-                     new FileInputStream(simple)
-               );
-      assertEquals( SIMPLE_TEXT, ext.getText() );
-      fs.close();
-       }
-
-       /**
-        * We have the same file saved for Publisher 98, Publisher
-        *  2000 and Publisher 2007. Check they all agree.
-        * @throws Exception
-        */
-       public void testMultipleVersions() throws Exception {
-               File f;
-               HPBFDocument doc;
-
-               doc = new HPBFDocument(
-                _samples.openResourceAsStream("Sample.pub")
-               );
-               String s2007 = (new PublisherTextExtractor(doc)).getText();
-
-               doc = new HPBFDocument(
-                _samples.openResourceAsStream("Sample2000.pub")
-               );
-               String s2000 = (new PublisherTextExtractor(doc)).getText();
-
-               doc = new HPBFDocument(
-                _samples.openResourceAsStream("Sample98.pub")
-               );
-               String s98 = (new PublisherTextExtractor(doc)).getText();
-
-               // Check they all agree
-               assertEquals(s2007, s2000);
-               assertEquals(s2007, s98);
-       }
-
-       /**
-        * Test that the hyperlink extraction stuff works as well
-        *  as we can hope it to.
-        */
-       public void testWithHyperlinks() throws Exception {
-               HPBFDocument doc = new HPBFDocument(
-                _samples.openResourceAsStream("LinkAt10.pub")
-               );
-
-               PublisherTextExtractor ext =
-                       new PublisherTextExtractor(doc);
-               ext.getText();
-
-               // Default is no hyperlinks
-               assertEquals("1234567890LINK\n", ext.getText());
-
-               // Turn on
-               ext.setHyperlinksByDefault(true);
-               assertEquals("1234567890LINK\n<http://poi.apache.org/>\n", ext.getText());
-
-
-               // Now a much more complex document
-               ext = new PublisherTextExtractor(
-                _samples.openResourceAsStream("Sample.pub")
-        );
-               ext.setHyperlinksByDefault(true);
-               String text = ext.getText();
-
-               assertTrue(text.endsWith(
-                               "<http://poi.apache.org/>\n" +
-                               "<C:\\Documents and Settings\\Nick\\My Documents\\Booleans.xlsx>\n" +
-                               "<>\n" +
-                               "<mailto:dev@poi.apache.org?subject=HPBF>\n" +
-                               "<mailto:dev@poi.apache.org?subject=HPBF>\n"
-               ));
-       }
+        "0123456789\n" +
+        "0123456789abcdef\n" +
+        "0123456789abcdef0123456789abcdef\n" +
+        "0123456789\n" +
+        "0123456789abcdef\n" +
+        "0123456789abcdef0123456789abcdef\n" +
+        "0123456789abcdef0123456789abcdef0123456789abcdef\n";
+
+    @Test
+    public void testBasics() throws IOException {
+        InputStream sample = _samples.openResourceAsStream("Sample.pub");
+        HPBFDocument doc = new HPBFDocument(sample);
+        PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+        assertNotNull(ext.getText());
+        ext.close();
+        doc.close();
+        sample.close();
+
+        InputStream simple = _samples.openResourceAsStream("Simple.pub");
+        ext = new PublisherTextExtractor(simple);
+        assertNotNull(ext.getText());
+        ext.close();
+        simple.close();
+    }
+
+    @Test
+    public void testContents() throws IOException {
+        // Check this complicated file using POIFS
+        InputStream sample = _samples.openResourceAsStream("Sample.pub");
+        HPBFDocument docOPOIFS = new HPBFDocument(sample);
+        PublisherTextExtractor ext = new PublisherTextExtractor(docOPOIFS);
+        assertEquals(SAMPLE_TEXT, ext.getText());
+        ext.close();
+        docOPOIFS.close();
+        sample.close();
+
+        // And with NPOIFS
+        sample = _samples.openResourceAsStream("Sample.pub");
+        NPOIFSFileSystem fs = new NPOIFSFileSystem(sample);
+        HPBFDocument docNPOIFS = new HPBFDocument(fs);
+        ext = new PublisherTextExtractor(docNPOIFS);
+        assertEquals(SAMPLE_TEXT, ext.getText());
+        ext.close();
+        docNPOIFS.close();
+        fs.close();
+        sample.close();
+
+        // Now a simpler file
+        InputStream simple = _samples.openResourceAsStream("Simple.pub");
+        ext = new PublisherTextExtractor(simple);
+        assertEquals(SIMPLE_TEXT, ext.getText());
+        ext.close();
+    }
+
+    /**
+     * We have the same file saved for Publisher 98, Publisher 2000 and
+     * Publisher 2007. Check they all agree.
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testMultipleVersions() throws Exception {
+        InputStream sample = _samples.openResourceAsStream("Sample.pub");
+        HPBFDocument doc = new HPBFDocument(sample);
+        PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+        String s2007 = ext.getText();
+        ext.close();
+        doc.close();
+        sample.close();
+
+        InputStream sample2000 = _samples.openResourceAsStream("Sample2000.pub");
+        doc = new HPBFDocument(sample2000);
+        ext = new PublisherTextExtractor(doc);
+        String s2000 = ext.getText();
+        ext.close();
+        doc.close();
+        sample2000.close();
+
+        InputStream sample98 = _samples.openResourceAsStream("Sample98.pub");
+        doc = new HPBFDocument(sample98);
+        ext = new PublisherTextExtractor(doc);
+        String s98 = ext.getText();
+        ext.close();
+        doc.close();
+        sample98.close();
+
+        // Check they all agree
+        assertEquals(s2007, s2000);
+        assertEquals(s2007, s98);
+    }
+
+    /**
+     * Test that the hyperlink extraction stuff works as well as we can hope it
+     * to.
+     */
+    @Test
+    public void testWithHyperlinks() throws Exception {
+        InputStream linkAt = _samples.openResourceAsStream("LinkAt10.pub"); 
+        HPBFDocument doc = new HPBFDocument(linkAt);
+
+        PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+
+        // Default is no hyperlinks
+        assertEquals("1234567890LINK\n", ext.getText());
+
+        // Turn on
+        ext.setHyperlinksByDefault(true);
+        assertEquals("1234567890LINK\n<http://poi.apache.org/>\n", ext.getText());
+        ext.close();
+        doc.close();
+        linkAt.close();
+
+        // Now a much more complex document
+        InputStream sample = _samples.openResourceAsStream("Sample.pub");
+        ext = new PublisherTextExtractor(sample);
+        ext.setHyperlinksByDefault(true);
+        String text = ext.getText();
+        ext.close();
+        sample.close();
+
+        assertTrue(text.endsWith("<http://poi.apache.org/>\n"
+                + "<C:\\Documents and Settings\\Nick\\My Documents\\Booleans.xlsx>\n"
+                + "<>\n" + "<mailto:dev@poi.apache.org?subject=HPBF>\n"
+                + "<mailto:dev@poi.apache.org?subject=HPBF>\n"));
+    }
 }
index b88e45b02899f91d65981e8f594d1504a361a9cb..a251d05278952751dd91925df75510528689abc1 100644 (file)
 
 package org.apache.poi.hpbf.model;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.apache.poi.POIDataSamples;
 import org.apache.poi.hpbf.HPBFDocument;
-import org.apache.poi.hpbf.model.qcbits.QCTextBit;
-import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type12;
 import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type0;
+import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type12;
 import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type4;
 import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type8;
-import org.apache.poi.POIDataSamples;
-
-import junit.framework.TestCase;
+import org.apache.poi.hpbf.model.qcbits.QCTextBit;
+import org.junit.Test;
 
-public final class TestQuillContents extends TestCase {
+public final class TestQuillContents {
     private static final POIDataSamples _samples = POIDataSamples.getPublisherInstance();
 
-       public void testBasics() throws Exception {
+    @Test
+    public void testBasics() throws IOException {
                HPBFDocument doc = new HPBFDocument(
                    _samples.openResourceAsStream("Sample.pub")
                );
@@ -59,9 +66,12 @@ public final class TestQuillContents extends TestCase {
                assertEquals("STSH", qc.getBits()[3].getThingType());
                assertEquals("STSH", qc.getBits()[3].getBitType());
                assertEquals(2, qc.getBits()[3].getOptA());
+               
+               doc.close();
        }
 
-       public void testText() throws Exception {
+    @Test
+       public void testText() throws IOException {
                HPBFDocument doc = new HPBFDocument(
                 _samples.openResourceAsStream("Sample.pub")
                );
@@ -73,9 +83,12 @@ public final class TestQuillContents extends TestCase {
                String t = text.getText();
                assertTrue(t.startsWith("This is some text on the first page"));
                assertTrue(t.endsWith("Within doc to page 1\r"));
+               
+      doc.close();
        }
 
-       public void testPLC() throws Exception {
+    @Test
+       public void testPLC() throws IOException {
                HPBFDocument doc = new HPBFDocument(
                 _samples.openResourceAsStream("Simple.pub")
                );
@@ -133,9 +146,13 @@ public final class TestQuillContents extends TestCase {
                assertEquals(0x22000000, plc12.getPlcValB()[0]);
                assertEquals(0x05, plc12.getPlcValA()[1]);
                assertEquals(0x04, plc12.getPlcValB()[1]);
+               
+               doc.close();
        }
 
-       public void testComplexPLC() throws Exception {
+    @SuppressWarnings("unused")
+    @Test
+       public void testComplexPLC() throws IOException {
                HPBFDocument doc = new HPBFDocument(
                 _samples.openResourceAsStream("Sample.pub")
                );
@@ -234,9 +251,12 @@ public final class TestQuillContents extends TestCase {
                assertEquals(0x000004, plc16.getPlcValB()[4]);
                assertEquals(0x000004, plc16.getPlcValA()[5]);
                assertEquals(0x000004, plc16.getPlcValB()[5]);
+               
+      doc.close();
        }
 
-       public void testNoHyperlinks() throws Exception {
+    @Test
+       public void testNoHyperlinks() throws IOException {
                HPBFDocument doc = new HPBFDocument(
                 _samples.openResourceAsStream("SampleNewsletter.pub")
                );
@@ -250,9 +270,12 @@ public final class TestQuillContents extends TestCase {
                assertEquals(0, plc18.getNumberOfHyperlinks());
                assertEquals(0, plc18.getTextStartAt(0));
                assertEquals(601, plc18.getAllTextEndAt());
+               
+      doc.close();
        }
 
-       public void testSimpleHyperlink() throws Exception {
+    @Test
+       public void testSimpleHyperlink() throws IOException {
                HPBFDocument doc;
                QuillContents qc;
                Type12 hlBit;
@@ -270,6 +293,7 @@ public final class TestQuillContents extends TestCase {
                assertEquals(10, hlBit.getTextStartAt(0));
                assertEquals(15, hlBit.getAllTextEndAt());
                assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
+        doc.close();
 
                // Longer link at 10
                doc = new HPBFDocument(
@@ -284,6 +308,7 @@ public final class TestQuillContents extends TestCase {
                assertEquals(10, hlBit.getTextStartAt(0));
                assertEquals(15, hlBit.getAllTextEndAt());
                assertEquals("http://poi.apache.org/hpbf/", hlBit.getHyperlink(0));
+        doc.close();
 
                // Link at 20
                doc = new HPBFDocument(
@@ -298,9 +323,11 @@ public final class TestQuillContents extends TestCase {
                assertEquals(20, hlBit.getTextStartAt(0));
                assertEquals(25, hlBit.getAllTextEndAt());
                assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
+               doc.close();
        }
 
-       public void testManyHyperlinks() throws Exception {
+    @Test
+       public void testManyHyperlinks() throws IOException {
                HPBFDocument doc;
                QuillContents qc;
                Type12 hlBit;
@@ -318,10 +345,12 @@ public final class TestQuillContents extends TestCase {
                assertEquals(10, hlBit.getTextStartAt(0));
                assertEquals(15, hlBit.getAllTextEndAt());
                assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
-
+               
+      doc.close();
        }
 
-       public void testHyperlinkDifferentVersions() throws Exception {
+    @Test
+       public void testHyperlinkDifferentVersions() throws IOException {
                HPBFDocument doc;
                QuillContents qc;
                Type12 hlBitA;
@@ -354,6 +383,7 @@ public final class TestQuillContents extends TestCase {
                assertEquals("", hlBitB.getHyperlink(0));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
+        doc.close();
 
                // 2000 version
                doc = new HPBFDocument(
@@ -382,6 +412,7 @@ public final class TestQuillContents extends TestCase {
                assertEquals("", hlBitB.getHyperlink(0));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
+        doc.close();
 
                // 98 version
                doc = new HPBFDocument(
@@ -410,5 +441,6 @@ public final class TestQuillContents extends TestCase {
                assertEquals("", hlBitB.getHyperlink(0));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
                assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
-       }
+        doc.close();
+    }
 }
index ae4339427333c83d0efdab494a5d7361629c0e92..a8060e7d3ad7972bcb47ec5eb2bf7b87a1d4bd93 100644 (file)
 package org.apache.poi.hslf;
 
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertNotNull;
 
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.poi.POIDataSamples;
 import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
 import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
-import org.apache.poi.POIDataSamples;
+import org.junit.Test;
 
 /**
  * Tests that HSLFSlideShow does the right thing with an encrypted file
- *
- * @author Nick Burch (nick at torchbox dot com)
  */
-public final class TestEncryptedFile extends TestCase {
-    private static POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
-
-       public void testLoadNonEncrypted() throws Exception {
-               HSLFSlideShowImpl hss = new HSLFSlideShowImpl(slTests.openResourceAsStream("basic_test_ppt_file.ppt"));
+public final class TestEncryptedFile {
+    private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
 
+    @Test
+       public void testLoadNonEncrypted() throws IOException {
+        InputStream is = slTests.openResourceAsStream("basic_test_ppt_file.ppt");
+               HSLFSlideShowImpl hss = new HSLFSlideShowImpl(is);
                assertNotNull(hss);
+               hss.close();
+               is.close();
        }
 
-       public void testLoadEncrypted() throws Exception {
+    @Test(expected=EncryptedPowerPointFileException.class)
+       public void testLoadEncrypted1() throws IOException {
+        InputStream is = slTests.openResourceAsStream("Password_Protected-hello.ppt");
                try {
-            new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-hello.ppt"));
-                       fail();
-               } catch(EncryptedPowerPointFileException e) {
-                       // Good
+            new HSLFSlideShowImpl(is).close();
+               } finally {
+                   is.close();
                }
-
+    }
+    
+    @Test(expected=EncryptedPowerPointFileException.class)
+    public void testLoadEncrypted2() throws IOException {
+        InputStream is = slTests.openResourceAsStream("Password_Protected-np-hello.ppt");
                try {
-            new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-np-hello.ppt"));
-                       fail();
-               } catch(EncryptedPowerPointFileException e) {
-                       // Good
+            new HSLFSlideShowImpl(is).close();
+               } finally {
+                   is.close();
                }
-
+    }
+    
+    @Test(expected=EncryptedPowerPointFileException.class)
+    public void testLoadEncrypted3() throws IOException {
+        InputStream is = slTests.openResourceAsStream("Password_Protected-56-hello.ppt");
                try {
-            new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-56-hello.ppt"));
-                       fail();
-               } catch(EncryptedPowerPointFileException e) {
-                       // Good
+            new HSLFSlideShowImpl(is).close();
+               } finally {
+                   is.close();
                }
        }
 }
index 80e9f53d0fd72b9bcdb31ee6f02fedbc62281d48..227f2c46459073a2ae0ac127b556642b0fcf6669 100644 (file)
@@ -77,7 +77,7 @@ public class TestDocumentEncryption {
             try {\r
                 NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true);\r
                 HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs);\r
-                new HSLFSlideShow(hss);\r
+                new HSLFSlideShow(hss).close();\r
                 fs.close();\r
             } catch (EncryptedPowerPointFileException e) {\r
                 fail(pptFile+" can't be decrypted");\r
@@ -99,17 +99,19 @@ public class TestDocumentEncryption {
         \r
         ByteArrayOutputStream bos = new ByteArrayOutputStream();\r
         hss.write(bos);\r
+        hss.close();\r
         fs.close();\r
         \r
         fs = new NPOIFSFileSystem(new ByteArrayInputStream(bos.toByteArray()));\r
         hss = new HSLFSlideShowImpl(fs);\r
         List<HSLFPictureData> picsActual = hss.getPictureData();\r
-        fs.close();\r
         \r
         assertEquals(picsExpected.size(), picsActual.size());\r
         for (int i=0; i<picsExpected.size(); i++) {\r
             assertArrayEquals(picsExpected.get(i).getRawData(), picsActual.get(i).getRawData());\r
         }\r
+        hss.close();\r
+        fs.close();\r
     }\r
 \r
     @Test\r
@@ -128,6 +130,7 @@ public class TestDocumentEncryption {
         Biff8EncryptionKey.setCurrentUserPassword("hello");\r
         ByteArrayOutputStream encrypted = new ByteArrayOutputStream();\r
         hss.write(encrypted);\r
+        hss.close();\r
         fs.close();\r
 \r
         // decrypted\r
@@ -137,6 +140,7 @@ public class TestDocumentEncryption {
         Biff8EncryptionKey.setCurrentUserPassword(null);\r
         ByteArrayOutputStream actual = new ByteArrayOutputStream();\r
         hss.write(actual);\r
+        hss.close();\r
         fs.close();\r
         \r
         assertArrayEquals(expected.toByteArray(), actual.toByteArray());\r
@@ -184,6 +188,7 @@ public class TestDocumentEncryption {
         ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME);\r
         assertTrue(ps.isDocumentSummaryInformation());\r
         assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue());\r
+        ss.close();\r
         fs.close();\r
         fs2.close();\r
     }\r
index 0cabd81a6db935ab86ca5fe8a3dfe9a9121c87c7..8b340079d3e487e6e2e894e4afd6455d611ae09d 100644 (file)
@@ -847,7 +847,6 @@ public final class TestBugs {
     }
 
     @Test
-    @SuppressWarnings("resource")
     public void bug57796() throws IOException {
         HSLFSlideShow ppt = open("WithLinks.ppt");
         HSLFSlide slide = ppt.getSlides().get(0);
@@ -859,7 +858,7 @@ public final class TestBugs {
         assertEquals(hlRun.getId(), hlShape.getId());
         assertEquals(hlRun.getAddress(), hlShape.getAddress());
         assertEquals(hlRun.getLabel(), hlShape.getLabel());
-        assertEquals(hlRun.getType(), hlShape.getType());
+        assertEquals(hlRun.getTypeEnum(), hlShape.getTypeEnum());
         assertEquals(hlRun.getStartIndex(), hlShape.getStartIndex());
         assertEquals(hlRun.getEndIndex(), hlShape.getEndIndex());
 
@@ -999,9 +998,16 @@ public final class TestBugs {
             long persistId = vbaAtom.getPersistIdRef();
             for (HSLFObjectData objData : ppt.getEmbeddedObjects()) {
                 if (objData.getExOleObjStg().getPersistId() == persistId) {
-                    return new VBAMacroReader(objData.getData()).readMacros();
+                    VBAMacroReader mr = new VBAMacroReader(objData.getData());
+                    try {
+                        return mr.readMacros();
+                    } finally {
+                        mr.close();
+                    }
                 }
             }
+            
+            ppt.close();
 
         } finally {
             IOUtils.closeQuietly(npoifs);
index 58ff1cc1624cdfcfb879912dfc327db986107389..5928e5a8fa87ed8f5527f1e9675e1e8de744d27f 100644 (file)
@@ -260,14 +260,14 @@ public final class TestPOIFSChunkParser {
       assertTrue(groups[4] instanceof NameIdChunks);
       
       attachment = (AttachmentChunks)groups[2];
-      assertEquals("TEST-U~1.DOC", attachment.attachFileName.toString());
-      assertEquals("test-unicode.doc", attachment.attachLongFileName.toString());
-      assertEquals(24064, attachment.attachData.getValue().length);
+      assertEquals("TEST-U~1.DOC", attachment.getAttachFileName().toString());
+      assertEquals("test-unicode.doc", attachment.getAttachLongFileName().toString());
+      assertEquals(24064, attachment.getAttachData().getValue().length);
       
       attachment = (AttachmentChunks)groups[3];
-      assertEquals("pj1.txt", attachment.attachFileName.toString());
-      assertEquals("pj1.txt", attachment.attachLongFileName.toString());
-      assertEquals(89, attachment.attachData.getValue().length);
+      assertEquals("pj1.txt", attachment.getAttachFileName().toString());
+      assertEquals("pj1.txt", attachment.getAttachLongFileName().toString());
+      assertEquals(89, attachment.getAttachData().getValue().length);
           
       
       // Check raw details on one without
@@ -279,14 +279,14 @@ public final class TestPOIFSChunkParser {
       assertEquals(2, msgWith.getAttachmentFiles().length);
 
       attachment = msgWith.getAttachmentFiles()[0];
-      assertEquals("TEST-U~1.DOC", attachment.attachFileName.toString());
-      assertEquals("test-unicode.doc", attachment.attachLongFileName.toString());
-      assertEquals(24064, attachment.attachData.getValue().length);
+      assertEquals("TEST-U~1.DOC", attachment.getAttachFileName().toString());
+      assertEquals("test-unicode.doc", attachment.getAttachLongFileName().toString());
+      assertEquals(24064, attachment.getAttachData().getValue().length);
       
       attachment = msgWith.getAttachmentFiles()[1];
-      assertEquals("pj1.txt", attachment.attachFileName.toString());
-      assertEquals("pj1.txt", attachment.attachLongFileName.toString());
-      assertEquals(89, attachment.attachData.getValue().length);
+      assertEquals("pj1.txt", attachment.getAttachFileName().toString());
+      assertEquals("pj1.txt", attachment.getAttachLongFileName().toString());
+      assertEquals(89, attachment.getAttachData().getValue().length);
       
       // Plus check core details are there
       assertEquals("'nicolas1.23456@free.fr'", msgWith.getDisplayTo());
index 8eca387f0cabd84192ed1363f4aa29f21d2072b9..47017dbf7e0abd6a4c83bc6ea9f19b56f8f1515d 100644 (file)
 
 package org.apache.poi.hwpf.usermodel;
 
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
 import org.apache.poi.OldFileFormatException;
 import org.apache.poi.hwpf.HWPFOldDocument;
 import org.apache.poi.hwpf.HWPFTestCase;
 import org.apache.poi.hwpf.HWPFTestDataSamples;
+import org.junit.Test;
 
 /**
  * Tests for Word 6 and Word 95 support
  */
 public final class TestHWPFOldDocument extends HWPFTestCase {
-   /**
-    * Test a simple Word 6 document
-    */
-   public void testWord6() throws Exception {
-      // Can't open as HWPFDocument
-      try {
-         HWPFTestDataSamples.openSampleFile("Word6.doc");
-         fail("Shouldn't be openable");
-      } catch(OldFileFormatException e) {}
-      
-      // Open
-      HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6.doc");
-      
-      // Check
-      assertEquals(1, doc.getRange().numSections());
-      assertEquals(1, doc.getRange().numParagraphs());
-      assertEquals(1, doc.getRange().numCharacterRuns());
-      
-      assertEquals(
-            "The quick brown fox jumps over the lazy dog\r",
-            doc.getRange().getParagraph(0).text()
-      );
-   }
-   
-   /**
-    * Test a simple Word 95 document
-    */
-   public void testWord95() throws Exception {
-      // Can't open as HWPFDocument
-      try {
-         HWPFTestDataSamples.openSampleFile("Word95.doc");
-         fail("Shouldn't be openable");
-      } catch(OldFileFormatException e) {}
-      
-      // Open
-      HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word95.doc");
-      
-      // Check
-      assertEquals(1, doc.getRange().numSections());
-      assertEquals(7, doc.getRange().numParagraphs());
-      
-      assertEquals(
-            "The quick brown fox jumps over the lazy dog\r",
-            doc.getRange().getParagraph(0).text()
-      );
-      assertEquals("\r", doc.getRange().getParagraph(1).text());
-      assertEquals(
-            "Paragraph 2\r",
-            doc.getRange().getParagraph(2).text()
-      );
-      assertEquals("\r", doc.getRange().getParagraph(3).text());
-      assertEquals(
-            "Paragraph 3. Has some RED text and some " +
-            "BLUE BOLD text in it.\r",
-            doc.getRange().getParagraph(4).text()
-      );
-      assertEquals("\r", doc.getRange().getParagraph(5).text());
-      assertEquals(
-            "Last (4th) paragraph.\r",
-            doc.getRange().getParagraph(6).text()
-      );
-      
-      assertEquals(1, doc.getRange().getParagraph(0).numCharacterRuns());
-      assertEquals(1, doc.getRange().getParagraph(1).numCharacterRuns());
-      assertEquals(1, doc.getRange().getParagraph(2).numCharacterRuns());
-      assertEquals(1, doc.getRange().getParagraph(3).numCharacterRuns());
-      // Normal, red, normal, blue+bold, normal
-      assertEquals(5, doc.getRange().getParagraph(4).numCharacterRuns());
-      assertEquals(1, doc.getRange().getParagraph(5).numCharacterRuns());
-      // Normal, superscript for 4th, normal
-      assertEquals(3, doc.getRange().getParagraph(6).numCharacterRuns());
-   }
-   
-   /**
-    * Test a word document that has sections,
-    *  as well as the usual paragraph stuff.
-    */
-   public void testWord6Sections() throws Exception {
-      HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections.doc");
-      
-      assertEquals(3, doc.getRange().numSections());
-      assertEquals(6, doc.getRange().numParagraphs());
-      
-      assertEquals(
-            "This is a test.\r",
-            doc.getRange().getParagraph(0).text()
-      );
-      assertEquals("\r", doc.getRange().getParagraph(1).text());
-      assertEquals("\u000c", doc.getRange().getParagraph(2).text()); // Section line?
-      assertEquals("This is a new section.\r", doc.getRange().getParagraph(3).text());
-      assertEquals("\u000c", doc.getRange().getParagraph(4).text()); // Section line?
-      assertEquals("\r", doc.getRange().getParagraph(5).text());
-   }
-   
-   /**
-    * Another word document with sections, this time with a 
-    *  few more section properties set on it
-    */
-   public void testWord6Sections2() throws Exception {
-      HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections2.doc");
-      
-      assertEquals(1, doc.getRange().numSections());
-      assertEquals(57, doc.getRange().numParagraphs());
-      
-      assertEquals(
-            "\r",
-            doc.getRange().getParagraph(0).text()
-      );
-      assertEquals(
-            "STATEMENT  OF  INSOLVENCY  PRACTICE  10  (SCOTLAND)\r",
-            doc.getRange().getParagraph(1).text()
-      );
-   }
+    /**
+     * Test a simple Word 6 document
+     */
+    @Test(expected=OldFileFormatException.class)
+    public void testWord6hwpf() throws IOException {
+        // Can't open as HWPFDocument
+        HWPFTestDataSamples.openSampleFile("Word6.doc");
+    }
+    
+    @Test
+    public void testWord6hwpfOld() throws IOException {
+        // Open
+        HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6.doc");
+
+        // Check
+        assertEquals(1, doc.getRange().numSections());
+        assertEquals(1, doc.getRange().numParagraphs());
+        assertEquals(1, doc.getRange().numCharacterRuns());
+
+        assertEquals("The quick brown fox jumps over the lazy dog\r",
+                doc.getRange().getParagraph(0).text());
+        doc.close();
+    }
+
+    
+    
+    /**
+     * Test a simple Word 95 document
+     */
+    @Test(expected=OldFileFormatException.class)
+    public void testWord95hwpf() throws IOException {
+        // Can't open as HWPFDocument
+        HWPFTestDataSamples.openSampleFile("Word95.doc");
+    }
+    
+    @Test
+    public void testWord95hwpfOld() throws IOException {
+        // Open
+        HWPFOldDocument doc = HWPFTestDataSamples
+                .openOldSampleFile("Word95.doc");
+
+        // Check
+        assertEquals(1, doc.getRange().numSections());
+        assertEquals(7, doc.getRange().numParagraphs());
+
+        assertEquals("The quick brown fox jumps over the lazy dog\r",
+                doc.getRange().getParagraph(0).text());
+        assertEquals("\r", doc.getRange().getParagraph(1).text());
+        assertEquals("Paragraph 2\r", doc.getRange().getParagraph(2).text());
+        assertEquals("\r", doc.getRange().getParagraph(3).text());
+        assertEquals(
+                "Paragraph 3. Has some RED text and some "
+                        + "BLUE BOLD text in it.\r",
+                doc.getRange().getParagraph(4).text());
+        assertEquals("\r", doc.getRange().getParagraph(5).text());
+        assertEquals("Last (4th) paragraph.\r",
+                doc.getRange().getParagraph(6).text());
+
+        assertEquals(1, doc.getRange().getParagraph(0).numCharacterRuns());
+        assertEquals(1, doc.getRange().getParagraph(1).numCharacterRuns());
+        assertEquals(1, doc.getRange().getParagraph(2).numCharacterRuns());
+        assertEquals(1, doc.getRange().getParagraph(3).numCharacterRuns());
+        // Normal, red, normal, blue+bold, normal
+        assertEquals(5, doc.getRange().getParagraph(4).numCharacterRuns());
+        assertEquals(1, doc.getRange().getParagraph(5).numCharacterRuns());
+        // Normal, superscript for 4th, normal
+        assertEquals(3, doc.getRange().getParagraph(6).numCharacterRuns());
+        
+        doc.close();
+    }
+
+    /**
+     * Test a word document that has sections, as well as the usual paragraph
+     * stuff.
+     */
+    @Test
+    public void testWord6Sections() throws IOException {
+        HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections.doc");
+
+        assertEquals(3, doc.getRange().numSections());
+        assertEquals(6, doc.getRange().numParagraphs());
+
+        assertEquals("This is a test.\r",
+                doc.getRange().getParagraph(0).text());
+        assertEquals("\r", doc.getRange().getParagraph(1).text());
+        // Section / line?
+        assertEquals("\u000c", doc.getRange().getParagraph(2).text()); 
+        assertEquals("This is a new section.\r",
+                doc.getRange().getParagraph(3).text());
+        // Section / line?
+        assertEquals("\u000c", doc.getRange().getParagraph(4).text());
+        assertEquals("\r", doc.getRange().getParagraph(5).text());
+        doc.close();
+    }
+
+    /**
+     * Another word document with sections, this time with a few more section
+     * properties set on it
+     */
+    @Test
+    public void testWord6Sections2() throws IOException {
+        HWPFOldDocument doc = HWPFTestDataSamples
+                .openOldSampleFile("Word6_sections2.doc");
+
+        assertEquals(1, doc.getRange().numSections());
+        assertEquals(57, doc.getRange().numParagraphs());
+
+        assertEquals("\r", doc.getRange().getParagraph(0).text());
+        assertEquals("STATEMENT  OF  INSOLVENCY  PRACTICE  10  (SCOTLAND)\r",
+                doc.getRange().getParagraph(1).text());
+        doc.close();
+    }
 }
index f829c10cc6d7d3a39749548445e37d6adb214931..76c71bab074afc321f3dc4e87e2e296ac546fdd6 100644 (file)
 
 package org.apache.poi.hwpf.usermodel;
 
-import java.io.*;
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hwpf.HWPFDocument;
@@ -28,131 +36,138 @@ import org.apache.poi.poifs.filesystem.OPOIFSFileSystem;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.TempFile;
+import org.junit.Test;
 
 /**
  * Test various write situations
  */
 public final class TestHWPFWrite extends HWPFTestCase {
-   /**
-    * Write to a stream
-    */
-   public void testWriteStream() throws Exception {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
-
-      Range r = doc.getRange();
-      assertEquals("I am a test document\r", r.getParagraph(0).text());
-      
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      doc.write(baos);
-      doc.close();
-      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-      
-      doc = new HWPFDocument(bais);
-      r = doc.getRange();
-      assertEquals("I am a test document\r", r.getParagraph(0).text());
-      doc.close();
-   }
-   
-   /**
-    * Write to a new file
-    */
-   public void testWriteNewFile() throws Exception {
-       HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
-
-       Range r = doc.getRange();
-       assertEquals("I am a test document\r", r.getParagraph(0).text());
-       
-       File file = TempFile.createTempFile("TestDocument", ".doc");
-       doc.write(file);
-       doc.close();
-
-       // Check reading from File and Stream
-       doc = new HWPFDocument(new FileInputStream(file));
-       r = doc.getRange();
-       assertEquals("I am a test document\r", r.getParagraph(0).text());
-       doc.close();
-       
-       doc = new HWPFDocument(new POIFSFileSystem(file));
-       r = doc.getRange();
-       assertEquals("I am a test document\r", r.getParagraph(0).text());
-       doc.close();
-   }
-   
-   /**
-    * Writing to the file we opened from - note, uses a temp file to
-    *  avoid changing our test files!
-    */
-   @SuppressWarnings("resource")
-   public void testInPlaceWrite() throws Exception {
-       // Setup as a copy of a known-good file
-       final File file = TempFile.createTempFile("TestDocument", ".doc");
-       InputStream inputStream = POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc");
-       try {
-           FileOutputStream outputStream = new FileOutputStream(file);
-           try {
-               IOUtils.copy(inputStream, outputStream);
-           } finally {
-               outputStream.close();
-           }
-       } finally {
-           inputStream.close();
-       }
-
-       // Open from the temp file in read-write mode
-       HWPFDocument doc = new HWPFDocument(new NPOIFSFileSystem(file, false).getRoot());
-       Range r = doc.getRange();
-       assertEquals("I am a test document\r", r.getParagraph(0).text());
-
-       // Change
-       r.replaceText("X XX a test document\r", false);
-
-       // Save in-place, close, re-open and check
-       doc.write();
-       doc.close();
-
-       doc = new HWPFDocument(new NPOIFSFileSystem(file).getRoot());
-       r = doc.getRange();
-       assertEquals("X XX a test document\r", r.getParagraph(0).text());
-       doc.close();
-   }
-
-   @SuppressWarnings("resource")
-   public void testInvalidInPlaceWrite() throws Exception {
-       HWPFDocument doc;
-
-       // Can't work for InputStream opened files
-       doc = new HWPFDocument(
-               POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
-       try {
-           doc.write();
-           fail("Shouldn't work for InputStream");
-       } catch (IllegalStateException e) {
-           // expected here
-       }
-       doc.close();
-
-       // Can't work for OPOIFS
-       OPOIFSFileSystem ofs = new OPOIFSFileSystem(
-               POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
-       doc = new HWPFDocument(ofs.getRoot());
-       try {
-           doc.write();
-           fail("Shouldn't work for OPOIFSFileSystem");
-       } catch (IllegalStateException e) {
-           // expected here
-       }
-       doc.close();
-
-       // Can't work for Read-Only files
-       NPOIFSFileSystem fs = new NPOIFSFileSystem(
-               POIDataSamples.getDocumentInstance().getFile("SampleDoc.doc"), true);
-       doc = new HWPFDocument(fs.getRoot());
-       try {
-           doc.write();
-           fail("Shouldn't work for Read Only");
-       } catch (IllegalStateException e) {
-           // expected here
-       }
-       doc.close();
-   }
+    private static final POIDataSamples SAMPLES = POIDataSamples.getDocumentInstance();
+    
+    /**
+     * Write to a stream
+     */
+    @Test
+    public void testWriteStream() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+        Range r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        doc.write(baos);
+        doc.close();
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+        doc = new HWPFDocument(bais);
+        r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+        doc.close();
+    }
+
+    /**
+     * Write to a new file
+     */
+    @Test
+    public void testWriteNewFile() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+        Range r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+        File file = TempFile.createTempFile("TestDocument", ".doc");
+        doc.write(file);
+        doc.close();
+
+        // Check reading from File and Stream
+        doc = new HWPFDocument(new FileInputStream(file));
+        r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+        doc.close();
+
+        doc = new HWPFDocument(new POIFSFileSystem(file));
+        r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+        doc.close();
+    }
+
+    /**
+     * Writing to the file we opened from - note, uses a temp file to avoid
+     * changing our test files!
+     */
+    @Test
+    public void testInPlaceWrite() throws Exception {
+        // Setup as a copy of a known-good file
+        final File file = TempFile.createTempFile("TestDocument", ".doc");
+        InputStream inputStream = SAMPLES.openResourceAsStream("SampleDoc.doc");
+        try {
+            FileOutputStream outputStream = new FileOutputStream(file);
+            try {
+                IOUtils.copy(inputStream, outputStream);
+            } finally {
+                outputStream.close();
+            }
+        } finally {
+            inputStream.close();
+        }
+
+        // Open from the temp file in read-write mode
+        NPOIFSFileSystem poifs = new NPOIFSFileSystem(file, false);
+        HWPFDocument doc = new HWPFDocument(poifs.getRoot());
+        Range r = doc.getRange();
+        assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+        // Change
+        r.replaceText("X XX a test document\r", false);
+
+        // Save in-place, close, re-open and check
+        doc.write();
+        doc.close();
+        poifs.close();
+
+        poifs = new NPOIFSFileSystem(file);
+        doc = new HWPFDocument(poifs.getRoot());
+        r = doc.getRange();
+        assertEquals("X XX a test document\r", r.getParagraph(0).text());
+        doc.close();
+        poifs.close();
+    }
+
+    @Test(expected=IllegalStateException.class)
+    public void testInvalidInPlaceWriteInputStream() throws IOException {
+        // Can't work for InputStream opened files
+        InputStream is = SAMPLES.openResourceAsStream("SampleDoc.doc");
+        HWPFDocument doc = new HWPFDocument(is);
+        is.close();
+        try {
+            doc.write();
+        } finally {
+            doc.close();
+        }
+    }
+    
+    @Test(expected=IllegalStateException.class)
+    public void testInvalidInPlaceWriteOPOIFS() throws Exception {
+        // Can't work for OPOIFS
+        OPOIFSFileSystem ofs = new OPOIFSFileSystem(SAMPLES.openResourceAsStream("SampleDoc.doc"));
+        HWPFDocument doc = new HWPFDocument(ofs.getRoot());
+        try {
+            doc.write();
+        } finally {
+            doc.close();
+        }
+    }
+
+    @Test(expected=IllegalStateException.class)
+    public void testInvalidInPlaceWriteNPOIFS() throws Exception {
+        // Can't work for Read-Only files
+        NPOIFSFileSystem fs = new NPOIFSFileSystem(SAMPLES.getFile("SampleDoc.doc"), true);
+        HWPFDocument doc = new HWPFDocument(fs.getRoot());
+        try {
+            doc.write();
+        } finally {
+            doc.close();
+            fs.close();
+        }
+    }
 }
index 3623629585d0f16b6b688f4c7a249e932c665fda..3979a442c5802863e6b7f83a1494ed951d7d5e2c 100644 (file)
 
 package org.apache.poi.hwpf.usermodel;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
+import java.io.IOException;
 
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hwpf.HWPFDocument;
@@ -25,394 +28,407 @@ import org.apache.poi.hwpf.HWPFTestCase;
 import org.apache.poi.hwpf.HWPFTestDataSamples;
 import org.apache.poi.hwpf.extractor.WordExtractor;
 import org.apache.poi.hwpf.model.StyleSheet;
+import org.junit.Test;
 
 /**
  * Test various problem documents
- *
- * @author Nick Burch (nick at torchbox dot com)
  */
 public final class TestProblems extends HWPFTestCase {
 
-    
-   /**
-    * ListEntry passed no ListTable
-    */
-   public void testListEntryNoListTable() {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ListEntryNoListTable.doc");
-
-      Range r = doc.getRange();
-      StyleSheet styleSheet = doc.getStyleSheet();
-      for (int x = 0; x < r.numSections(); x++) {
-         Section s = r.getSection(x);
-         for (int y = 0; y < s.numParagraphs(); y++) {
-            Paragraph paragraph = s.getParagraph(y);
-            // System.out.println(paragraph.getCharacterRun(0).text());
-         }
-      }
-   }
-
-   /**
-    * AIOOB for TableSprmUncompressor.unCompressTAPOperation
-    */
-   public void testSprmAIOOB() {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("AIOOB-Tap.doc");
-
-      Range r = doc.getRange();
-      StyleSheet styleSheet = doc.getStyleSheet();
-      for (int x = 0; x < r.numSections(); x++) {
-         Section s = r.getSection(x);
-         for (int y = 0; y < s.numParagraphs(); y++) {
-            Paragraph paragraph = s.getParagraph(y);
-            // System.out.println(paragraph.getCharacterRun(0).text());
-         }
-      }
-   }
-
-   /**
-    * Test for TableCell not skipping the last paragraph. Bugs #45062 and
-    * #44292
-    */
-   public void testTableCellLastParagraph() {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug44292.doc");
-      Range r = doc.getRange();
-      assertEquals(6, r.numParagraphs());
-      assertEquals(0, r.getStartOffset());
-      assertEquals(87, r.getEndOffset());
-
-      // Paragraph with table
-      Paragraph p = r.getParagraph(0);
-      assertEquals(0, p.getStartOffset());
-      assertEquals(20, p.getEndOffset());
-
-      // Check a few bits of the table directly
-      assertEquals("One paragraph is ok\7", r.getParagraph(0).text());
-      assertEquals("First para is ok\r", r.getParagraph(1).text());
-      assertEquals("Second paragraph is skipped\7", r.getParagraph(2).text());
-      assertEquals("One paragraph is ok\7", r.getParagraph(3).text());
-      assertEquals("\7", r.getParagraph(4).text());
-      assertEquals("\r", r.getParagraph(5).text());
-
-      // Get the table
-      Table t = r.getTable(p);
-
-      // get the only row
-      assertEquals(1, t.numRows());
-      TableRow row = t.getRow(0);
-
-      // sanity check our row
-      assertEquals(5, row.numParagraphs());
-      assertEquals(0, row._parStart);
-      assertEquals(5, row._parEnd);
-      assertEquals(0, row.getStartOffset());
-      assertEquals(86, row.getEndOffset());
-
-
-      // get the first cell
-      TableCell cell = row.getCell(0);
-      // First cell should have one paragraph
-      assertEquals(1, cell.numParagraphs());
-      assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
-      assertEquals(0, cell._parStart);
-      assertEquals(1, cell._parEnd);
-      assertEquals(0, cell.getStartOffset());
-      assertEquals(20, cell.getEndOffset());
-
-
-      // get the second
-      cell = row.getCell(1);
-      // Second cell should be detected as having two paragraphs
-      assertEquals(2, cell.numParagraphs());
-      assertEquals("First para is ok\r", cell.getParagraph(0).text());
-      assertEquals("Second paragraph is skipped\7", cell.getParagraph(1).text());
-      assertEquals(1, cell._parStart);
-      assertEquals(3, cell._parEnd);
-      assertEquals(20, cell.getStartOffset());
-      assertEquals(65, cell.getEndOffset());
-
-
-      // get the last cell
-      cell = row.getCell(2);
-      // Last cell should have one paragraph
-      assertEquals(1, cell.numParagraphs());
-      assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
-      assertEquals(3, cell._parStart);
-      assertEquals(4, cell._parEnd);
-      assertEquals(65, cell.getStartOffset());
-      assertEquals(85, cell.getEndOffset());
-   }
-
-   public void testRangeDelete() {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug28627.doc");
-
-      Range range = doc.getRange();
-      int numParagraphs = range.numParagraphs();
-
-      int totalLength = 0, deletedLength = 0;
-
-      for (int i = 0; i < numParagraphs; i++) {
-         Paragraph para = range.getParagraph(i);
-         String text = para.text();
-
-         totalLength += text.length();
-         if (text.indexOf("{delete me}") > -1) {
-            para.delete();
-            deletedLength = text.length();
-         }
-      }
-
-      // check the text length after deletion
-      int newLength = 0;
-      range = doc.getRange();
-      numParagraphs = range.numParagraphs();
-
-      for (int i = 0; i < numParagraphs; i++) {
-         Paragraph para = range.getParagraph(i);
-         String text = para.text();
-
-         newLength += text.length();
-      }
-
-      assertEquals(newLength, totalLength - deletedLength);
-   }
-
-   /**
-    * With an encrypted file, we should give a suitable exception, and not OOM
-    */
-   public void testEncryptedFile() {
-      try {
-         HWPFTestDataSamples.openSampleFile("PasswordProtected.doc");
-         fail();
-      } catch (EncryptedDocumentException e) {
-         // Good
-      }
-   }
-
-   public void testWriteProperties() {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
-      assertEquals("Nick Burch", doc.getSummaryInformation().getAuthor());
-
-      // Write and read
-      HWPFDocument doc2 = writeOutAndRead(doc);
-      assertEquals("Nick Burch", doc2.getSummaryInformation().getAuthor());
-   }
-
-   /**
-    * Test for reading paragraphs from Range after replacing some 
-    * text in this Range.
-    * Bug #45269
-    */
-   public void testReadParagraphsAfterReplaceText()throws Exception{
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
-      Range range = doc.getRange();
-
-      String toFind = "campo1";
-      String longer = " foi porraaaaa ";
-      String shorter = " foi ";
-
-      //check replace with longer text
-      for (int x = 0; x < range.numParagraphs(); x++) {
-         Paragraph para = range.getParagraph(x);
-         int offset = para.text().indexOf(toFind);
-         if (offset >= 0) {
-            para.replaceText(toFind, longer, offset);
-            assertEquals(offset, para.text().indexOf(longer));
-         }
-      }
-
-      doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
-      range = doc.getRange();
-
-      //check replace with shorter text
-      for (int x = 0; x < range.numParagraphs(); x++) {
-         Paragraph para = range.getParagraph(x);
-         int offset = para.text().indexOf(toFind);
-         if (offset >= 0) {
-            para.replaceText(toFind, shorter, offset);
-            assertEquals(offset, para.text().indexOf(shorter));
-         }
-      }
-   }
-   
-   /**
-    * Bug #49936 - Problems with reading the header out of
-    *  the Header Stories
-    */
-   public void testProblemHeaderStories49936() throws Exception {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("HeaderFooterProblematic.doc");
-      HeaderStories hs = new HeaderStories(doc);
-      
-      assertEquals("", hs.getFirstHeader());
-      assertEquals("\r", hs.getEvenHeader());
-      assertEquals("", hs.getOddHeader());
-      
-      assertEquals("", hs.getFirstFooter());
-      assertEquals("", hs.getEvenFooter());
-      assertEquals("", hs.getOddFooter());
-      
-      WordExtractor ext = new WordExtractor(doc);
-      assertEquals("\n", ext.getHeaderText());
-      assertEquals("", ext.getFooterText());
-   }
-   
-   /**
-    * Bug #45877 - problematic PAPX with no parent set
-    */
-   public void testParagraphPAPXNoParent45877() throws Exception {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45877.doc");
-      assertEquals(17, doc.getRange().numParagraphs());
-      
-      assertEquals("First paragraph\r", doc.getRange().getParagraph(0).text());
-      assertEquals("After Crashing Part\r", doc.getRange().getParagraph(13).text());
-   }
-
-   /**
-    * Bug #48245 - don't include the text from the
-    *  next cell in the current one
-    */
-   public void testTableIterator() throws Exception {
-      HWPFDocument doc = HWPFTestDataSamples.openSampleFile("simple-table2.doc");
-      Range r = doc.getRange();
-
-      // Check the text is as we'd expect
-      assertEquals(13, r.numParagraphs());
-      assertEquals("Row 1/Cell 1\u0007", r.getParagraph(0).text());
-      assertEquals("Row 1/Cell 2\u0007", r.getParagraph(1).text());
-      assertEquals("Row 1/Cell 3\u0007", r.getParagraph(2).text());
-      assertEquals("\u0007", r.getParagraph(3).text());
-      assertEquals("Row 2/Cell 1\u0007", r.getParagraph(4).text());
-      assertEquals("Row 2/Cell 2\u0007", r.getParagraph(5).text());
-      assertEquals("Row 2/Cell 3\u0007", r.getParagraph(6).text());
-      assertEquals("\u0007", r.getParagraph(7).text());
-      assertEquals("Row 3/Cell 1\u0007", r.getParagraph(8).text());
-      assertEquals("Row 3/Cell 2\u0007", r.getParagraph(9).text());
-      assertEquals("Row 3/Cell 3\u0007", r.getParagraph(10).text());
-      assertEquals("\u0007", r.getParagraph(11).text());
-      assertEquals("\r", r.getParagraph(12).text());
-
-      Paragraph p;
-
-      // Take a look in detail at the first couple of
-      //  paragraphs
-      p = r.getParagraph(0);
-      assertEquals(1,  p.numParagraphs());
-      assertEquals(0,  p.getStartOffset());
-      assertEquals(13, p.getEndOffset());
-      assertEquals(0,  p._parStart);
-      assertEquals(1,  p._parEnd);
-
-      p = r.getParagraph(1);
-      assertEquals(1,  p.numParagraphs());
-      assertEquals(13, p.getStartOffset());
-      assertEquals(26, p.getEndOffset());
-      assertEquals(1,  p._parStart);
-      assertEquals(2,  p._parEnd);
-
-      p = r.getParagraph(2);
-      assertEquals(1,  p.numParagraphs());
-      assertEquals(26, p.getStartOffset());
-      assertEquals(39, p.getEndOffset());
-      assertEquals(2,  p._parStart);
-      assertEquals(3,  p._parEnd);
-
-
-      // Now look at the table
-      Table table = r.getTable(r.getParagraph(0));
-      assertEquals(3, table.numRows());
-
-      TableRow row;
-      TableCell cell;
-
-
-      row = table.getRow(0);
-      assertEquals(0, row._parStart);
-      assertEquals(4, row._parEnd);
-
-      cell = row.getCell(0);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(0, cell._parStart);
-      assertEquals(1, cell._parEnd);
-      assertEquals(0, cell.getStartOffset());
-      assertEquals(13, cell.getEndOffset());
-      assertEquals("Row 1/Cell 1\u0007", cell.text());
-      assertEquals("Row 1/Cell 1\u0007", cell.getParagraph(0).text());
-
-      cell = row.getCell(1);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(1, cell._parStart);
-      assertEquals(2, cell._parEnd);
-      assertEquals(13, cell.getStartOffset());
-      assertEquals(26, cell.getEndOffset());
-      assertEquals("Row 1/Cell 2\u0007", cell.text());
-      assertEquals("Row 1/Cell 2\u0007", cell.getParagraph(0).text());
-
-      cell = row.getCell(2);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(2, cell._parStart);
-      assertEquals(3, cell._parEnd);
-      assertEquals(26, cell.getStartOffset());
-      assertEquals(39, cell.getEndOffset());
-      assertEquals("Row 1/Cell 3\u0007", cell.text());
-      assertEquals("Row 1/Cell 3\u0007", cell.getParagraph(0).text());
-
-
-      // Onto row #2
-      row = table.getRow(1);
-      assertEquals(4, row._parStart);
-      assertEquals(8, row._parEnd);
-
-      cell = row.getCell(0);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(4, cell._parStart);
-      assertEquals(5, cell._parEnd);
-      assertEquals(40, cell.getStartOffset());
-      assertEquals(53, cell.getEndOffset());
-      assertEquals("Row 2/Cell 1\u0007", cell.text());
-
-      cell = row.getCell(1);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(5, cell._parStart);
-      assertEquals(6, cell._parEnd);
-      assertEquals(53, cell.getStartOffset());
-      assertEquals(66, cell.getEndOffset());
-      assertEquals("Row 2/Cell 2\u0007", cell.text());
-
-      cell = row.getCell(2);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(6, cell._parStart);
-      assertEquals(7, cell._parEnd);
-      assertEquals(66, cell.getStartOffset());
-      assertEquals(79, cell.getEndOffset());
-      assertEquals("Row 2/Cell 3\u0007", cell.text());
-
-
-      // Finally row 3
-      row = table.getRow(2);
-      assertEquals(8, row._parStart);
-      assertEquals(12, row._parEnd);
-
-      cell = row.getCell(0);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(8, cell._parStart);
-      assertEquals(9, cell._parEnd);
-      assertEquals(80, cell.getStartOffset());
-      assertEquals(93, cell.getEndOffset());
-      assertEquals("Row 3/Cell 1\u0007", cell.text());
-
-      cell = row.getCell(1);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(9, cell._parStart);
-      assertEquals(10, cell._parEnd);
-      assertEquals(93, cell.getStartOffset());
-      assertEquals(106, cell.getEndOffset());
-      assertEquals("Row 3/Cell 2\u0007", cell.text());
-
-      cell = row.getCell(2);
-      assertEquals(1, cell.numParagraphs());
-      assertEquals(10, cell._parStart);
-      assertEquals(11, cell._parEnd);
-      assertEquals(106, cell.getStartOffset());
-      assertEquals(119, cell.getEndOffset());
-      assertEquals("Row 3/Cell 3\u0007", cell.text());
-   }
-
+    /**
+     * ListEntry passed no ListTable
+     */
+    @Test
+    public void testListEntryNoListTable() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ListEntryNoListTable.doc");
+
+        Range r = doc.getRange();
+        for (int x = 0; x < r.numSections(); x++) {
+            Section s = r.getSection(x);
+            for (int y = 0; y < s.numParagraphs(); y++) {
+                s.getParagraph(y);
+            }
+        }
+        
+        doc.close();
+    }
+
+    /**
+     * AIOOB for TableSprmUncompressor.unCompressTAPOperation
+     */
+    @Test
+    public void testSprmAIOOB() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("AIOOB-Tap.doc");
+
+        StyleSheet styleSheet = doc.getStyleSheet();
+        assertNotNull(styleSheet);
+        
+        Range r = doc.getRange();
+        for (int x = 0; x < r.numSections(); x++) {
+            Section s = r.getSection(x);
+            for (int y = 0; y < s.numParagraphs(); y++) {
+                Paragraph paragraph = s.getParagraph(y);
+                assertNotNull(paragraph);
+            }
+        }
+        doc.close();
+    }
+
+    /**
+     * Test for TableCell not skipping the last paragraph. Bugs #45062 and
+     * #44292
+     */
+    @Test
+    public void testTableCellLastParagraph() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug44292.doc");
+        Range r = doc.getRange();
+        assertEquals(6, r.numParagraphs());
+        assertEquals(0, r.getStartOffset());
+        assertEquals(87, r.getEndOffset());
+
+        // Paragraph with table
+        Paragraph p = r.getParagraph(0);
+        assertEquals(0, p.getStartOffset());
+        assertEquals(20, p.getEndOffset());
+
+        // Check a few bits of the table directly
+        assertEquals("One paragraph is ok\7", r.getParagraph(0).text());
+        assertEquals("First para is ok\r", r.getParagraph(1).text());
+        assertEquals("Second paragraph is skipped\7", r.getParagraph(2).text());
+        assertEquals("One paragraph is ok\7", r.getParagraph(3).text());
+        assertEquals("\7", r.getParagraph(4).text());
+        assertEquals("\r", r.getParagraph(5).text());
+
+        // Get the table
+        Table t = r.getTable(p);
+
+        // get the only row
+        assertEquals(1, t.numRows());
+        TableRow row = t.getRow(0);
+
+        // sanity check our row
+        assertEquals(5, row.numParagraphs());
+        assertEquals(0, row._parStart);
+        assertEquals(5, row._parEnd);
+        assertEquals(0, row.getStartOffset());
+        assertEquals(86, row.getEndOffset());
+
+        // get the first cell
+        TableCell cell = row.getCell(0);
+        // First cell should have one paragraph
+        assertEquals(1, cell.numParagraphs());
+        assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
+        assertEquals(0, cell._parStart);
+        assertEquals(1, cell._parEnd);
+        assertEquals(0, cell.getStartOffset());
+        assertEquals(20, cell.getEndOffset());
+
+        // get the second
+        cell = row.getCell(1);
+        // Second cell should be detected as having two paragraphs
+        assertEquals(2, cell.numParagraphs());
+        assertEquals("First para is ok\r", cell.getParagraph(0).text());
+        assertEquals("Second paragraph is skipped\7",
+                cell.getParagraph(1).text());
+        assertEquals(1, cell._parStart);
+        assertEquals(3, cell._parEnd);
+        assertEquals(20, cell.getStartOffset());
+        assertEquals(65, cell.getEndOffset());
+
+        // get the last cell
+        cell = row.getCell(2);
+        // Last cell should have one paragraph
+        assertEquals(1, cell.numParagraphs());
+        assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
+        assertEquals(3, cell._parStart);
+        assertEquals(4, cell._parEnd);
+        assertEquals(65, cell.getStartOffset());
+        assertEquals(85, cell.getEndOffset());
+        
+        doc.close();
+    }
+
+    @Test
+    public void testRangeDelete() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug28627.doc");
+
+        Range range = doc.getRange();
+        int numParagraphs = range.numParagraphs();
+
+        int totalLength = 0, deletedLength = 0;
+
+        for (int i = 0; i < numParagraphs; i++) {
+            Paragraph para = range.getParagraph(i);
+            String text = para.text();
+
+            totalLength += text.length();
+            if (text.indexOf("{delete me}") > -1) {
+                para.delete();
+                deletedLength = text.length();
+            }
+        }
+
+        // check the text length after deletion
+        int newLength = 0;
+        range = doc.getRange();
+        numParagraphs = range.numParagraphs();
+
+        for (int i = 0; i < numParagraphs; i++) {
+            Paragraph para = range.getParagraph(i);
+            String text = para.text();
+
+            newLength += text.length();
+        }
+
+        assertEquals(newLength, totalLength - deletedLength);
+        
+        doc.close();
+    }
+
+    /**
+     * With an encrypted file, we should give a suitable exception, and not OOM
+     */
+    @Test(expected=EncryptedDocumentException.class)
+    public void testEncryptedFile() throws IOException {
+        HWPFTestDataSamples.openSampleFile("PasswordProtected.doc");
+    }
+
+    @Test
+    public void testWriteProperties() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+        assertEquals("Nick Burch", doc.getSummaryInformation().getAuthor());
+
+        // Write and read
+        HWPFDocument doc2 = writeOutAndRead(doc);
+        assertEquals("Nick Burch", doc2.getSummaryInformation().getAuthor());
+        doc2.close();
+        doc.close();
+    }
+
+    /**
+     * Test for reading paragraphs from Range after replacing some text in this
+     * Range. Bug #45269
+     */
+    @Test
+    public void testReadParagraphsAfterReplaceText() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
+        Range range = doc.getRange();
+
+        String toFind = "campo1";
+        String longer = " foi porraaaaa ";
+        String shorter = " foi ";
+
+        // check replace with longer text
+        for (int x = 0; x < range.numParagraphs(); x++) {
+            Paragraph para = range.getParagraph(x);
+            int offset = para.text().indexOf(toFind);
+            if (offset >= 0) {
+                para.replaceText(toFind, longer, offset);
+                assertEquals(offset, para.text().indexOf(longer));
+            }
+        }
+
+        doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
+        range = doc.getRange();
+
+        // check replace with shorter text
+        for (int x = 0; x < range.numParagraphs(); x++) {
+            Paragraph para = range.getParagraph(x);
+            int offset = para.text().indexOf(toFind);
+            if (offset >= 0) {
+                para.replaceText(toFind, shorter, offset);
+                assertEquals(offset, para.text().indexOf(shorter));
+            }
+        }
+        
+        doc.close();
+    }
+
+    /**
+     * Bug #49936 - Problems with reading the header out of the Header Stories
+     */
+    @SuppressWarnings("deprecation")
+    @Test
+    public void testProblemHeaderStories49936() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("HeaderFooterProblematic.doc");
+        HeaderStories hs = new HeaderStories(doc);
+
+        assertEquals("", hs.getFirstHeader());
+        assertEquals("\r", hs.getEvenHeader());
+        assertEquals("", hs.getOddHeader());
+
+        assertEquals("", hs.getFirstFooter());
+        assertEquals("", hs.getEvenFooter());
+        assertEquals("", hs.getOddFooter());
+
+        WordExtractor ext = new WordExtractor(doc);
+        assertEquals("\n", ext.getHeaderText());
+        assertEquals("", ext.getFooterText());
+        ext.close();
+        doc.close();
+    }
+
+    /**
+     * Bug #45877 - problematic PAPX with no parent set
+     */
+    @Test
+    public void testParagraphPAPXNoParent45877() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45877.doc");
+        assertEquals(17, doc.getRange().numParagraphs());
+
+        assertEquals("First paragraph\r",
+                doc.getRange().getParagraph(0).text());
+        assertEquals("After Crashing Part\r",
+                doc.getRange().getParagraph(13).text());
+        
+        doc.close();
+    }
+
+    /**
+     * Bug #48245 - don't include the text from the next cell in the current one
+     */
+    @Test
+    public void testTableIterator() throws IOException {
+        HWPFDocument doc = HWPFTestDataSamples.openSampleFile("simple-table2.doc");
+        Range r = doc.getRange();
+
+        // Check the text is as we'd expect
+        assertEquals(13, r.numParagraphs());
+        assertEquals("Row 1/Cell 1\u0007", r.getParagraph(0).text());
+        assertEquals("Row 1/Cell 2\u0007", r.getParagraph(1).text());
+        assertEquals("Row 1/Cell 3\u0007", r.getParagraph(2).text());
+        assertEquals("\u0007", r.getParagraph(3).text());
+        assertEquals("Row 2/Cell 1\u0007", r.getParagraph(4).text());
+        assertEquals("Row 2/Cell 2\u0007", r.getParagraph(5).text());
+        assertEquals("Row 2/Cell 3\u0007", r.getParagraph(6).text());
+        assertEquals("\u0007", r.getParagraph(7).text());
+        assertEquals("Row 3/Cell 1\u0007", r.getParagraph(8).text());
+        assertEquals("Row 3/Cell 2\u0007", r.getParagraph(9).text());
+        assertEquals("Row 3/Cell 3\u0007", r.getParagraph(10).text());
+        assertEquals("\u0007", r.getParagraph(11).text());
+        assertEquals("\r", r.getParagraph(12).text());
+
+        Paragraph p;
+
+        // Take a look in detail at the first couple of
+        // paragraphs
+        p = r.getParagraph(0);
+        assertEquals(1, p.numParagraphs());
+        assertEquals(0, p.getStartOffset());
+        assertEquals(13, p.getEndOffset());
+        assertEquals(0, p._parStart);
+        assertEquals(1, p._parEnd);
+
+        p = r.getParagraph(1);
+        assertEquals(1, p.numParagraphs());
+        assertEquals(13, p.getStartOffset());
+        assertEquals(26, p.getEndOffset());
+        assertEquals(1, p._parStart);
+        assertEquals(2, p._parEnd);
+
+        p = r.getParagraph(2);
+        assertEquals(1, p.numParagraphs());
+        assertEquals(26, p.getStartOffset());
+        assertEquals(39, p.getEndOffset());
+        assertEquals(2, p._parStart);
+        assertEquals(3, p._parEnd);
+
+        // Now look at the table
+        Table table = r.getTable(r.getParagraph(0));
+        assertEquals(3, table.numRows());
+
+        TableRow row;
+        TableCell cell;
+
+        row = table.getRow(0);
+        assertEquals(0, row._parStart);
+        assertEquals(4, row._parEnd);
+
+        cell = row.getCell(0);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(0, cell._parStart);
+        assertEquals(1, cell._parEnd);
+        assertEquals(0, cell.getStartOffset());
+        assertEquals(13, cell.getEndOffset());
+        assertEquals("Row 1/Cell 1\u0007", cell.text());
+        assertEquals("Row 1/Cell 1\u0007", cell.getParagraph(0).text());
+
+        cell = row.getCell(1);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(1, cell._parStart);
+        assertEquals(2, cell._parEnd);
+        assertEquals(13, cell.getStartOffset());
+        assertEquals(26, cell.getEndOffset());
+        assertEquals("Row 1/Cell 2\u0007", cell.text());
+        assertEquals("Row 1/Cell 2\u0007", cell.getParagraph(0).text());
+
+        cell = row.getCell(2);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(2, cell._parStart);
+        assertEquals(3, cell._parEnd);
+        assertEquals(26, cell.getStartOffset());
+        assertEquals(39, cell.getEndOffset());
+        assertEquals("Row 1/Cell 3\u0007", cell.text());
+        assertEquals("Row 1/Cell 3\u0007", cell.getParagraph(0).text());
+
+        // Onto row #2
+        row = table.getRow(1);
+        assertEquals(4, row._parStart);
+        assertEquals(8, row._parEnd);
+
+        cell = row.getCell(0);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(4, cell._parStart);
+        assertEquals(5, cell._parEnd);
+        assertEquals(40, cell.getStartOffset());
+        assertEquals(53, cell.getEndOffset());
+        assertEquals("Row 2/Cell 1\u0007", cell.text());
+
+        cell = row.getCell(1);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(5, cell._parStart);
+        assertEquals(6, cell._parEnd);
+        assertEquals(53, cell.getStartOffset());
+        assertEquals(66, cell.getEndOffset());
+        assertEquals("Row 2/Cell 2\u0007", cell.text());
+
+        cell = row.getCell(2);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(6, cell._parStart);
+        assertEquals(7, cell._parEnd);
+        assertEquals(66, cell.getStartOffset());
+        assertEquals(79, cell.getEndOffset());
+        assertEquals("Row 2/Cell 3\u0007", cell.text());
+
+        // Finally row 3
+        row = table.getRow(2);
+        assertEquals(8, row._parStart);
+        assertEquals(12, row._parEnd);
+
+        cell = row.getCell(0);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(8, cell._parStart);
+        assertEquals(9, cell._parEnd);
+        assertEquals(80, cell.getStartOffset());
+        assertEquals(93, cell.getEndOffset());
+        assertEquals("Row 3/Cell 1\u0007", cell.text());
+
+        cell = row.getCell(1);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(9, cell._parStart);
+        assertEquals(10, cell._parEnd);
+        assertEquals(93, cell.getStartOffset());
+        assertEquals(106, cell.getEndOffset());
+        assertEquals("Row 3/Cell 2\u0007", cell.text());
+
+        cell = row.getCell(2);
+        assertEquals(1, cell.numParagraphs());
+        assertEquals(10, cell._parStart);
+        assertEquals(11, cell._parEnd);
+        assertEquals(106, cell.getStartOffset());
+        assertEquals(119, cell.getEndOffset());
+        assertEquals("Row 3/Cell 3\u0007", cell.text());
+        
+        doc.close();
+    }
 }