From 71eda449e69b634e801bb02b697089fe961d9032 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sun, 19 Mar 2006 17:54:17 +0000 Subject: [PATCH] Add Yegor's new slide functionality (see bug 38954), with a bit of refactoring git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@387009 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hslf/data/empty.ppt | Bin 0 -> 10240 bytes .../poi/hslf/model/TestPPGraphics2D.java | 88 ++++++++++++++++++ .../org/apache/poi/hslf/model/TestShapes.java | 80 ++++++++++++++++ .../poi/hslf/record/TestRecordContainer.java | 18 ++-- 4 files changed, 180 insertions(+), 6 deletions(-) create mode 100644 src/scratchpad/testcases/org/apache/poi/hslf/data/empty.ppt create mode 100644 src/scratchpad/testcases/org/apache/poi/hslf/model/TestPPGraphics2D.java create mode 100644 src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/data/empty.ppt b/src/scratchpad/testcases/org/apache/poi/hslf/data/empty.ppt new file mode 100644 index 0000000000000000000000000000000000000000..23e1e94ca8a5d1888d35fd89f307c4b01e57e059 GIT binary patch literal 10240 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 aQu;?O3{w$QsN?m`_&A!)Sk;en|NjRt)FYw* literal 0 HcmV?d00001 diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPPGraphics2D.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPPGraphics2D.java new file mode 100644 index 000000000..2b7d6cc60 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPPGraphics2D.java @@ -0,0 +1,88 @@ +/* ==================================================================== + Copyright 2002-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi.hslf.model; + +import junit.framework.TestCase; +import org.apache.poi.hslf.usermodel.SlideShow; +import org.apache.poi.hslf.HSLFSlideShow; + +import java.awt.*; +import java.awt.Rectangle; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +/** + * Test drawing shapes via Graphics2D + * + * @author Yegor Kozlov + */ +public class TestPPGraphics2D extends TestCase { + private SlideShow ppt; + + protected void setUp() throws Exception { + String dirname = System.getProperty("HSLF.testdata.path"); + String filename = dirname + "/empty.ppt"; + ppt = new SlideShow(new HSLFSlideShow(filename)); + } + + public void testGraphics() throws Exception { + // Starts off empty + assertEquals(0, ppt.getSlides().length); + + // Add a slide + Slide slide = ppt.createSlide(); + assertEquals(1, ppt.getSlides().length); + + // Add some stuff into it + ShapeGroup group = new ShapeGroup(); + Dimension pgsize = ppt.getPageSize(); + java.awt.Rectangle bounds = new java.awt.Rectangle(0, 0, (int)pgsize.getWidth(), (int)pgsize.getHeight()); + group.setAnchor(bounds); + slide.addShape(group); + + PPGraphics2D graphics = new PPGraphics2D(group); + graphics.setColor(Color.blue); + graphics.draw(new Rectangle(1296, 2544, 1344, 0)); + + graphics.setColor(Color.red); + graphics.setStroke(new BasicStroke((float)2.5)); + graphics.drawLine(500, 500, 1500, 2500); + + graphics.setColor(Color.green); + graphics.setPaint(Color.gray); + graphics.drawOval(4000, 1000, 1000, 1000); + + // Write the file out + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + out.close(); + + // And read it back in + ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()))); + assertEquals(1, ppt.getSlides().length); + + slide = ppt.getSlides()[0]; + Shape[] shape = slide.getShapes(); + assertEquals(shape.length, 1); //group shape + + assertTrue(shape[0] instanceof ShapeGroup); //group shape + + group = (ShapeGroup)shape[0]; + shape = group.getShapes(); + assertEquals(shape.length, 7); + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java new file mode 100644 index 000000000..400a66c6e --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java @@ -0,0 +1,80 @@ +/* ==================================================================== + Copyright 2002-2004 Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi.hslf.model; + +import junit.framework.TestCase; +import org.apache.poi.hslf.usermodel.SlideShow; +import org.apache.poi.hslf.HSLFSlideShow; + +import java.awt.*; +import java.awt.Rectangle; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +/** + * Test drawing shapes via Graphics2D + * + * @author Yegor Kozlov + */ +public class TestShapes extends TestCase { + private SlideShow ppt; + + protected void setUp() throws Exception { + String dirname = System.getProperty("HSLF.testdata.path"); + String filename = dirname + "/empty.ppt"; + ppt = new SlideShow(new HSLFSlideShow(filename)); + getClass().getResourceAsStream(""); + } + + public void testGraphics() throws Exception { + Slide slide = ppt.createSlide(); + + Line line = new Line(); + line.setAnchor(new Rectangle(1296, 2544, 1344, 528)); + line.setLineWidth(3); + line.setLineStyle(Line.LineDashSys); + line.setLineColor(Color.red); + slide.addShape(line); + + Ellipse ellipse = new Ellipse(); + ellipse.setAnchor(new Rectangle(4000, 1000, 1000, 1000)); + ellipse.setLineWidth(2); + ellipse.setLineStyle(Line.LineSolid); + ellipse.setLineColor(Color.green); + ellipse.setFillColor(Color.lightGray); + slide.addShape(ellipse); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + out.close(); + + //read ppt from byte array + + ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()))); + assertEquals(ppt.getSlides().length, 1); + + slide = ppt.getSlides()[0]; + Shape[] shape = slide.getShapes(); + assertEquals(shape.length, 2); + + assertTrue(shape[0] instanceof Line); //group shape + assertEquals(shape[0].getAnchor(), new Rectangle(1296, 2544, 1344, 528)); //group shape + + assertTrue(shape[1] instanceof Ellipse); //group shape + assertEquals(shape[1].getAnchor(), new Rectangle(4000, 1000, 1000, 1000)); //group shape + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java index bd11a01be..a9ed9e41c 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestRecordContainer.java @@ -37,24 +37,30 @@ public class TestRecordContainer extends TestCase { } public void testAppendChildRecord() { + // Grab records for testing with + Record r = recordContainer.getChildRecords()[0]; + Record rb = recordContainer.getChildRecords()[1]; + Record rc = recordContainer.getChildRecords()[2]; + Record rd = recordContainer.getChildRecords()[3]; + // Start with an empty set Record[] rs = new Record[0]; - Record r = recordContainer.getChildRecords()[0]; - Record[] nrs = recordContainer.appendChildRecord(r, rs); + recordContainer._children = rs; + recordContainer.appendChildRecord(r); + Record[] nrs = recordContainer.getChildRecords(); assertEquals(1, nrs.length); assertEquals(r, nrs[0]); // Now start with one with 3 entries rs = new Record[3]; - Record rb = recordContainer.getChildRecords()[1]; - Record rc = recordContainer.getChildRecords()[2]; - Record rd = recordContainer.getChildRecords()[3]; + recordContainer._children = rs; rs[0] = rb; rs[1] = rc; rs[2] = rd; - nrs = recordContainer.appendChildRecord(r, rs); + recordContainer.appendChildRecord(r); + nrs = recordContainer.getChildRecords(); assertEquals(4, nrs.length); assertEquals(rb, nrs[0]);