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;
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;
}
@Test
- public void testColWidthRowHeight() throws IOException {
+ public void colWidthRowHeight() throws IOException {
assumeFalse(xslfOnly);
// Test of table dimensions of same slideshow saved as ppt/x
}
@Test
- public void testTextDirectionHSLF() throws IOException {
+ public void textDirectionHSLF() throws IOException {
assumeFalse(xslfOnly);
SlideShow<?,?> ppt1 = new HSLFSlideShow();
testTextDirection(ppt1);
}
@Test
- public void testTextDirectionXSLF() throws IOException {
+ public void textDirectionXSLF() throws IOException {
SlideShow<?,?> ppt1 = new XMLSlideShow();
testTextDirection(ppt1);
ppt1.close();
}
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
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;
}
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;
}