From beabf33a8463174b6209c4405f461ef46e8e1aef Mon Sep 17 00:00:00 2001
From: Sergey Vladimirov <sergey@apache.org>
Date: Thu, 7 Jul 2011 13:13:04 +0000
Subject: [PATCH] already fixed 48065 - Problems with save output of HWPF
 (losing formatting)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1143809 13f79535-47bb-0310-9956-ffa450edef68
---
 src/documentation/content/xdocs/status.xml    |   1 +
 .../poi/hwpf/usermodel/TestProblems.java      |  47 ++++++++++++++++++
 test-data/document/Bug48065.doc               | Bin 0 -> 28160 bytes
 3 files changed, 48 insertions(+)
 create mode 100644 test-data/document/Bug48065.doc

diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
index 650689862..175ed9c17 100644
--- a/src/documentation/content/xdocs/status.xml
+++ b/src/documentation/content/xdocs/status.xml
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta4" date="2011-??-??">
+           <action dev="poi-developers" type="fix">48065 - Problems with save output of HWPF (losing formatting)</action>
            <action dev="poi-developers" type="fix">47563 - Exception when working with table</action>
            <action dev="poi-developers" type="fix">47287 - StringIndexOutOfBoundsException in CharacterRun.replaceText()</action>
            <action dev="poi-developers" type="fix">46817 - Regression: Text from some table cells missing</action>
diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
index f0664b3b0..38fba59fd 100644
--- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
+++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java
@@ -691,6 +691,53 @@ public final class TestProblems extends HWPFTestCase {
         }
     }
 
+    /**
+     * [RESOLVED FIXED] Bug 48065 - Problems with save output of HWPF (losing
+     * formatting)
+     */
+    public void test48065()
+    {
+        HWPFDocument doc1 = HWPFTestDataSamples.openSampleFile( "Bug48065.doc" );
+        HWPFDocument doc2 = HWPFTestDataSamples.writeOutAndReadBack( doc1 );
+
+        Range expected = doc1.getRange();
+        Range actual = doc2.getRange();
+
+        assertEquals(
+                expected.text().replace( "\r", "\n" ).replaceAll( "\n\n", "\n" ),
+                actual.text().replace( "\r", "\n" ).replaceAll( "\n\n", "\n" ) );
+
+        assertEquals( expected.numParagraphs(), actual.numParagraphs() );
+        for ( int p = 0; p < expected.numParagraphs(); p++ )
+        {
+            Paragraph expParagraph = expected.getParagraph( p );
+            Paragraph actParagraph = actual.getParagraph( p );
+
+            assertEquals( expParagraph.text(), actParagraph.text() );
+            assertEquals( expParagraph.isInTable(), actParagraph.isInTable() );
+            assertEquals( expParagraph.isTableRowEnd(),
+                    actParagraph.isTableRowEnd() );
+
+            if ( expParagraph.isInTable() && actParagraph.isInTable() )
+            {
+                Table expTable, actTable;
+                try
+                {
+                    expTable = expected.getTable( expParagraph );
+                    actTable = actual.getTable( actParagraph );
+                }
+                catch ( Exception exc )
+                {
+                    continue;
+                }
+
+                assertEquals( expTable.numRows(), actTable.numRows() );
+                assertEquals( expTable.numParagraphs(),
+                        actTable.numParagraphs() );
+            }
+        }
+    }
+
     /**
      * Bug 50936  - HWPF fails to read a file
      */
diff --git a/test-data/document/Bug48065.doc b/test-data/document/Bug48065.doc
new file mode 100644
index 0000000000000000000000000000000000000000..8dce3dbdfb75810edf05cae074ef49eb1d0499ba
GIT binary patch
literal 28160
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

literal 0
HcmV?d00001