From 4728df5b6ad3a684fc1a1d62d0e4620d24d3b60c Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Mon, 27 Jul 2015 08:44:04 +0000 Subject: [PATCH] Improve error message slightly, add tests to verify things failing in Gump-build currently git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692836 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/sl/draw/geom/PresetGeometries.java | 2 +- .../poi/xslf/usermodel/XSLFSimpleShape.java | 2 +- .../poi/xslf/usermodel/TestPPTX2PNG.java | 27 +++--- .../xslf/usermodel/TestXSLFSimpleShape.java | 82 ++++++++++++++++++- .../sl/draw}/geom/TestPresetGeometries.java | 16 +++- 5 files changed, 108 insertions(+), 21 deletions(-) rename src/{ooxml/testcases/org/apache/poi/xslf => testcases/org/apache/poi/sl/draw}/geom/TestPresetGeometries.java (81%) diff --git a/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java b/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java index e2caa084d..676155361 100644 --- a/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java +++ b/src/java/org/apache/poi/sl/draw/geom/PresetGeometries.java @@ -73,7 +73,7 @@ public class PresetGeometries extends LinkedHashMap { cntElem++; if(containsKey(name)) { - LOG.log(POILogger.WARN, "Duplicate definoition of " + name); + LOG.log(POILogger.WARN, "Duplicate definition of " + name); } put(name, new CustomGeometry(cus)); } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java index 79fbffe76..bd29667c8 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java @@ -577,7 +577,7 @@ public abstract class XSLFSimpleShape extends XSLFShape implements SimpleShape { String name = spPr.getPrstGeom().getPrst().toString(); geom = dict.get(name); if(geom == null) { - throw new IllegalStateException("Unknown shape geometry: " + name); + throw new IllegalStateException("Unknown shape geometry: " + name + ", available geometries are: " + dict.keySet()); } } else if (spPr.isSetCustGeom()){ XMLStreamReader staxReader = spPr.getCustGeom().newXMLStreamReader(); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java index 4b083225f..7d962fc43 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java @@ -22,12 +22,9 @@ package org.apache.poi.xslf.usermodel; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.image.BufferedImage; -import java.io.File; import java.util.HashMap; import java.util.Map; -import javax.imageio.ImageIO; - import org.apache.poi.sl.draw.Drawable; import org.apache.poi.util.JvmBugs; import org.apache.poi.xslf.XSLFTestDataSamples; @@ -43,16 +40,20 @@ public class TestPPTX2PNG { public void render() throws Exception { String[] testFiles = {"backgrounds.pptx","layouts.pptx", "sample.pptx", "shapes.pptx", "themes.pptx",}; for(String sampleFile : testFiles){ - XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument(sampleFile); - Dimension pg = pptx.getPageSize(); - int slideNo=1; - for(XSLFSlide slide : pptx.getSlides()){ - BufferedImage img = new BufferedImage(pg.width, pg.height, BufferedImage.TYPE_INT_ARGB); - Graphics2D graphics = img.createGraphics(); - fixFonts(graphics); - slide.draw(graphics); - // ImageIO.write(img, "PNG", new File("build/tmp/"+sampleFile.replaceFirst(".pptx?", "-")+slideNo+".png")); - slideNo++; + try { + XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument(sampleFile); + Dimension pg = pptx.getPageSize(); + //int slideNo=1; + for(XSLFSlide slide : pptx.getSlides()){ + BufferedImage img = new BufferedImage(pg.width, pg.height, BufferedImage.TYPE_INT_ARGB); + Graphics2D graphics = img.createGraphics(); + fixFonts(graphics); + slide.draw(graphics); + // ImageIO.write(img, "PNG", new File("build/tmp/"+sampleFile.replaceFirst(".pptx?", "-")+slideNo+".png")); + //slideNo++; + } + } catch (IllegalStateException e) { + throw new IllegalStateException("While reading file " + sampleFile, e); } } } diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java index f4cc0371c..6088eeee7 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java @@ -19,14 +19,25 @@ package org.apache.poi.xslf.usermodel; import static org.junit.Assert.*; import java.awt.Color; +import java.io.IOException; import java.util.List; +import org.apache.poi.sl.draw.geom.TestPresetGeometries; import org.apache.poi.sl.usermodel.StrokeStyle.LineCap; import org.apache.poi.sl.usermodel.StrokeStyle.LineDash; import org.apache.poi.util.Units; import org.apache.poi.xslf.XSLFTestDataSamples; import org.junit.Test; -import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTEffectStyleItem; +import org.openxmlformats.schemas.drawingml.x2006.main.CTEffectStyleList; +import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrix; +import org.openxmlformats.schemas.drawingml.x2006.main.STLineCap; +import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal; +import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType; /** * @author Yegor Kozlov @@ -34,7 +45,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.*; public class TestXSLFSimpleShape { @Test - public void testLineStyles() { + public void testLineStyles() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); @@ -121,10 +132,12 @@ public class TestXSLFSimpleShape { assertEquals(null, ln3.getLineDash()); ln3.setLineCap(null); assertEquals(null, ln3.getLineDash()); + + ppt.close(); } @Test - public void testFill() { + public void testFill() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); @@ -146,6 +159,7 @@ public class TestXSLFSimpleShape { shape.setFillColor(null); assertNull(shape.getFillColor()); assertFalse(shape.getSpPr().isSetSolidFill()); + ppt.close(); } @Test @@ -252,7 +266,7 @@ public class TestXSLFSimpleShape { @SuppressWarnings({ "deprecation", "unused" }) @Test - public void testShadowEffects(){ + public void testShadowEffects() throws IOException{ XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); CTStyleMatrix styleMatrix = slide.getTheme().getXmlObject().getThemeElements().getFmtScheme(); @@ -261,5 +275,65 @@ public class TestXSLFSimpleShape { for(CTEffectStyleItem ef : lst.getEffectStyleArray()){ CTOuterShadowEffect obj = ef.getEffectLst().getOuterShdw(); } + ppt.close(); + } + + @Test + public void testValidGeometry() throws Exception { + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + XSLFSimpleShape shape = slide.createAutoShape(); + CTShapeProperties spPr = shape.getSpPr(); + + CTPresetGeometry2D prstGeom = CTPresetGeometry2D.Factory.newInstance(); + prstGeom.setPrst(STShapeType.Enum.forInt(1)); + + assertNotNull(prstGeom.getPrst()); + assertNotNull(prstGeom.getPrst().toString()); + assertNotNull(spPr.getPrstGeom()); + spPr.setPrstGeom(prstGeom); + assertNotNull(spPr.getPrstGeom().getPrst()); + assertNotNull(spPr.getPrstGeom().getPrst().toString()); + + assertNotNull(shape.getGeometry()); + + ppt.close(); + } + + + @Test + public void testInvalidGeometry() throws Exception { + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + XSLFSimpleShape shape = slide.createAutoShape(); + CTShapeProperties spPr = shape.getSpPr(); + + CTPresetGeometry2D prstGeom = CTPresetGeometry2D.Factory.newInstance(); + prstGeom.setPrst(STShapeType.Enum.forInt(1)); + + assertNotNull(prstGeom.getPrst()); + assertNotNull(prstGeom.getPrst().toString()); + assertNotNull(spPr.getPrstGeom()); + spPr.setPrstGeom(prstGeom); + assertNotNull(spPr.getPrstGeom().getPrst()); + assertNotNull(spPr.getPrstGeom().getPrst().toString()); + + try { + // cause the geometries to be not found + TestPresetGeometries.clearPreset(); + try { + shape.getGeometry(); + fail("Should fail without the geometry"); + } catch (IllegalStateException e) { + assertTrue(e.getMessage(), e.getMessage().contains("line")); + } + } finally { + // reset to not affect other tests + TestPresetGeometries.resetPreset(); + } + + ppt.close(); } } \ No newline at end of file diff --git a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java b/src/testcases/org/apache/poi/sl/draw/geom/TestPresetGeometries.java similarity index 81% rename from src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java rename to src/testcases/org/apache/poi/sl/draw/geom/TestPresetGeometries.java index 5001dc8b9..079a22a8d 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java +++ b/src/testcases/org/apache/poi/sl/draw/geom/TestPresetGeometries.java @@ -16,7 +16,7 @@ * limitations under the License. * ==================================================================== */ -package org.apache.poi.xslf.geom; +package org.apache.poi.sl.draw.geom; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -25,7 +25,6 @@ import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.util.Map; -import org.apache.poi.sl.draw.geom.*; import org.junit.Test; /** @@ -54,4 +53,17 @@ public class TestPresetGeometries { } } } + + // helper methods to adjust list of presets for other tests + public static void clearPreset() { + // ensure that we are initialized + assertNotNull(PresetGeometries.getInstance()); + + // test handling if some presets are not found + PresetGeometries._inst.clear(); + } + + public static void resetPreset() { + PresetGeometries._inst = null; + } }