]> source.dussan.org Git - poi.git/commitdiff
Start to support friendly usermodel interface to rich text character properties
authorNick Burch <nick@apache.org>
Sun, 12 Feb 2006 19:01:16 +0000 (19:01 +0000)
committerNick Burch <nick@apache.org>
Sun, 12 Feb 2006 19:01:16 +0000 (19:01 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@377216 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java [new file with mode: 0644]

index cf6d0712aa24bfa21b222a13e9d5e7dfcdd28977..2d27eb1207a59c61750bbcd9301fe3e156c21b7c 100644 (file)
@@ -282,7 +282,7 @@ public class TestStyleTextPropAtom extends TestCase {
                // 3rd is normal, so lacks a CharFlagsTextProp
                assertFalse(b_ch_3.getTextPropList().get(0) instanceof CharFlagsTextProp);
                
-               // 4th is underlinds
+               // 4th is underlined
                CharFlagsTextProp cf_4_1 = (CharFlagsTextProp)b_ch_4.getTextPropList().get(0);
                assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.BOLD_IDX));
                assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.ITALIC_IDX));
@@ -293,6 +293,77 @@ public class TestStyleTextPropAtom extends TestCase {
                assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.SHADOW_IDX));
                assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.STRIKETHROUGH_IDX));
                assertEquals(true,cf_4_1.getSubValue(CharFlagsTextProp.UNDERLINE_IDX));
+               
+               // The value for this should be 4
+               assertEquals(0x0004, cf_4_1.getValue());
+               
+               // Now make the 4th bold, italic and not underlined
+               cf_4_1.setSubValue(true, CharFlagsTextProp.BOLD_IDX);
+               cf_4_1.setSubValue(true, CharFlagsTextProp.ITALIC_IDX);
+               cf_4_1.setSubValue(false, CharFlagsTextProp.UNDERLINE_IDX);
+               
+               assertEquals(true,cf_4_1.getSubValue(CharFlagsTextProp.BOLD_IDX));
+               assertEquals(true,cf_4_1.getSubValue(CharFlagsTextProp.ITALIC_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.ENABLE_NUMBERING_1_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.ENABLE_NUMBERING_2_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.RELIEF_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.RESET_NUMBERING_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.SHADOW_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.STRIKETHROUGH_IDX));
+               assertEquals(false,cf_4_1.getSubValue(CharFlagsTextProp.UNDERLINE_IDX));
+               
+               // The value should now be 3
+               assertEquals(0x0003, cf_4_1.getValue());
+       }
+       
+       public void testFindAddTextProp() {
+               StyleTextPropAtom stpb = new StyleTextPropAtom(data_b,0,data_b.length);
+               stpb.setParentTextSize(data_b_text_len);
+
+               LinkedList b_p_l = stpb.getParagraphStyles();
+               TextPropCollection b_p_1 = (TextPropCollection)b_p_l.get(0);
+               TextPropCollection b_p_2 = (TextPropCollection)b_p_l.get(1);
+               TextPropCollection b_p_3 = (TextPropCollection)b_p_l.get(2);
+               TextPropCollection b_p_4 = (TextPropCollection)b_p_l.get(3);
+               
+               LinkedList b_ch_l = stpb.getCharacterStyles();
+               TextPropCollection b_ch_1 = (TextPropCollection)b_ch_l.get(0);
+               TextPropCollection b_ch_2 = (TextPropCollection)b_ch_l.get(1);
+               TextPropCollection b_ch_3 = (TextPropCollection)b_ch_l.get(2);
+               TextPropCollection b_ch_4 = (TextPropCollection)b_ch_l.get(3);
+
+               // CharFlagsTextProp: 3 doesn't have, 4 does
+               assertNull(b_ch_3.findByName("char_flags"));
+               assertNotNull(b_ch_4.findByName("char_flags"));
+               
+               // Now add in on 3, should go to front
+               assertEquals(2, b_ch_3.getTextPropList().size());
+               TextProp new_cftp = b_ch_3.addWithName("char_flags");
+               assertEquals(3, b_ch_3.getTextPropList().size());
+               assertEquals(new_cftp, b_ch_3.getTextPropList().get(0));
+               
+               // alignment: 1 does have, 2 doesn't
+               assertNotNull(b_p_1.findByName("alignment"));
+               assertNull(b_p_2.findByName("alignment"));
+               
+               // Now add in on 2, should go to the front
+               assertEquals(1, b_p_2.getTextPropList().size());
+               TextProp new_al = b_p_2.addWithName("alignment");
+               assertEquals(2, b_p_2.getTextPropList().size());
+               assertEquals(new_al, b_p_2.getTextPropList().get(0));
+               
+               // This should go at the end
+               TextProp new_sa = b_p_2.addWithName("spaceafter");
+               assertEquals(3, b_p_2.getTextPropList().size());
+               assertEquals(new_sa, b_p_2.getTextPropList().get(2));
+               
+               // Check we get an error with a made up one
+               try {
+                       b_p_2.addWithName("madeUpOne");
+                       fail();
+               } catch(IllegalArgumentException e) {
+                       // Good, as expected
+               }
        }
 
 
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestRichTextRun.java
new file mode 100644 (file)
index 0000000..6bb4767
--- /dev/null
@@ -0,0 +1,88 @@
+package org.apache.poi.hslf.usermodel;
+
+import org.apache.poi.hslf.HSLFSlideShow;
+import org.apache.poi.hslf.model.Slide;
+import org.apache.poi.hslf.model.TextRun;
+
+import junit.framework.TestCase;
+
+/**
+ * Test that the friendly getters and setters on RichTextRun
+ *  behave as expected.
+ * (model.TestTextRun tests the other functionality)
+ * @author Nick Burch (nick at torchbox dot com)
+ */
+public class TestRichTextRun extends TestCase {
+       // SlideShow primed on the test data
+       private SlideShow ss;
+       private SlideShow ssRich;
+       private HSLFSlideShow hss;
+       private HSLFSlideShow hssRich;
+       
+    protected void setUp() throws Exception {
+               String dirname = System.getProperty("HSLF.testdata.path");
+               
+               // Basic (non rich) test file
+               String filename = dirname + "/basic_test_ppt_file.ppt";
+               hss = new HSLFSlideShow(filename);
+               ss = new SlideShow(hss);
+               
+               // Rich test file
+               filename = dirname + "/Single_Coloured_Page.ppt";
+               hssRich = new HSLFSlideShow(filename);
+               ssRich = new SlideShow(hssRich);
+       }
+
+       /**
+        * Test the stuff about getting/setting bold
+        *  on a non rich text run
+        */
+       public void testBoldNonRich() throws Exception {
+               Slide slideOne = ss.getSlides()[0];
+               TextRun[] textRuns = slideOne.getTextRuns();
+               RichTextRun rtr = textRuns[0].getRichTextRuns()[0];
+               
+               assertNull(rtr._getRawCharacterStyle());
+               assertNull(rtr._getRawParagraphStyle());
+               assertFalse(rtr.isBold());
+               
+               // Now set it to not bold
+               rtr.setBold(false);
+               assertNotNull(rtr._getRawCharacterStyle());
+               assertNotNull(rtr._getRawParagraphStyle());
+               assertFalse(rtr.isBold());
+               
+               // And now make it bold
+               rtr.setBold(true);
+               assertNotNull(rtr._getRawCharacterStyle());
+               assertNotNull(rtr._getRawParagraphStyle());
+               assertTrue(rtr.isBold());
+       }
+
+       /**
+        * Test the stuff about getting/setting bold
+        *  on a rich text run
+        */
+       public void testBoldRich() throws Exception {
+               Slide slideOneR = ssRich.getSlides()[0];
+               TextRun[] textRunsR = slideOneR.getTextRuns();
+               RichTextRun[] rtrs = textRunsR[1].getRichTextRuns();
+               assertEquals(3, rtrs.length);
+               
+               assertTrue(rtrs[0].isBold());
+               assertFalse(rtrs[1].isBold());
+               assertFalse(rtrs[2].isBold());
+               
+               rtrs[0].setBold(true);
+               rtrs[1].setBold(true);
+               
+               assertTrue(rtrs[0].isBold());
+               assertTrue(rtrs[1].isBold());
+               
+               rtrs[0].setBold(false);
+               rtrs[1].setBold(false);
+               
+               assertFalse(rtrs[0].isBold());
+               assertFalse(rtrs[1].isBold());
+       }
+}