diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2017-04-15 12:14:26 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2017-04-15 12:14:26 +0000 |
commit | 19fe5590908aeb95214bc9a17cbd7a440fdccbec (patch) | |
tree | 85146fa9c55761246ddf41f1a5ad4d1ed69b30b5 | |
parent | 8fa92c2e6a0266f67f55a3db31fb84893c68f855 (diff) | |
download | poi-19fe5590908aeb95214bc9a17cbd7a440fdccbec.tar.gz poi-19fe5590908aeb95214bc9a17cbd7a440fdccbec.zip |
#60993 - HSLF: Grid and rowspan calculation in table cells is wrong
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1791500 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/sl/TestTable.java | 62 | ||||
-rw-r--r-- | src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java | 13 | ||||
-rw-r--r-- | test-data/slideshow/bug60993.ppt | bin | 0 -> 121344 bytes | |||
-rw-r--r-- | test-data/slideshow/bug60993.pptx | bin | 0 -> 21942 bytes |
4 files changed, 63 insertions, 12 deletions
diff --git a/src/ooxml/testcases/org/apache/poi/sl/TestTable.java b/src/ooxml/testcases/org/apache/poi/sl/TestTable.java index 0b02b74783..5b45f9973e 100644 --- a/src/ooxml/testcases/org/apache/poi/sl/TestTable.java +++ b/src/ooxml/testcases/org/apache/poi/sl/TestTable.java @@ -20,6 +20,10 @@ package org.apache.poi.sl; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeFalse; import java.awt.geom.Rectangle2D; @@ -30,6 +34,7 @@ import java.io.InputStream; import org.apache.poi.POIDataSamples; import org.apache.poi.hslf.usermodel.HSLFSlideShow; +import org.apache.poi.sl.usermodel.Slide; import org.apache.poi.sl.usermodel.SlideShow; import org.apache.poi.sl.usermodel.SlideShowFactory; import org.apache.poi.sl.usermodel.TableCell; @@ -66,7 +71,7 @@ public class TestTable { } @Test - public void testColWidthRowHeight() throws IOException { + public void colWidthRowHeight() throws IOException { assumeFalse(xslfOnly); // Test of table dimensions of same slideshow saved as ppt/x @@ -110,7 +115,7 @@ public class TestTable { } @Test - public void testTextDirectionHSLF() throws IOException { + public void textDirectionHSLF() throws IOException { assumeFalse(xslfOnly); SlideShow<?,?> ppt1 = new HSLFSlideShow(); testTextDirection(ppt1); @@ -118,7 +123,7 @@ public class TestTable { } @Test - public void testTextDirectionXSLF() throws IOException { + public void textDirectionXSLF() throws IOException { SlideShow<?,?> ppt1 = new XMLSlideShow(); testTextDirection(ppt1); ppt1.close(); @@ -160,4 +165,53 @@ public class TestTable { } ppt2.close(); } -} + + @Test + public void tableSpan() throws IOException { + String files[] = (xslfOnly) ? new String[]{ "bug60993.pptx" } : new String[]{ "bug60993.pptx", "bug60993.ppt" }; + for (String f : files) { + SlideShow<?,?> ppt = openSampleSlideshow(f); + Slide<?,?> slide = ppt.getSlides().get(0); + TableShape<?,?> ts = (TableShape<?,?>)slide.getShapes().get(0); + int cols = ts.getNumberOfColumns(); + int rows = ts.getNumberOfRows(); + for (int r=0; r<rows; r++) { + for (int c=0; c<cols; c++) { + TableCell<?,?> tc = ts.getCell(r, c); + int rc = r*10+c; + String msg = f+" (r"+r+",c"+c+")"; + switch (rc) { + case 22: + case 51: + if (f.endsWith("ppt")) { + assertNull(msg, tc); + } else { + assertNotNull(msg, tc); + assertTrue(msg, tc.isMerged()); + } + break; + case 21: + assertNotNull(msg, tc); + assertEquals(msg, 1, tc.getRowSpan()); + assertEquals(msg, 2, tc.getGridSpan()); + assertFalse(msg, tc.isMerged()); + break; + case 41: + assertNotNull(msg, tc); + assertEquals(msg, 2, tc.getRowSpan()); + assertEquals(msg, 1, tc.getGridSpan()); + assertFalse(msg, tc.isMerged()); + break; + default: + assertNotNull(msg, tc); + assertEquals(msg, 1, tc.getRowSpan()); + assertEquals(msg, 1, tc.getGridSpan()); + assertFalse(msg, tc.isMerged()); + break; + } + } + } + ppt.close(); + } + } +}
\ No newline at end of file diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java index f908739080..b159e7ca6f 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java @@ -21,6 +21,7 @@ import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.ListIterator; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -218,15 +219,11 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> { } private int calcSpan(List<Double> spaces, double totalSpace, int idx) { - if (idx == spaces.size()-1) { - return 1; - } - int span = 0; - double remainingSpace = totalSpace; - while (idx+1 < spaces.size() && remainingSpace > 0) { - remainingSpace -= spaces.get(idx+1)-spaces.get(idx); + int span = 1; + ListIterator<Double> li = spaces.listIterator(idx); + double start = li.next(); + while (li.hasNext() && li.next()-start < totalSpace) { span++; - idx++; } return span; } diff --git a/test-data/slideshow/bug60993.ppt b/test-data/slideshow/bug60993.ppt Binary files differnew file mode 100644 index 0000000000..58abe1f0e1 --- /dev/null +++ b/test-data/slideshow/bug60993.ppt diff --git a/test-data/slideshow/bug60993.pptx b/test-data/slideshow/bug60993.pptx Binary files differnew file mode 100644 index 0000000000..68a73b251c --- /dev/null +++ b/test-data/slideshow/bug60993.pptx |