You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by ni...@apache.org on 2006/06/13 16:58:47 UTC

svn commit: r413914 - /jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java

Author: nick
Date: Tue Jun 13 07:58:46 2006
New Revision: 413914

URL: http://svn.apache.org/viewvc?rev=413914&view=rev
Log:
Tests for new RichText code

Modified:
    jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java?rev=413914&r1=413913&r2=413914&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java Tue Jun 13 07:58:46 2006
@@ -2,10 +2,13 @@
 
 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 @@
 	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 @@
 		
 		// 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 @@
 	/**
 	 * 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:
+		//  <ps>(text a)</ps><ps>(text a)(text b)</ps>
+		// 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<refSLWT.getChildRecords().length; i++) {
+			Record ref_r = refSLWT.getChildRecords()[i];
+			Record s_r = s_SLWT.getChildRecords()[i];
+			
+			byte[] r_rb = writeRecord(ref_r);
+			byte[] s_rb = writeRecord(s_r);
+			assertEquals(r_rb.length, s_rb.length);
+			for(int j=0; j<r_rb.length; j++) {
+				assertEquals(r_rb[j],s_rb[j]);
+			}
+		}
+		
+		// Check the bytes are the same
+		assertEquals(raw_slwt.length, s_slwt.length);
+		for(int i=0; i<raw_slwt.length; i++) {
+			assertEquals(raw_slwt[i], s_slwt[i]);
+		}
+	}
+	
+	/**
+	 * Checks that the supplied slideshow still matches the bytes
+	 *  of slideshow c 
+	 */
+	private void assertMatchesFileC(SlideShow s) throws Exception {
+		// Disabled, pending fix of bug #39800
+		System.err.println("Skipping test, as would be marked as failed due to bug #39800");
+if(false) {
+		// Grab the bytes of the file
+		FileInputStream fin = new FileInputStream(filenameC);
+		ByteArrayOutputStream fb = new ByteArrayOutputStream();
+		byte[] b = new byte[4096];
+		int read = 0;
+		while(read != -1) {
+			read = fin.read(b);
+			if(read > 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<raw_file.length; i++) {
+			assertEquals(raw_file[i], raw_ss[i]);
+		}
+}
+	}
+	
+	private byte[] writeRecord(Record r) throws Exception {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		r.writeOut(baos);
+		return baos.toByteArray();
 	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/