--- /dev/null
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.xwpf.usermodel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Specifies the types of patterns which may be used to create the underline
+ * applied beneath the text in a run.
+ *
+ * @author Gisella Bronzetti
+ */
+public enum UnderlinePatterns {
+
+ /**
+ * Specifies an underline consisting of a single line beneath all characters
+ * in this run.
+ */
+ SINGLE(1),
+
+ /**
+ * Specifies an underline consisting of a single line beneath all non-space
+ * characters in the run. There shall be no underline beneath any space
+ * character (breaking or non-breaking).
+ */
+ WORDS(2),
+
+ /**
+ * Specifies an underline consisting of two lines beneath all characters in
+ * this run
+ */
+ DOUBLE(3),
+
+ /**
+ * Specifies an underline consisting of a single thick line beneath all
+ * characters in this run.
+ */
+ THICK(4),
+
+ /**
+ * Specifies an underline consisting of a series of dot characters beneath
+ * all characters in this run.
+ */
+ DOTTED(5),
+
+ /**
+ * Specifies an underline consisting of a series of thick dot characters
+ * beneath all characters in this run.
+ */
+ DOTTED_HEAVY(6),
+
+ /**
+ * Specifies an underline consisting of a dashed line beneath all characters
+ * in this run.
+ */
+ DASH(7),
+
+ /**
+ * Specifies an underline consisting of a series of thick dashes beneath all
+ * characters in this run.
+ */
+ DASHED_HEAVY(8),
+
+ /**
+ * Specifies an underline consisting of long dashed characters beneath all
+ * characters in this run.
+ */
+ DASH_LONG(9),
+
+ /**
+ * Specifies an underline consisting of thick long dashed characters beneath
+ * all characters in this run.
+ */
+ DASH_LONG_HEAVY(10),
+
+ /**
+ * Specifies an underline consisting of a series of dash, dot characters
+ * beneath all characters in this run.
+ */
+ DOT_DASH(11),
+
+ /**
+ * Specifies an underline consisting of a series of thick dash, dot
+ * characters beneath all characters in this run.
+ */
+ DASH_DOT_HEAVY(12),
+
+ /**
+ * Specifies an underline consisting of a series of dash, dot, dot
+ * characters beneath all characters in this run.
+ */
+ DOT_DOT_DASH(13),
+
+ /**
+ * Specifies an underline consisting of a series of thick dash, dot, dot
+ * characters beneath all characters in this run.
+ */
+ DASH_DOT_DOT_HEAVY(14),
+
+ /**
+ * Specifies an underline consisting of a single wavy line beneath all
+ * characters in this run.
+ */
+ WAVE(15),
+
+ /**
+ * Specifies an underline consisting of a single thick wavy line beneath all
+ * characters in this run.
+ */
+ WAVY_HEAVY(16),
+
+ /**
+ * Specifies an underline consisting of a pair of wavy lines beneath all
+ * characters in this run.
+ */
+ WAVY_DOUBLE(17),
+
+ /**
+ * Specifies no underline beneath this run.
+ */
+ NONE(18);
+
+ private final int value;
+
+ private UnderlinePatterns(int val) {
+ value = val;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ private static Map<Integer, UnderlinePatterns> imap = new HashMap<Integer, UnderlinePatterns>();
+ static {
+ for (UnderlinePatterns p : values()) {
+ imap.put(p.getValue(), p);
+ }
+ }
+
+ public static UnderlinePatterns valueOf(int type) {
+ UnderlinePatterns align = imap.get(type);
+ if (align == null)
+ throw new IllegalArgumentException("Unknown underline pattern: "
+ + type);
+ return align;
+ }
+
+}
-/* ====================================================================\r
- Licensed to the Apache Software Foundation (ASF) under one or more\r
- contributor license agreements. See the NOTICE file distributed with\r
- this work for additional information regarding copyright ownership.\r
- The ASF licenses this file to You under the Apache License, Version 2.0\r
- (the "License"); you may not use this file except in compliance with\r
- the License. You may obtain a copy of the License at\r
-\r
- http://www.apache.org/licenses/LICENSE-2.0\r
-\r
- Unless required by applicable law or agreed to in writing, software\r
- distributed under the License is distributed on an "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- See the License for the specific language governing permissions and\r
- limitations under the License.\r
-==================================================================== */\r
-package org.apache.poi.xwpf.usermodel;\r
-\r
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;\r
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;\r
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;\r
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;\r
-\r
-/**\r
- * XWPFRun object defines a region of text with a common set of properties\r
- *\r
- * @author Yegor Kozlov\r
- */\r
-public class XWPFRun {\r
- private CTR run;\r
- private XWPFParagraph paragraph;\r
-\r
- /**\r
- *\r
- * @param r the CTR bean which holds the run attributes\r
- * @param p the parent paragraph\r
- */\r
- protected XWPFRun(CTR r, XWPFParagraph p){\r
- this.run = r;\r
- this.paragraph = p;\r
- }\r
-\r
- public CTR getCTR(){\r
- return run;\r
- }\r
-\r
- public XWPFParagraph getParagraph(){\r
- return paragraph;\r
- }\r
-\r
- /**\r
- * Whether the bold property shall be applied to all non-complex script characters in the\r
- * contents of this run when displayed in a document\r
- *\r
- * @return <code>true</code> if the bold property is applied\r
- */\r
- public boolean isBold(){\r
- CTRPr pr = run.getRPr();\r
- return pr != null && pr.isSetB();\r
- }\r
-\r
- /**\r
- * Whether the bold property shall be applied to all non-complex script characters in the\r
- * contents of this run when displayed in a document\r
- *\r
- * <p>\r
- * This formatting property is a toggle property, which specifies that its behavior differs between its use within a\r
- * style definition and its use as direct formatting. When used as part of a style definition, setting this property\r
- * shall toggle the current state of that property as specified up to this point in the hierarchy (i.e. applied to not\r
- * applied, and vice versa). Setting it to <code>false</code> (or an equivalent) shall result in the current\r
- * setting remaining unchanged. However, when used as direct formatting, setting this property to true or false\r
- * shall set the absolute state of the resulting property.\r
- * </p>\r
- * <p>\r
- * If this element is not present, the default value is to leave the formatting applied at previous level in the style\r
- * hierarchy. If this element is never applied in the style hierarchy, then bold shall not be applied to non-complex\r
- * script characters.\r
- * </p>\r
- *\r
- * @param value <code>true</code> if the bold property is applied to this run\r
- */\r
- public void setBold(boolean value){\r
- CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();\r
- pr.addNewB().setVal(value ? STOnOff.TRUE : STOnOff.FALSE);\r
- }\r
-\r
- /**\r
- * Return the string content of this text run\r
- *\r
- * @return the text of this text run or <code>null</code> if not set\r
- */\r
- public String getText(){\r
- return run.sizeOfTArray() == 0 ? null : run.getTArray(0).getStringValue();\r
- }\r
-\r
- /**\r
- * Sets the text of this text run\r
- *\r
- * @param value the literal text which shall be displayed in the document\r
- */\r
- public void setText(String value){\r
- CTText t = run.sizeOfTArray() == 0 ? run.addNewT() : run.getTArray(0);\r
- t.setStringValue(value);\r
- }\r
-}\r
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.xwpf.usermodel;
+
+import java.math.BigInteger;
+
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSignedHpsMeasure;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalAlignRun;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
+
+/**
+ * XWPFRun object defines a region of text with a common set of properties
+ *
+ * @author Yegor Kozlov
+ */
+public class XWPFRun {
+ private CTR run;
+ private XWPFParagraph paragraph;
+
+ /**
+ * @param r the CTR bean which holds the run attributes
+ * @param p the parent paragraph
+ */
+ protected XWPFRun(CTR r, XWPFParagraph p) {
+ this.run = r;
+ this.paragraph = p;
+ }
+
+ public CTR getCTR() {
+ return run;
+ }
+
+ public XWPFParagraph getParagraph() {
+ return paragraph;
+ }
+
+ /**
+ * Whether the bold property shall be applied to all non-complex script
+ * characters in the contents of this run when displayed in a document
+ *
+ * @return <code>true</code> if the bold property is applied
+ */
+ public boolean isBold() {
+ CTRPr pr = run.getRPr();
+ return pr != null && pr.isSetB();
+ }
+
+ /**
+ * Whether the bold property shall be applied to all non-complex script
+ * characters in the contents of this run when displayed in a document
+ * <p/>
+ * <p/>
+ * This formatting property is a toggle property, which specifies that its
+ * behavior differs between its use within a style definition and its use as
+ * direct formatting. When used as part of a style definition, setting this
+ * property shall toggle the current state of that property as specified up
+ * to this point in the hierarchy (i.e. applied to not applied, and vice
+ * versa). Setting it to <code>false</code> (or an equivalent) shall
+ * result in the current setting remaining unchanged. However, when used as
+ * direct formatting, setting this property to true or false shall set the
+ * absolute state of the resulting property.
+ * </p>
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then bold shall not be
+ * applied to non-complex script characters.
+ * </p>
+ *
+ * @param value <code>true</code> if the bold property is applied to
+ * this run
+ */
+ public void setBold(boolean value) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTOnOff bold = pr.isSetB() ? pr.getB() : pr.addNewB();
+ bold.setVal(value ? STOnOff.TRUE : STOnOff.FALSE);
+ }
+
+ /**
+ * Return the string content of this text run
+ *
+ * @return the text of this text run or <code>null</code> if not set
+ */
+ public String getText() {
+ return run.sizeOfTArray() == 0 ? null : run.getTArray(0)
+ .getStringValue();
+ }
+
+ /**
+ * Sets the text of this text run
+ *
+ * @param value the literal text which shall be displayed in the document
+ */
+ public void setText(String value) {
+ CTText t = run.sizeOfTArray() == 0 ? run.addNewT() : run.getTArray(0);
+ t.setStringValue(value);
+ }
+
+ /**
+ * Whether the italic property should be applied to all non-complex script
+ * characters in the contents of this run when displayed in a document.
+ *
+ * @return <code>true</code> if the italic property is applied
+ */
+ public boolean isItalic() {
+ CTRPr pr = run.getRPr();
+ return pr != null && pr.isSetI();
+ }
+
+ /**
+ * Whether the bold property shall be applied to all non-complex script
+ * characters in the contents of this run when displayed in a document
+ * <p/>
+ * <p/>
+ * This formatting property is a toggle property, which specifies that its
+ * behavior differs between its use within a style definition and its use as
+ * direct formatting. When used as part of a style definition, setting this
+ * property shall toggle the current state of that property as specified up
+ * to this point in the hierarchy (i.e. applied to not applied, and vice
+ * versa). Setting it to <code>false</code> (or an equivalent) shall
+ * result in the current setting remaining unchanged. However, when used as
+ * direct formatting, setting this property to true or false shall set the
+ * absolute state of the resulting property.
+ * </p>
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then bold shall not be
+ * applied to non-complex script characters.
+ * </p>
+ *
+ * @param value <code>true</code> if the italic property is applied to
+ * this run
+ */
+ public void setItalic(boolean value) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTOnOff italic = pr.isSetI() ? pr.getI() : pr.addNewI();
+ italic.setVal(value ? STOnOff.TRUE : STOnOff.FALSE);
+ }
+
+ /**
+ * Specifies that the contents of this run should be displayed along with an
+ * underline appearing directly below the character heigh
+ *
+ * @return the Underline pattern applyed to this run
+ * @see UnderlinePatterns
+ */
+ public UnderlinePatterns getUnderline() {
+ CTRPr pr = run.getRPr();
+ return (pr != null && pr.isSetU()) ? UnderlinePatterns.valueOf(pr
+ .getU().getVal().intValue()) : null;
+ }
+
+ /**
+ * Specifies that the contents of this run should be displayed along with an
+ * underline appearing directly below the character heigh
+ * <p/>
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then an underline shall
+ * not be applied to the contents of this run.
+ * </p>
+ *
+ * @param value -
+ * underline type
+ * @see UnderlinePatterns : all possible patterns that could be applied
+ */
+ public void setUnderline(UnderlinePatterns value) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTUnderline underline = pr.isSetU() ? pr.getU() : pr.addNewU();
+ underline.setVal(STUnderline.Enum.forInt(value.getValue()));
+ }
+
+ /**
+ * Specifies that the contents of this run shall be displayed with a single
+ * horizontal line through the center of the line.
+ *
+ * @return <code>true</code> if the strike property is applied
+ */
+ public boolean isStrike() {
+ CTRPr pr = run.getRPr();
+ return pr != null && pr.isSetStrike();
+ }
+
+ /**
+ * Specifies that the contents of this run shall be displayed with a single
+ * horizontal line through the center of the line.
+ * <p/>
+ * This formatting property is a toggle property, which specifies that its
+ * behavior differs between its use within a style definition and its use as
+ * direct formatting. When used as part of a style definition, setting this
+ * property shall toggle the current state of that property as specified up
+ * to this point in the hierarchy (i.e. applied to not applied, and vice
+ * versa). Setting it to false (or an equivalent) shall result in the
+ * current setting remaining unchanged. However, when used as direct
+ * formatting, setting this property to true or false shall set the absolute
+ * state of the resulting property.
+ * </p>
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then strikethrough shall
+ * not be applied to the contents of this run.
+ * </p>
+ *
+ * @param value <code>true</code> if the strike property is applied to
+ * this run
+ */
+ public void setStrike(boolean value) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTOnOff strike = pr.isSetStrike() ? pr.getStrike() : pr.addNewStrike();
+ strike.setVal(value ? STOnOff.TRUE : STOnOff.FALSE);
+ }
+
+ /**
+ * Specifies the alignment which shall be applied to the contents of this
+ * run in relation to the default appearance of the run's text.
+ * This allows the text to be repositioned as subscript or superscript without
+ * altering the font size of the run properties.
+ *
+ * @return VerticalAlign
+ * @see VerticalAlign all possible value that could be applyed to this run
+ */
+ public VerticalAlign getSubscript() {
+ CTRPr pr = run.getRPr();
+ return (pr != null && pr.isSetVertAlign()) ? VerticalAlign.valueOf(pr
+ .getVertAlign().getVal().intValue()) : null;
+ }
+
+ /**
+ * Specifies the alignment which shall be applied to the contents of this
+ * run in relation to the default appearance of the run's text. This allows
+ * the text to be repositioned as subscript or superscript without altering
+ * the font size of the run properties.
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then the text shall not
+ * be subscript or superscript relative to the default baseline location for
+ * the contents of this run.
+ * </p>
+ *
+ * @param valign
+ * @see VerticalAlign
+ */
+ public void setSubscript(VerticalAlign valign) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTVerticalAlignRun ctValign = pr.isSetVertAlign() ? pr.getVertAlign() : pr.addNewVertAlign();
+ ctValign.setVal(STVerticalAlignRun.Enum.forInt(valign.getValue()));
+ }
+
+ /**
+ * Specifies the fonts which shall be used to display the text contents of
+ * this run. Specifies a font which shall be used to format all characters
+ * in the ASCII range (0 - 127) within the parent run
+ *
+ * @return a string representing the font family
+ */
+ public String getFontFamily() {
+ CTRPr pr = run.getRPr();
+ return (pr != null && pr.isSetRFonts()) ? pr.getRFonts().getAscii()
+ : null;
+ }
+
+ /**
+ * Specifies the fonts which shall be used to display the text contents of
+ * this run. Specifies a font which shall be used to format all characters
+ * in the ASCII range (0 - 127) within the parent run
+ *
+ * @param fontFamily
+ */
+ public void setFontFamily(String fontFamily) {
+ CTRPr pr = run.getRPr();
+ CTFonts fonts = pr.isSetRFonts() ? pr.getRFonts() : pr.addNewRFonts();
+ fonts.setAscii(fontFamily);
+ }
+
+ /**
+ * Specifies the font size which shall be applied to all non complex script
+ * characters in the contents of this run when displayed.
+ *
+ * @return value representing the font size
+ */
+ public BigInteger getFontSize() {
+ CTRPr pr = run.getRPr();
+ return (pr != null && pr.isSetSz()) ? pr.getSz().getVal() : null;
+ }
+
+ /**
+ * Specifies the font size which shall be applied to all non complex script
+ * characters in the contents of this run when displayed.
+ * <p/>
+ * If this element is not present, the default value is to leave the value
+ * applied at previous level in the style hierarchy. If this element is
+ * never applied in the style hierarchy, then any appropriate font size may
+ * be used for non complex script characters.
+ * </p>
+ *
+ * @param size
+ */
+ public void setFontSize(BigInteger size) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTHpsMeasure ctSize = pr.isSetSz() ? pr.getSz() : pr.addNewSz();
+ ctSize.setVal(size);
+ }
+
+ /**
+ * This element specifies the amount by which text shall be raised or
+ * lowered for this run in relation to the default baseline of the
+ * surrounding non-positioned text. This allows the text to be repositioned
+ * without altering the font size of the contents.
+ *
+ * @return a big integer representing the amount of text shall be "moved"
+ */
+ public BigInteger getTextPosition() {
+ CTRPr pr = run.getRPr();
+ return (pr != null && pr.isSetPosition()) ? pr.getPosition().getVal()
+ : null;
+ }
+
+ /**
+ * This element specifies the amount by which text shall be raised or
+ * lowered for this run in relation to the default baseline of the
+ * surrounding non-positioned text. This allows the text to be repositioned
+ * without altering the font size of the contents.
+ * <p/>
+ * If the val attribute is positive, then the parent run shall be raised
+ * above the baseline of the surrounding text by the specified number of
+ * half-points. If the val attribute is negative, then the parent run shall
+ * be lowered below the baseline of the surrounding text by the specified
+ * number of half-points.
+ * </p>
+ * <p/>
+ * If this element is not present, the default value is to leave the
+ * formatting applied at previous level in the style hierarchy. If this
+ * element is never applied in the style hierarchy, then the text shall not
+ * be raised or lowered relative to the default baseline location for the
+ * contents of this run.
+ * </p>
+ *
+ * @param val
+ */
+ public void setTextPosition(BigInteger val) {
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ CTSignedHpsMeasure position = pr.isSetPosition() ? pr.getPosition() : pr.addNewPosition();
+ position.setVal(val);
+ }
+
+}
--- /dev/null
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.xwpf.usermodel;
+
+import java.math.BigInteger;
+
+import junit.framework.TestCase;
+
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
+
+/**
+ * Tests for XWPF Run
+ */
+public class TestXWPFRun extends TestCase {
+
+ public CTR ctRun;
+ public XWPFParagraph p;
+
+ protected void setUp() {
+ XWPFDocument doc = new XWPFDocument();
+ p = doc.createParagraph();
+
+ this.ctRun = CTR.Factory.newInstance();
+
+ }
+
+ public void testSetGetBold() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewB().setVal(STOnOff.TRUE);
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(true, run.isBold());
+
+ run.setBold(false);
+ assertEquals(STOnOff.FALSE, rpr.getB().getVal());
+ }
+
+ public void testSetGetItalic() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewI().setVal(STOnOff.TRUE);
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(true, run.isItalic());
+
+ run.setItalic(false);
+ assertEquals(STOnOff.FALSE, rpr.getI().getVal());
+ }
+
+ public void testSetGetStrike() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewStrike().setVal(STOnOff.TRUE);
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(true, run.isStrike());
+
+ run.setStrike(false);
+ assertEquals(STOnOff.FALSE, rpr.getStrike().getVal());
+ }
+
+ public void testSetGetUnderline() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewU().setVal(STUnderline.DASH);
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(UnderlinePatterns.DASH.getValue(), run.getUnderline()
+ .getValue());
+
+ run.setUnderline(UnderlinePatterns.NONE);
+ assertEquals(STUnderline.NONE.intValue(), rpr.getU().getVal()
+ .intValue());
+ }
+
+ public void testSetGetVAlign() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewVertAlign().setVal(STVerticalAlignRun.SUBSCRIPT);
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(VerticalAlign.SUBSCRIPT, run.getSubscript());
+
+ run.setSubscript(VerticalAlign.BASELINE);
+ assertEquals(STVerticalAlignRun.BASELINE, rpr.getVertAlign().getVal());
+ }
+
+ public void testSetGetFontFamily() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewRFonts().setAscii("Times New Roman");
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals("Times New Roman", run.getFontFamily());
+
+ run.setFontFamily("Verdana");
+ assertEquals("Verdana", rpr.getRFonts().getAscii());
+ }
+
+ public void testSetGetFontSize() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewSz().setVal(new BigInteger("4000"));
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(4000, run.getFontSize().longValue());
+
+ run.setFontSize(new BigInteger("2400"));
+ assertEquals(2400, rpr.getSz().getVal().longValue());
+ }
+
+ public void testSetGetTextForegroundBackground() {
+ CTRPr rpr = ctRun.addNewRPr();
+ rpr.addNewPosition().setVal(new BigInteger("4000"));
+
+ XWPFRun run = new XWPFRun(ctRun, p);
+ assertEquals(4000, run.getTextPosition().longValue());
+
+ run.setTextPosition(new BigInteger("2400"));
+ assertEquals(2400, rpr.getPosition().getVal().longValue());
+ }
+
+}