poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kiwiwi...@apache.org
Subject svn commit: r1773910 [2/2] - in /poi/trunk/src: examples/src/org/apache/poi/hslf/examples/ examples/src/org/apache/poi/hsmf/examples/ examples/src/org/apache/poi/xwpf/usermodel/examples/ integrationtest/org/apache/poi/stress/ java/org/apache/poi/ java/...
Date Tue, 13 Dec 2016 00:36:03 GMT
Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java?rev=1773910&r1=1773909&r2=1773910&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java Tue
Dec 13 00:36:03 2016
@@ -17,7 +17,10 @@
 
 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();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message