From d23b3d074a277b88c2bc96d1ff52c57599ecbc34 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 12 Apr 2006 18:01:11 +0000 Subject: [PATCH] Tests to ensure that the StyleTextProp and RichText stuff plays nicely together git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@393553 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hslf/model/TestTextRun.java | 7 +- .../poi/hslf/model/TestTextRunReWrite.java | 171 ++++++++++++++++++ .../hslf/record/TestStyleTextPropAtom.java | 33 +++- 3 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRunReWrite.java diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java index 8bbfb37a4e..c35a6a0c6a 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRun.java @@ -394,7 +394,12 @@ public class TestTextRun extends TestCase { // The styles should have been updated for the new sizes assertEquals(newBText.length(), tpBC.getCharactersCovered()); assertEquals(newCText.length(), tpCC.getCharactersCovered()); - assertEquals(newDText.length(), tpDC.getCharactersCovered()); + assertEquals(newDText.length()+1, tpDC.getCharactersCovered()); // Last one is always one larger + + assertEquals( + newBText.length() + newCText.length() + newDText.length(), + tpBP.getCharactersCovered() + ); // Paragraph style should be sum of text length assertEquals(newBText.length() + newCText.length() + newDText.length(), tpBP.getCharactersCovered()); diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRunReWrite.java b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRunReWrite.java new file mode 100644 index 0000000000..d9b9c711f4 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTextRunReWrite.java @@ -0,0 +1,171 @@ + +/* ==================================================================== + 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 java.io.*; + +import org.apache.poi.hslf.HSLFSlideShow; +import org.apache.poi.hslf.usermodel.RichTextRun; +import org.apache.poi.hslf.usermodel.SlideShow; +import org.apache.poi.poifs.filesystem.*; + +/** + * Tests that if we load something up, get a TextRun, set the text + * to be the same as it was before, and write it all back out again, + * that we don't break anything in the process. + * + * @author Nick Burch (nick at torchbox dot com) + */ +public class TestTextRunReWrite extends TestCase { + // HSLFSlideShow primed on the test data + private HSLFSlideShow hss; + // HSLFSlideShow primed on the test data + private SlideShow ss; + // POIFS primed on the test data + private POIFSFileSystem pfs; + + /** + * Load up a test PPT file with rich data + */ + public void setUp() throws Exception { + String dirname = System.getProperty("HSLF.testdata.path"); + String filename = dirname + "/Single_Coloured_Page_With_Fonts_and_Alignments.ppt"; + FileInputStream fis = new FileInputStream(filename); + pfs = new POIFSFileSystem(fis); + hss = new HSLFSlideShow(pfs); + ss = new SlideShow(hss); + } + + public void testWritesOutTheSameNonRich() throws Exception { + // Grab the first text run on the first sheet + TextRun tr1 = ss.getSlides()[0].getTextRuns()[0]; + TextRun tr2 = ss.getSlides()[0].getTextRuns()[1]; + + // Ensure the text lengths are as we'd expect to start with + assertEquals(1, ss.getSlides().length); + assertEquals(2, ss.getSlides()[0].getTextRuns().length); + assertEquals(30, tr1.getText().length()); + assertEquals(179, tr2.getText().length()); + + assertEquals(1, tr1.getRichTextRuns().length); + assertEquals(30, tr1.getRichTextRuns()[0].getLength()); + assertEquals(30, tr1.getRichTextRuns()[0].getText().length()); + assertEquals(31, tr1.getRichTextRuns()[0]._getRawCharacterStyle().getCharactersCovered()); + assertEquals(31, tr1.getRichTextRuns()[0]._getRawParagraphStyle().getCharactersCovered()); + + // Set the text to be as it is now + tr1.setText( tr1.getText() ); + + // Check the text lengths are still right + assertEquals(30, tr1.getText().length()); + assertEquals(179, tr2.getText().length()); + + assertEquals(1, tr1.getRichTextRuns().length); + assertEquals(30, tr1.getRichTextRuns()[0].getLength()); + assertEquals(30, tr1.getRichTextRuns()[0].getText().length()); + assertEquals(31, tr1.getRichTextRuns()[0]._getRawCharacterStyle().getCharactersCovered()); + assertEquals(31, tr1.getRichTextRuns()[0]._getRawParagraphStyle().getCharactersCovered()); + + + // Write the slideshow out to a byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ss.write(baos); + + // Build an input stream of it + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + + // Use POIFS to query that lot + POIFSFileSystem npfs = new POIFSFileSystem(bais); + + // Check that the "PowerPoint Document" sections have the same size + DocumentEntry oProps = (DocumentEntry)pfs.getRoot().getEntry("PowerPoint Document"); + DocumentEntry nProps = (DocumentEntry)npfs.getRoot().getEntry("PowerPoint Document"); + assertEquals(oProps.getSize(),nProps.getSize()); + + // Check that they contain the same data + byte[] _oData = new byte[oProps.getSize()]; + byte[] _nData = new byte[nProps.getSize()]; + pfs.createDocumentInputStream("PowerPoint Document").read(_oData); + npfs.createDocumentInputStream("PowerPoint Document").read(_nData); + for(int i=0; i<_oData.length; i++) { + System.out.println(i + "\t" + Integer.toHexString(i)); + assertEquals(_oData[i], _nData[i]); + } + } + + public void testWritesOutTheSameRich() throws Exception { + // Grab the first text run on the first sheet + TextRun tr1 = ss.getSlides()[0].getTextRuns()[0]; + + // Get the first rich text run + RichTextRun rtr1 = tr1.getRichTextRuns()[0]; + + + // Check that the text sizes are as expected + assertEquals(1, tr1.getRichTextRuns().length); + assertEquals(30, tr1.getText().length()); + assertEquals(30, tr1.getRichTextRuns()[0].getText().length()); + assertEquals(30, rtr1.getLength()); + assertEquals(30, rtr1.getText().length()); + assertEquals(31, rtr1._getRawCharacterStyle().getCharactersCovered()); + assertEquals(31, rtr1._getRawParagraphStyle().getCharactersCovered()); + + // Set the text to be as it is now + rtr1.setText( rtr1.getText() ); + rtr1 = tr1.getRichTextRuns()[0]; + + // Check that the text sizes are still as expected + assertEquals(1, tr1.getRichTextRuns().length); + assertEquals(30, tr1.getText().length()); + assertEquals(30, tr1.getRichTextRuns()[0].getText().length()); + assertEquals(30, rtr1.getLength()); + assertEquals(30, rtr1.getText().length()); + assertEquals(31, rtr1._getRawCharacterStyle().getCharactersCovered()); + assertEquals(31, rtr1._getRawParagraphStyle().getCharactersCovered()); + + + // Write the slideshow out to a byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ss.write(baos); + + // Build an input stream of it + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + + // Use POIFS to query that lot + POIFSFileSystem npfs = new POIFSFileSystem(bais); + + // Check that the "PowerPoint Document" sections have the same size + DocumentEntry oProps = (DocumentEntry)pfs.getRoot().getEntry("PowerPoint Document"); + DocumentEntry nProps = (DocumentEntry)npfs.getRoot().getEntry("PowerPoint Document"); + assertEquals(oProps.getSize(),nProps.getSize()); + + // Check that they contain the same data + byte[] _oData = new byte[oProps.getSize()]; + byte[] _nData = new byte[nProps.getSize()]; + pfs.createDocumentInputStream("PowerPoint Document").read(_oData); + npfs.createDocumentInputStream("PowerPoint Document").read(_nData); + for(int i=0; i<_oData.length; i++) { + System.out.println(i + "\t" + Integer.toHexString(i) + "\t" + _oData[i]); + assertEquals(_oData[i], _nData[i]); + } + } +} diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java index 69453243df..bcecb79051 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java @@ -405,13 +405,12 @@ public class TestStyleTextPropAtom extends TestCase { assertEquals(data_a.length, b.length); for(int i=0; i