Modified: poi/branches/common_sl/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java?rev=1684773&r1=1684772&r2=1684773&view=diff ============================================================================== --- poi/branches/common_sl/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java (original) +++ poi/branches/common_sl/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java Wed Jun 10 22:23:47 2015 @@ -19,10 +19,12 @@ package org.apache.poi.hslf.usermodel; import static org.junit.Assert.*; -import java.io.IOException; +import java.awt.Color; +import java.io.*; import java.util.List; import org.apache.poi.POIDataSamples; +import org.apache.poi.hslf.model.textproperties.TextPropCollection; import org.apache.poi.hslf.record.*; import org.junit.Before; import org.junit.Test; @@ -99,7 +101,7 @@ public final class TestTextRun { // Ensure trailing \n's are NOT stripped, it is legal to set a text with a trailing '\r' tr.setText(changeTo + "\n"); - assertEquals(changeTo + "\n", tr.getRawText()); + assertEquals(changeTo + "\r", tr.getRawText()); } /** @@ -121,7 +123,6 @@ public final class TestTextRun { else if (r instanceof TextBytesAtom) tba = (TextBytesAtom)r; else if (r instanceof TextCharsAtom) tca = (TextCharsAtom)r; } - // Bytes -> Bytes assertNull(tca); @@ -197,18 +198,13 @@ public final class TestTextRun { List<HSLFTextParagraph> trB = textParass.get(1); assertEquals(1, trA.size()); - assertEquals(1, trB.size()); + assertEquals(2, trB.size()); HSLFTextRun rtrA = trA.get(0).getTextRuns().get(0); HSLFTextRun rtrB = trB.get(0).getTextRuns().get(0); assertEquals(HSLFTextParagraph.getRawText(trA), rtrA.getRawText()); - assertEquals(HSLFTextParagraph.getRawText(trB), rtrB.getRawText()); - -// assertNull(rtrA._getRawCharacterStyle()); -// assertNull(rtrA._getRawParagraphStyle()); -// assertNull(rtrB._getRawCharacterStyle()); -// assertNull(rtrB._getRawParagraphStyle()); + assertEquals(HSLFTextParagraph.getRawText(trB.subList(0, 1)), rtrB.getRawText()); } /** @@ -284,39 +280,39 @@ public final class TestTextRun { HSLFTextRun rtrB = trB.get(0).getTextRuns().get(0); HSLFTextRun rtrC = trB.get(1).getTextRuns().get(0); HSLFTextRun rtrD = trB.get(2).getTextRuns().get(0); -// TextPropCollection tpBP = rtrB._getRawParagraphStyle(); -// TextPropCollection tpBC = rtrB._getRawCharacterStyle(); -// TextPropCollection tpCP = rtrC._getRawParagraphStyle(); -// TextPropCollection tpCC = rtrC._getRawCharacterStyle(); -// TextPropCollection tpDP = rtrD._getRawParagraphStyle(); -// TextPropCollection tpDC = rtrD._getRawCharacterStyle(); + TextPropCollection tpBP = rtrB.getTextParagraph().getParagraphStyle(); + TextPropCollection tpBC = rtrB.getCharacterStyle(); + TextPropCollection tpCP = rtrC.getTextParagraph().getParagraphStyle(); + TextPropCollection tpCC = rtrC.getCharacterStyle(); + TextPropCollection tpDP = rtrD.getTextParagraph().getParagraphStyle(); + TextPropCollection tpDC = rtrD.getCharacterStyle(); // assertEquals(trB.getRawText().substring(0, 30), rtrB.getRawText()); -// assertNotNull(tpBP); -// assertNotNull(tpBC); -// assertNotNull(tpCP); -// assertNotNull(tpCC); -// assertNotNull(tpDP); -// assertNotNull(tpDC); -// assertTrue(tpBP.equals(tpCP)); -// assertTrue(tpBP.equals(tpDP)); -// assertTrue(tpCP.equals(tpDP)); -// assertFalse(tpBC.equals(tpCC)); -// assertFalse(tpBC.equals(tpDC)); -// assertFalse(tpCC.equals(tpDC)); + assertNotNull(tpBP); + assertNotNull(tpBC); + assertNotNull(tpCP); + assertNotNull(tpCC); + assertNotNull(tpDP); + assertNotNull(tpDC); + assertEquals(tpBP,tpCP); + assertEquals(tpBP,tpDP); + assertEquals(tpCP,tpDP); + assertNotEquals(tpBC,tpCC); + assertNotEquals(tpBC,tpDC); + assertNotEquals(tpCC,tpDC); // Change text via normal -// trB.setText("Test Foo Test"); + HSLFTextParagraph.setText(trB, "Test Foo Test"); // Ensure now have first style -// assertEquals(1, trB.getTextRuns().length); -// rtrB = trB.getTextRuns().get(0); -// assertEquals("Test Foo Test", trB.getRawText()); -// assertEquals("Test Foo Test", rtrB.getRawText()); -// assertNotNull(rtrB._getRawCharacterStyle()); -// assertNotNull(rtrB._getRawParagraphStyle()); -// assertEquals( tpBP, rtrB._getRawParagraphStyle() ); -// assertEquals( tpBC, rtrB._getRawCharacterStyle() ); + assertEquals(1, trB.get(0).getTextRuns().size()); + rtrB = trB.get(0).getTextRuns().get(0); + assertEquals("Test Foo Test", HSLFTextParagraph.getRawText(trB)); + assertEquals("Test Foo Test", rtrB.getRawText()); + assertNotNull(rtrB.getCharacterStyle()); + assertNotNull(rtrB.getTextParagraph().getParagraphStyle()); + assertEquals( tpBP, rtrB.getTextParagraph().getParagraphStyle() ); + assertEquals( tpBC, rtrB.getCharacterStyle() ); } /** @@ -328,21 +324,21 @@ public final class TestTextRun { HSLFSlide slideOne = ss.getSlides().get(0); List<List<HSLFTextParagraph>> textRuns = slideOne.getTextParagraphs(); List<HSLFTextParagraph> trB = textRuns.get(1); -// assertEquals(1, trB.getTextRuns().length); -// -// HSLFTextRun rtrB = trB.getTextRuns().get(0); -// assertEquals(trB.getRawText(), rtrB.getRawText()); -// assertNull(rtrB._getRawCharacterStyle()); -// assertNull(rtrB._getRawParagraphStyle()); + assertEquals(1, trB.get(0).getTextRuns().size()); + + HSLFTextRun rtrB = trB.get(0).getTextRuns().get(0); + assertEquals(HSLFTextParagraph.getRawText(trB.subList(0, 1)), rtrB.getRawText()); + assertNotNull(rtrB.getCharacterStyle()); + assertNotNull(rtrB.getTextParagraph().getParagraphStyle()); // Change text via rich -// rtrB.setText("Test Test Test"); -// assertEquals("Test Test Test", trB.getRawText()); -// assertEquals("Test Test Test", rtrB.getRawText()); + rtrB.setText("Test Test Test"); + assertEquals("Test Test Test", HSLFTextParagraph.getRawText(trB.subList(0, 1))); + assertEquals("Test Test Test", rtrB.getRawText()); // Will now have dummy props -// assertNotNull(rtrB._getRawCharacterStyle()); -// assertNotNull(rtrB._getRawParagraphStyle()); + assertNotNull(rtrB.getCharacterStyle()); + assertNotNull(rtrB.getTextParagraph().getParagraphStyle()); } /** @@ -357,31 +353,31 @@ public final class TestTextRun { assertEquals(3, trB.size()); // We start with 3 text runs, each with their own set of styles, - // but all sharing the same paragraph styles + // but all sharing the same paragraph styles HSLFTextRun rtrB = trB.get(0).getTextRuns().get(0); HSLFTextRun rtrC = trB.get(1).getTextRuns().get(0); HSLFTextRun rtrD = trB.get(2).getTextRuns().get(0); -// TextPropCollection tpBP = rtrB._getRawParagraphStyle(); -// TextPropCollection tpBC = rtrB._getRawCharacterStyle(); -// TextPropCollection tpCP = rtrC._getRawParagraphStyle(); -// TextPropCollection tpCC = rtrC._getRawCharacterStyle(); -// TextPropCollection tpDP = rtrD._getRawParagraphStyle(); -// TextPropCollection tpDC = rtrD._getRawCharacterStyle(); + TextPropCollection tpBP = rtrB.getTextParagraph().getParagraphStyle(); + TextPropCollection tpBC = rtrB.getCharacterStyle(); + TextPropCollection tpCP = rtrC.getTextParagraph().getParagraphStyle(); + TextPropCollection tpCC = rtrC.getCharacterStyle(); + TextPropCollection tpDP = rtrD.getTextParagraph().getParagraphStyle(); + TextPropCollection tpDC = rtrD.getCharacterStyle(); // Check text and stylings -// assertEquals(trB.getRawText().substring(0, 30), rtrB.getRawText()); -// assertNotNull(tpBP); -// assertNotNull(tpBC); -// assertNotNull(tpCP); -// assertNotNull(tpCC); -// assertNotNull(tpDP); -// assertNotNull(tpDC); -// assertTrue(tpBP.equals(tpCP)); -// assertTrue(tpBP.equals(tpDP)); -// assertTrue(tpCP.equals(tpDP)); -// assertFalse(tpBC.equals(tpCC)); -// assertFalse(tpBC.equals(tpDC)); -// assertFalse(tpCC.equals(tpDC)); + assertEquals(HSLFTextParagraph.getRawText(trB).substring(0, 30), rtrB.getRawText()); + assertNotNull(tpBP); + assertNotNull(tpBC); + assertNotNull(tpCP); + assertNotNull(tpCC); + assertNotNull(tpDP); + assertNotNull(tpDC); + assertEquals(tpBP, tpCP); + assertEquals(tpBP, tpDP); + assertEquals(tpCP, tpDP); + assertNotEquals(tpBC, tpCC); + assertNotEquals(tpBC, tpDC); + assertNotEquals(tpCC, tpDC); // Check text in the rich runs assertEquals("This is the subtitle, in bold\r", rtrB.getRawText()); @@ -394,32 +390,32 @@ public final class TestTextRun { rtrB.setText(newBText); rtrC.setText(newCText); rtrD.setText(newDText); - assertEquals(newBText, rtrB.getRawText()); - assertEquals(newCText, rtrC.getRawText()); - assertEquals(newDText, rtrD.getRawText()); + HSLFTextParagraph.storeText(trB); -// assertEquals(newBText + newCText + newDText, trB.getRawText()); + assertEquals(newBText.replace('\n','\r'), rtrB.getRawText()); + assertEquals(newCText.replace('\n','\r'), rtrC.getRawText()); + assertEquals(newDText.replace('\n','\r'), rtrD.getRawText()); - // The styles should have been updated for the new sizes -// assertEquals(newBText.length(), tpBC.getCharactersCovered()); -// assertEquals(newCText.length(), tpCC.getCharactersCovered()); -// assertEquals(newDText.length()+1, tpDC.getCharactersCovered()); // Last one is always one larger - -// assertEquals( -// newBText.length() + newCText.length() + newDText.length(), -// tpBP.getCharactersCovered() -// ); + assertEquals(newBText.replace('\n','\r') + newCText.replace('\n','\r') + newDText.replace('\n','\r'), HSLFTextParagraph.getRawText(trB)); - // Paragraph style should be sum of text length -// assertEquals(newBText.length() + newCText.length() + newDText.length(), tpBP.getCharactersCovered()); + // The styles should have been updated for the new sizes + assertEquals(newBText.length(), tpBC.getCharactersCovered()); + assertEquals(newCText.length(), tpCC.getCharactersCovered()); + assertEquals(newDText.length()+1, tpDC.getCharactersCovered()); // Last one is always one larger + + // Paragraph style should be sum of text length + assertEquals( + newBText.length() + newCText.length() + newDText.length() +1, + tpBP.getCharactersCovered() + tpCP.getCharactersCovered() + tpDP.getCharactersCovered() + ); // Check stylings still as expected -// TextPropCollection ntpBC = rtrB._getRawCharacterStyle(); -// TextPropCollection ntpCC = rtrC._getRawCharacterStyle(); -// TextPropCollection ntpDC = rtrD._getRawCharacterStyle(); -// assertEquals(tpBC.getTextPropList(), ntpBC.getTextPropList()); -// assertEquals(tpCC.getTextPropList(), ntpCC.getTextPropList()); -// assertEquals(tpDC.getTextPropList(), ntpDC.getTextPropList()); + TextPropCollection ntpBC = rtrB.getCharacterStyle(); + TextPropCollection ntpCC = rtrC.getCharacterStyle(); + TextPropCollection ntpDC = rtrD.getCharacterStyle(); + assertEquals(tpBC.getTextPropList(), ntpBC.getTextPropList()); + assertEquals(tpCC.getTextPropList(), ntpCC.getTextPropList()); + assertEquals(tpDC.getTextPropList(), ntpDC.getTextPropList()); } @@ -467,82 +463,86 @@ public final class TestTextRun { assertEquals(0, slide.getTextParagraphs().size()); HSLFTextBox shape1 = new HSLFTextBox(); -// HSLFTextParagraph run1 = shape1.getTextParagraphs(); -// assertSame(run1, shape1.createTextRun()); -// run1.setText("Text 1"); + List<HSLFTextParagraph> run1 = shape1.getTextParagraphs(); + shape1.setText("Text 1"); slide.addShape(shape1); //The array of Slide's text runs must be updated when new text shapes are added. -// HSLFTextParagraph[] runs = slide.getTextParagraphs(); -// assertNotNull(runs); -// assertSame(run1, runs.get(0)); -// -// HSLFTextBox shape2 = new HSLFTextBox(); -// HSLFTextParagraph run2 = shape2.getTextParagraphs(); -// assertSame(run2, shape2.createTextRun()); -// run2.setText("Text 2"); -// slide.addShape(shape2); -// -// runs = slide.getTextParagraphs(); -// assertEquals(2, runs.length); -// -// assertSame(run1, runs.get(0)); -// assertSame(run2, runs.get(1)); -// -// //as getShapes() -// HSLFShape[] sh = slide.getShapes(); -// assertEquals(2, sh.length); -// assertTrue(sh.get(0) instanceof HSLFTextBox); -// HSLFTextBox box1 = (HSLFTextBox)sh.get(0); -// assertSame(run1, box1.getTextParagraphs()); -// HSLFTextBox box2 = (HSLFTextBox)sh.get(1); -// assertSame(run2, box2.getTextParagraphs()); -// -// //test Table - a complex group of shapes containing text objects -// HSLFSlide slide2 = ppt.createSlide(); -// assertNull(slide2.getTextParagraphs()); -// Table table = new Table(2, 2); -// slide2.addShape(table); -// runs = slide2.getTextParagraphs(); -// assertNotNull(runs); -// assertEquals(4, runs.length); + List<List<HSLFTextParagraph>> runs = slide.getTextParagraphs(); + assertNotNull(runs); + assertSame(run1, runs.get(0)); + + HSLFTextBox shape2 = new HSLFTextBox(); + List<HSLFTextParagraph> run2 = shape2.getTextParagraphs(); + shape2.setText("Text 2"); + slide.addShape(shape2); + + runs = slide.getTextParagraphs(); + assertEquals(2, runs.size()); + + assertSame(run1, runs.get(0)); + assertSame(run2, runs.get(1)); + + // as getShapes() + List<HSLFShape> sh = slide.getShapes(); + assertEquals(2, sh.size()); + assertTrue(sh.get(0) instanceof HSLFTextBox); + HSLFTextBox box1 = (HSLFTextBox)sh.get(0); + assertSame(run1, box1.getTextParagraphs()); + HSLFTextBox box2 = (HSLFTextBox)sh.get(1); + assertSame(run2, box2.getTextParagraphs()); + + // test Table - a complex group of shapes containing text objects + HSLFSlide slide2 = ppt.createSlide(); + assertTrue(slide2.getTextParagraphs().isEmpty()); + HSLFTable table = new HSLFTable(2, 2); + slide2.addShape(table); + runs = slide2.getTextParagraphs(); + assertNotNull(runs); + assertEquals(4, runs.size()); } @Test public void test48916() throws IOException { -// HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("SampleShow.ppt")); -// for(HSLFSlide slide : ppt.getSlides()){ -// for(HSLFShape sh : slide.getShapes()){ -// if(sh instanceof HSLFTextShape){ -// HSLFTextShape tx = (HSLFTextShape)sh; -// HSLFTextParagraph run = tx.getTextParagraphs(); -// //verify that records cached in TextRun and EscherTextboxWrapper are the same -// Record[] runChildren = run.getRecords(); -// Record[] txboxChildren = tx.getEscherTextboxWrapper().getChildRecords(); -// assertEquals(runChildren.length, txboxChildren.length); -// for(int i=0; i < txboxChildren.length; i++){ -// assertSame(txboxChildren.get(i), runChildren.get(i)); -// } -// //caused NPE prior to fix of Bugzilla #48916 -// run.getTextRuns().get(0).setBold(true); -// run.getTextRuns().get(0).setFontColor(Color.RED); -// } -// } -// } -// ByteArrayOutputStream out = new ByteArrayOutputStream(); -// ppt.write(out); -// ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())); -// for(HSLFSlide slide : ppt.getSlides()){ -// for(HSLFShape sh : slide.getShapes()){ -// if(sh instanceof HSLFTextShape){ -// HSLFTextShape tx = (HSLFTextShape)sh; -// HSLFTextParagraph run = tx.getTextParagraphs(); -// HSLFTextRun rt = run.getTextRuns().get(0); -// assertTrue(rt.isBold()); -// assertEquals(rt.getFontColor(), Color.RED); -// } -// } -// } + HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("SampleShow.ppt")); + List<HSLFSlide> slides = ppt.getSlides(); + for(HSLFSlide slide : slides){ + for(HSLFShape sh : slide.getShapes()){ + if (!(sh instanceof HSLFTextShape)) continue; + HSLFTextShape tx = (HSLFTextShape)sh; + List<HSLFTextParagraph> paras = tx.getTextParagraphs(); + //verify that records cached in TextRun and EscherTextboxWrapper are the same + Record[] runChildren = paras.get(0).getRecords(); + Record[] txboxChildren = tx.getEscherTextboxWrapper().getChildRecords(); + assertEquals(runChildren.length, txboxChildren.length); + for(int i=0; i < txboxChildren.length; i++){ + assertSame(txboxChildren[i], runChildren[i]); + } + // caused NPE prior to fix of Bugzilla #48916 + for (HSLFTextParagraph p : paras) { + for (HSLFTextRun rt : p.getTextRuns()) { + rt.setBold(true); + rt.setFontColor(Color.RED); + } + } + tx.storeText(); + } + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ppt.write(out); + + ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())); + for(HSLFSlide slide : ppt.getSlides()){ + for(HSLFShape sh : slide.getShapes()){ + if(sh instanceof HSLFTextShape){ + HSLFTextShape tx = (HSLFTextShape)sh; + List<HSLFTextParagraph> run = tx.getTextParagraphs(); + HSLFTextRun rt = run.get(0).getTextRuns().get(0); + assertTrue(rt.isBold()); + assertEquals(rt.getFontColor(), Color.RED); + } + } + } }
Added: poi/branches/common_sl/test-data/slideshow/54541_cropped_bitmap2.ppt URL: http://svn.apache.org/viewvc/poi/branches/common_sl/test-data/slideshow/54541_cropped_bitmap2.ppt?rev=1684773&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/branches/common_sl/test-data/slideshow/54541_cropped_bitmap2.ppt ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: poi/branches/common_sl/test-data/slideshow/sample_pptx_grouping_issues.pptx URL: http://svn.apache.org/viewvc/poi/branches/common_sl/test-data/slideshow/sample_pptx_grouping_issues.pptx?rev=1684773&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/branches/common_sl/test-data/slideshow/sample_pptx_grouping_issues.pptx ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
