]> source.dussan.org Git - poi.git/commitdiff
Patch from Tim Allison from bug #55142 - Not all XWPF SDT block
authorNick Burch <nick@apache.org>
Tue, 25 Jun 2013 13:09:08 +0000 (13:09 +0000)
committerNick Burch <nick@apache.org>
Tue, 25 Jun 2013 13:09:08 +0000 (13:09 +0000)
s need newlines

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1496458 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java
test-data/document/Bug55142.docx [new file with mode: 0644]

index 39b385396763ac1f3a97c47f6ee3b13e61b84e7d..de12a921648897c94deaada644cf0fe906af937f 100644 (file)
@@ -83,18 +83,23 @@ public class XWPFSDTContent  {
 
     public String getText(){
         StringBuilder text = new StringBuilder();
+        boolean addNewLine = false;
         for (int i = 0; i < bodyElements.size(); i++){
             Object o = bodyElements.get(i);
             if (o instanceof XWPFParagraph){
                 text.append(((XWPFParagraph)o).getText());
+                addNewLine = true;
             } else if (o instanceof XWPFTable){
                 text.append(((XWPFTable)o).getText());
+                addNewLine = true;
             } else if (o instanceof XWPFSDT){
                 text.append(((XWPFSDT)o).getContent().getText());
+                addNewLine = true;
             } else if (o instanceof XWPFRun){
                 text.append(((XWPFRun)o).toString());
+                addNewLine = false;
             }
-            if (i < bodyElements.size()-1){
+            if (addNewLine == true && i < bodyElements.size()-1){
                 text.append("\n");
             }
         }
index 2359beac2e46f100d64799d4c9dbadc2fde2e8e6..f1a585567b9c472cdc1eb0457734ce37ecf380ca 100644 (file)
@@ -93,6 +93,31 @@ public final class TestXWPFSDT extends TestCase {
         }
         assertEquals("SDT as cell known failure", false, found);
     }
+    
+    /**
+     * POI-55142 and Tika 1130
+     */
+    public void testNewLinesBetweenRuns() throws Exception{
+       XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Bug55142.docx");
+       List<XWPFSDT> sdts = extractAllSDTs(doc);
+       List<String> targs = new ArrayList<String>();
+       //these test newlines and tabs in paragraphs/body elements
+       targs.add("Rich-text1 abcdefghi");
+       targs.add("Rich-text2 abcd\t\tefgh");
+       targs.add("Rich-text3 abcd\nefg");
+       targs.add("Rich-text4 abcdefg");
+       targs.add("Rich-text5 abcdefg\nhijk");
+       targs.add("Plain-text1 abcdefg");
+       targs.add("Plain-text2 abcdefg\nhijk\nlmnop");
+       //this tests consecutive runs within a cell (not a paragraph)
+       //this test case was triggered by Tika-1130
+       targs.add("sdt_incell2 abcdefg");
+       
+       for (int i = 0; i < sdts.size(); i++){
+          XWPFSDT sdt = sdts.get(i);
+          assertEquals(targs.get(i), targs.get(i), sdt.getContent().getText());
+       }
+    }
 
     private List<XWPFSDT> extractAllSDTs(XWPFDocument doc){
 
diff --git a/test-data/document/Bug55142.docx b/test-data/document/Bug55142.docx
new file mode 100644 (file)
index 0000000..1ae2ada
Binary files /dev/null and b/test-data/document/Bug55142.docx differ