Fixed a bug leading to the content of row-spanning cells being duplicated at page breaks, when it's small enough to fit on the previous row


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@629169 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java b/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
index d89f433..c4bff51 100644
--- a/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
+++ b/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
@@ -290,12 +290,14 @@
      * @see #signalRowLastStep(int)
      */
     private void increaseCurrentStep(int limit) {
-        while (afterNextStep.totalLength <= limit && nextStep.breakClass == Constants.EN_AUTO) {
-            nextStep.set(afterNextStep);
-            if (afterNextStep.end >= elementList.size() - 1) {
-                break;
+        if (nextStep.end < elementList.size() - 1) {
+            while (afterNextStep.totalLength <= limit && nextStep.breakClass == Constants.EN_AUTO) {
+                nextStep.set(afterNextStep);
+                if (afterNextStep.end >= elementList.size() - 1) {
+                    break;
+                }
+                gotoNextLegalBreak();
             }
-            gotoNextLegalBreak();
         }
     }
 
diff --git a/test/layoutengine/standard-testcases/table_row-delay.xml b/test/layoutengine/standard-testcases/table_row-delay.xml
index a5d88cf..b3b962d 100644
--- a/test/layoutengine/standard-testcases/table_row-delay.xml
+++ b/test/layoutengine/standard-testcases/table_row-delay.xml
@@ -231,6 +231,40 @@
         </fo:flow>
       </fo:page-sequence>
 
+      <!-- table 5 -->
+      <fo:page-sequence master-reference="page">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block
+            space-after.minimum="175pt"
+            space-after.optimum="180pt"
+            space-after.maximum="185pt">5. Before the table.</fo:block>
+          <fo:table width="100%" table-layout="fixed"
+            border-collapse="separate" border="4pt solid black"
+            font-size="8pt" line-height="10pt">
+            <fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell border="2pt solid blue">
+                  <fo:block>Cell 1.1 Line 1</fo:block>
+                  <fo:block>Cell 1.1 Line 2</fo:block>
+                </fo:table-cell>
+                <fo:table-cell border="2pt solid teal" number-rows-spanned="2">
+                  <fo:block>Cell 1.2 Line 1</fo:block>
+                  <fo:block>Cell 1.2 Line 2</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell border="2pt solid green">
+                  <fo:block>Cell 2.1 Line 1</fo:block>
+                  <fo:block>Cell 2.1 Line 2</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+
+
     </fo:root>
   </fo>
   <checks>
@@ -433,5 +467,43 @@
     <eval expected="(solid,#000000,2000,collapse-outer)" xpath="//pageViewport[@nr='8']//flow/block[1]/block[4]/@border-after"/>
     <eval expected="5"                             xpath="count(//pageViewport[@nr='8']//flow/block[1]/block[5]/block)"/>
 
+    <!-- table 5 -->
+    <!-- page 1 -->
+    <eval expected="24000"                xpath="//pageViewport[@nr='9']//flow/block[2]/@bpd"/>
+    <eval expected="28000"                xpath="//pageViewport[@nr='9']//flow/block[2]/@bpda"/>
+    <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr='9']//flow/block[2]/@border-before"/>
+    <eval expected=""                     xpath="//pageViewport[@nr='9']//flow/block[2]/@border-after"/>
+    <!-- cell 1.1 -->
+    <eval expected="20000"                xpath="//pageViewport[@nr='9']//flow/block[2]/block[1]/@bpd"/>
+    <eval expected="24000"                xpath="//pageViewport[@nr='9']//flow/block[2]/block[1]/@bpda"/>
+    <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr='9']//flow/block[2]/block[1]/@border-before"/>
+    <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr='9']//flow/block[2]/block[1]/@border-after"/>
+    <eval expected="2"               xpath="count(//pageViewport[@nr='9']//flow/block[2]/block[1]/block)"/>
+    <!-- cell 1.2 -->
+    <eval expected="22000"                xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/@bpd"/>
+    <eval expected="24000"                xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/@bpda"/>
+    <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/@border-before"/>
+    <eval expected=""                     xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/@border-after"/>
+    <eval expected="2"               xpath="count(//pageViewport[@nr='9']//flow/block[2]/block[2]/block)"/>
+    <eval expected="Cell 1.2 Line 1"      xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/block[1]/lineArea"/>
+    <eval expected="Cell 1.2 Line 2"      xpath="//pageViewport[@nr='9']//flow/block[2]/block[2]/block[2]/lineArea"/>
+    <!-- page 2 -->
+    <eval expected="24000"                xpath="//pageViewport[@nr='10']//flow/block[1]/@bpd"/>
+    <eval expected="28000"                xpath="//pageViewport[@nr='10']//flow/block[1]/@bpda"/>
+    <eval expected=""                     xpath="//pageViewport[@nr='10']//flow/block[1]/@border-before"/>
+    <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr='10']//flow/block[1]/@border-after"/>
+    <!-- cell 2.1 -->
+    <eval expected="20000"                xpath="//pageViewport[@nr='10']//flow/block[1]/block[1]/@bpd"/>
+    <eval expected="24000"                xpath="//pageViewport[@nr='10']//flow/block[1]/block[1]/@bpda"/>
+    <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr='10']//flow/block[1]/block[1]/@border-before"/>
+    <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr='10']//flow/block[1]/block[1]/@border-after"/>
+    <eval expected="2"               xpath="count(//pageViewport[@nr='10']//flow/block[1]/block[1]/block)"/>
+    <!-- cell 1.2 -->
+    <eval expected="22000"                xpath="//pageViewport[@nr='10']//flow/block[1]/block[2]/@bpd"/>
+    <eval expected="24000"                xpath="//pageViewport[@nr='10']//flow/block[1]/block[2]/@bpda"/>
+    <eval expected=""                     xpath="//pageViewport[@nr='10']//flow/block[1]/block[2]/@border-before"/>
+    <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr='10']//flow/block[1]/block[2]/@border-after"/>
+    <eval expected="0"               xpath="count(//pageViewport[@nr='10']//flow/block[1]/block[2]/block)"/>
+
   </checks>
 </testcase>