From 59ff1beb2b8ad054235c142bf78d86d59c9972d5 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 13 Jun 2006 14:58:46 +0000 Subject: [PATCH] Tests for new RichText code git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@413914 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hslf/usermodel/TestRichTextRun.java | 208 +++++++++++++++++- 1 file changed, 203 insertions(+), 5 deletions(-) diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java index ecc6aeaf3..fce7e8264 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java @@ -2,10 +2,13 @@ package org.apache.poi.hslf.usermodel; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; import org.apache.poi.hslf.HSLFSlideShow; import org.apache.poi.hslf.model.Slide; import org.apache.poi.hslf.model.TextRun; +import org.apache.poi.hslf.record.Record; +import org.apache.poi.hslf.record.SlideListWithText; import junit.framework.TestCase; @@ -25,6 +28,7 @@ public class TestRichTextRun extends TestCase { private HSLFSlideShow hssRichA; private HSLFSlideShow hssRichB; private HSLFSlideShow hssRichC; + private String filenameC; protected void setUp() throws Exception { String dirname = System.getProperty("HSLF.testdata.path"); @@ -46,8 +50,8 @@ public class TestRichTextRun extends TestCase { // Rich test file C - has paragraph styles that run out before // the character ones do - filename = dirname + "/ParagraphStylesShorterThanCharStyles.ppt"; - hssRichC = new HSLFSlideShow(filename); + filenameC = dirname + "/ParagraphStylesShorterThanCharStyles.ppt"; + hssRichC = new HSLFSlideShow(filenameC); ssRichC = new SlideShow(hssRichC); } @@ -206,9 +210,203 @@ public class TestRichTextRun extends TestCase { /** * Test that we can do the right things when the paragraph styles * run out before the character styles do - * NOTE: Disabled, as we can't currently do this! */ - public void BROKENtestParagraphStylesShorterTheCharStyles() { - // TODO + public void testParagraphStylesShorterTheCharStyles() { + // Check we have the right number of sheets + Slide[] slides = ssRichC.getSlides(); + assertEquals(14, slides.length); + + // Check the number of text runs on interesting sheets + Slide slideThreeC = ssRichC.getSlides()[2]; + Slide slideSevenC = ssRichC.getSlides()[6]; + assertEquals(3, slideThreeC.getTextRuns().length); + assertEquals(5, slideSevenC.getTextRuns().length); + + // On slide three, we should have: + // TR: + // You are an important supplier of various items that I need + // . + // TR: + // Source: Internal focus groups + // TR: + // Illustrative Example + // . + + TextRun[] s3tr = slideThreeC.getTextRuns(); + RichTextRun[] s3rtr0 = s3tr[0].getRichTextRuns(); + RichTextRun[] s3rtr1 = s3tr[1].getRichTextRuns(); + RichTextRun[] s3rtr2 = s3tr[2].getRichTextRuns(); + + assertEquals(2, s3rtr0.length); + assertEquals(1, s3rtr1.length); + assertEquals(2, s3rtr2.length); + + assertEquals("You are an important supplier of various items that I need", s3rtr0[0].getText()); + assertEquals("", s3rtr0[1].getText()); + assertEquals("Source: Internal focus groups", s3rtr1[0].getText()); + assertEquals("Illustrative Example", s3rtr2[0].getText()); + assertEquals("", s3rtr2[1].getText()); + + assertTrue(s3rtr0[0]._isParagraphStyleShared()); + assertTrue(s3rtr0[1]._isParagraphStyleShared()); + assertFalse(s3rtr1[0]._isParagraphStyleShared()); + assertTrue(s3rtr2[0]._isParagraphStyleShared()); + assertTrue(s3rtr2[1]._isParagraphStyleShared()); + + assertFalse(s3rtr0[0]._isCharacterStyleShared()); + assertFalse(s3rtr0[1]._isCharacterStyleShared()); + assertFalse(s3rtr1[0]._isCharacterStyleShared()); + assertFalse(s3rtr2[0]._isCharacterStyleShared()); + assertFalse(s3rtr2[1]._isCharacterStyleShared()); + + // On slide seven, we have: + // TR: + // (text) + // TR: + // (text a)(text a)(text b) + // TR: + // (text) + TextRun[] s7tr = slideSevenC.getTextRuns(); + RichTextRun[] s7rtr0 = s7tr[0].getRichTextRuns(); + RichTextRun[] s7rtr1 = s7tr[1].getRichTextRuns(); + RichTextRun[] s7rtr2 = s7tr[2].getRichTextRuns(); + + assertEquals(1, s7rtr0.length); + assertEquals(3, s7rtr1.length); + assertEquals(1, s7rtr2.length); + + assertFalse(s7rtr0[0]._isParagraphStyleShared()); + assertFalse(s7rtr1[0]._isParagraphStyleShared()); + assertTrue(s7rtr1[1]._isParagraphStyleShared()); + assertTrue(s7rtr1[2]._isParagraphStyleShared()); + assertFalse(s7rtr2[0]._isParagraphStyleShared()); + + assertFalse(s7rtr0[0]._isCharacterStyleShared()); + assertTrue(s7rtr1[0]._isCharacterStyleShared()); + assertTrue(s7rtr1[1]._isCharacterStyleShared()); + assertFalse(s7rtr1[2]._isCharacterStyleShared()); + assertFalse(s7rtr2[0]._isCharacterStyleShared()); + } + + /** + * Test that we can do the right things when the paragraph styles + * run out before the character styles do, when we tweak something + * and write back out. + */ + public void testParagraphStylesShorterTheCharStylesWrite() throws Exception { + assertMatchesSLTWC(ssRichC); + assertMatchesFileC(ssRichC); + + Slide slideSevenC = ssRichC.getSlides()[6]; + TextRun[] s7tr = slideSevenC.getTextRuns(); + RichTextRun[] s7rtr0 = s7tr[0].getRichTextRuns(); + RichTextRun[] s7rtr1 = s7tr[1].getRichTextRuns(); + RichTextRun[] s7rtr2 = s7tr[2].getRichTextRuns(); + + String oldText; + + // Reset the text on the last run + // Need to ensure it's a run that really has styles! + oldText = s7rtr2[0].getRawText(); + s7rtr2[0].setText( oldText ); + assertEquals(oldText, s7rtr2[0].getText()); + assertEquals(oldText, s7tr[2].getText()); + assertEquals(oldText.length() + 1, s7rtr2[0]._getRawCharacterStyle().getCharactersCovered()); + assertEquals(oldText.length() + 1, s7rtr2[0]._getRawParagraphStyle().getCharactersCovered()); + assertMatchesSLTWC(ssRichC); + assertMatchesFileC(ssRichC); + + // Reset the text on a shared paragraph + oldText = s7rtr1[2].getRawText(); + s7rtr1[2].setText( oldText ); + assertEquals(oldText, s7rtr1[2].getText()); + assertEquals(oldText.length() + 1, s7rtr1[2]._getRawCharacterStyle().getCharactersCovered()); + assertMatchesSLTWC(ssRichC); + assertMatchesFileC(ssRichC); + + // Reset the text on a shared paragraph+character + s7rtr1[1].setText( s7rtr1[1].getRawText() ); + assertMatchesSLTWC(ssRichC); + assertMatchesFileC(ssRichC); + } + + /** + * Opens a new copy of SlideShow C, writes the active + * SlideListWithText out, and compares it to the write + * out of the supplied SlideShow. Also compares the + * contents. + * @param s + */ + private void assertMatchesSLTWC(SlideShow s) throws Exception { + // Grab a new copy of slideshow C + SlideShow refC = new SlideShow(new HSLFSlideShow(filenameC)); + + // Write out the 2nd SLWT in the active document + SlideListWithText refSLWT = refC.getDocumentRecord().getSlideListWithTexts()[1]; + byte[] raw_slwt = writeRecord(refSLWT); + + // Write out the same for the supplied slideshow + SlideListWithText s_SLWT = s.getDocumentRecord().getSlideListWithTexts()[1]; + byte[] s_slwt = writeRecord(s_SLWT); + + // Check the records are the same + assertEquals(refSLWT.getChildRecords().length, s_SLWT.getChildRecords().length); + for(int i=0; i 0) { + fb.write(b, 0, read); + } + } + byte[] raw_file = fb.toByteArray(); + + // Now write out the slideshow + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + s.write(baos); + byte[] raw_ss = baos.toByteArray(); + + // Ensure they're the same + assertEquals(raw_file.length, raw_ss.length); + for(int i=0; i