| /* ==================================================================== |
| 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 static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.IOException; |
| import java.math.BigInteger; |
| import java.util.List; |
| |
| import org.apache.poi.xwpf.XWPFTestDataSamples; |
| import org.junit.Test; |
| import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; |
| import org.openxmlformats.schemas.drawingml.x2006.picture.PicDocument; |
| import org.openxmlformats.schemas.drawingml.x2006.picture.impl.PicDocumentImpl; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPBdr; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; |
| import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment; |
| |
| /** |
| * Tests for XWPF Paragraphs |
| */ |
| public final class TestXWPFParagraph { |
| |
| /** |
| * Check that we get the right paragraph from the header |
| * |
| * @throws IOException |
| */ |
| @Test |
| public void testHeaderParagraph() throws IOException { |
| XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); |
| |
| XWPFHeader hdr = xml.getHeaderFooterPolicy().getDefaultHeader(); |
| assertNotNull(hdr); |
| |
| List<XWPFParagraph> ps = hdr.getParagraphs(); |
| assertEquals(1, ps.size()); |
| XWPFParagraph p = ps.get(0); |
| |
| assertEquals(5, p.getCTP().sizeOfRArray()); |
| assertEquals("First header column!\tMid header\tRight header!", p.getText()); |
| |
| xml.close(); |
| } |
| |
| /** |
| * Check that we get the right paragraphs from the document |
| * |
| * @throws IOException |
| */ |
| @Test |
| public void testDocumentParagraph() throws IOException { |
| XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); |
| List<XWPFParagraph> ps = xml.getParagraphs(); |
| assertEquals(10, ps.size()); |
| |
| assertFalse(ps.get(0).isEmpty()); |
| assertEquals( |
| "This is a sample word document. It has two pages. It has a three column heading, but no footer.", |
| ps.get(0).getText()); |
| |
| assertTrue(ps.get(1).isEmpty()); |
| assertEquals("", ps.get(1).getText()); |
| |
| assertFalse(ps.get(2).isEmpty()); |
| assertEquals("HEADING TEXT", ps.get(2).getText()); |
| |
| assertTrue(ps.get(3).isEmpty()); |
| assertEquals("", ps.get(3).getText()); |
| |
| assertFalse(ps.get(4).isEmpty()); |
| assertEquals("More on page one", ps.get(4).getText()); |
| |
| xml.close(); |
| } |
| |
| @Test |
| public void testSetGetBorderTop() throws IOException { |
| //new clean instance of paragraph |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| assertEquals(STBorder.NONE.intValue(), p.getBorderTop().getValue()); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| //bordi |
| CTPBdr bdr = ppr.addNewPBdr(); |
| CTBorder borderTop = bdr.addNewTop(); |
| borderTop.setVal(STBorder.DOUBLE); |
| bdr.setTop(borderTop); |
| |
| assertEquals(Borders.DOUBLE, p.getBorderTop()); |
| p.setBorderTop(Borders.SINGLE); |
| assertEquals(STBorder.SINGLE, borderTop.getVal()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetAlignment() throws IOException { |
| //new clean instance of paragraph |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| assertEquals(STJc.LEFT.intValue(), p.getAlignment().getValue()); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| CTJc align = ppr.addNewJc(); |
| align.setVal(STJc.CENTER); |
| assertEquals(ParagraphAlignment.CENTER, p.getAlignment()); |
| |
| p.setAlignment(ParagraphAlignment.BOTH); |
| assertEquals(STJc.BOTH, ppr.getJc().getVal()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetSpacing() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| assertEquals(-1, p.getSpacingAfter()); |
| |
| CTSpacing spacing = ppr.addNewSpacing(); |
| spacing.setAfter(new BigInteger("10")); |
| assertEquals(10, p.getSpacingAfter()); |
| |
| p.setSpacingAfter(100); |
| assertEquals(100, spacing.getAfter().intValue()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetSpacingLineRule() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| assertEquals(STLineSpacingRule.INT_AUTO, p.getSpacingLineRule().getValue()); |
| |
| CTSpacing spacing = ppr.addNewSpacing(); |
| spacing.setLineRule(STLineSpacingRule.AT_LEAST); |
| assertEquals(LineSpacingRule.AT_LEAST, p.getSpacingLineRule()); |
| |
| p.setSpacingAfter(100); |
| assertEquals(100, spacing.getAfter().intValue()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetIndentation() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| assertEquals(-1, p.getIndentationLeft()); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| assertEquals(-1, p.getIndentationLeft()); |
| |
| CTInd ind = ppr.addNewInd(); |
| ind.setLeft(new BigInteger("10")); |
| assertEquals(10, p.getIndentationLeft()); |
| |
| p.setIndentationLeft(100); |
| assertEquals(100, ind.getLeft().intValue()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetVerticalAlignment() throws IOException { |
| //new clean instance of paragraph |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| CTTextAlignment txtAlign = ppr.addNewTextAlignment(); |
| txtAlign.setVal(STTextAlignment.CENTER); |
| assertEquals(TextAlignment.CENTER, p.getVerticalAlignment()); |
| |
| p.setVerticalAlignment(TextAlignment.BOTTOM); |
| assertEquals(STTextAlignment.BOTTOM, ppr.getTextAlignment().getVal()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetWordWrap() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| CTOnOff wordWrap = ppr.addNewWordWrap(); |
| wordWrap.setVal(STOnOff.FALSE); |
| assertEquals(false, p.isWordWrap()); |
| |
| p.setWordWrapped(true); |
| assertEquals(STOnOff.TRUE, ppr.getWordWrap().getVal()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSetGetPageBreak() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTP ctp = p.getCTP(); |
| CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); |
| |
| CTOnOff pageBreak = ppr.addNewPageBreakBefore(); |
| pageBreak.setVal(STOnOff.FALSE); |
| assertEquals(false, p.isPageBreak()); |
| |
| p.setPageBreak(true); |
| assertEquals(STOnOff.TRUE, ppr.getPageBreakBefore().getVal()); |
| doc.close(); |
| } |
| |
| @Test |
| public void testBookmarks() throws IOException { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("bookmarks.docx"); |
| XWPFParagraph paragraph = doc.getParagraphs().get(0); |
| assertEquals("Sample Word Document", paragraph.getText()); |
| assertEquals(1, paragraph.getCTP().sizeOfBookmarkStartArray()); |
| assertEquals(0, paragraph.getCTP().sizeOfBookmarkEndArray()); |
| CTBookmark ctBookmark = paragraph.getCTP().getBookmarkStartArray(0); |
| assertEquals("poi", ctBookmark.getName()); |
| for (CTBookmark bookmark : paragraph.getCTP().getBookmarkStartList()) { |
| assertEquals("poi", bookmark.getName()); |
| } |
| doc.close(); |
| } |
| |
| @Test |
| public void testGetSetNumID() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| p.setNumID(new BigInteger("10")); |
| assertEquals("10", p.getNumID().toString()); |
| doc.close(); |
| } |
| |
| @Test |
| public void testAddingRuns() throws IOException { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx"); |
| |
| XWPFParagraph p = doc.getParagraphs().get(0); |
| assertEquals(2, p.getRuns().size()); |
| |
| XWPFRun r = p.createRun(); |
| assertEquals(3, p.getRuns().size()); |
| assertEquals(2, p.getRuns().indexOf(r)); |
| |
| XWPFRun r2 = p.insertNewRun(1); |
| assertEquals(4, p.getRuns().size()); |
| assertEquals(1, p.getRuns().indexOf(r2)); |
| assertEquals(3, p.getRuns().indexOf(r)); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testPictures() throws IOException { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("VariousPictures.docx"); |
| assertEquals(7, doc.getParagraphs().size()); |
| |
| XWPFParagraph p; |
| XWPFRun r; |
| |
| // Text paragraphs |
| assertEquals("Sheet with various pictures", doc.getParagraphs().get(0).getText()); |
| assertEquals("(jpeg, png, wmf, emf and pict) ", doc.getParagraphs().get(1).getText()); |
| |
| // Spacer ones |
| assertEquals("", doc.getParagraphs().get(2).getText()); |
| assertEquals("", doc.getParagraphs().get(3).getText()); |
| assertEquals("", doc.getParagraphs().get(4).getText()); |
| |
| // Image one |
| p = doc.getParagraphs().get(5); |
| assertEquals(6, p.getRuns().size()); |
| |
| r = p.getRuns().get(0); |
| assertEquals("", r.toString()); |
| assertEquals(1, r.getEmbeddedPictures().size()); |
| assertNotNull(r.getEmbeddedPictures().get(0).getPictureData()); |
| assertEquals("image1.wmf", r.getEmbeddedPictures().get(0).getPictureData().getFileName()); |
| |
| r = p.getRuns().get(1); |
| assertEquals("", r.toString()); |
| assertEquals(1, r.getEmbeddedPictures().size()); |
| assertNotNull(r.getEmbeddedPictures().get(0).getPictureData()); |
| assertEquals("image2.png", r.getEmbeddedPictures().get(0).getPictureData().getFileName()); |
| |
| r = p.getRuns().get(2); |
| assertEquals("", r.toString()); |
| assertEquals(1, r.getEmbeddedPictures().size()); |
| assertNotNull(r.getEmbeddedPictures().get(0).getPictureData()); |
| assertEquals("image3.emf", r.getEmbeddedPictures().get(0).getPictureData().getFileName()); |
| |
| r = p.getRuns().get(3); |
| assertEquals("", r.toString()); |
| assertEquals(1, r.getEmbeddedPictures().size()); |
| assertNotNull(r.getEmbeddedPictures().get(0).getPictureData()); |
| assertEquals("image4.emf", r.getEmbeddedPictures().get(0).getPictureData().getFileName()); |
| |
| r = p.getRuns().get(4); |
| assertEquals("", r.toString()); |
| assertEquals(1, r.getEmbeddedPictures().size()); |
| assertNotNull(r.getEmbeddedPictures().get(0).getPictureData()); |
| assertEquals("image5.jpeg", r.getEmbeddedPictures().get(0).getPictureData().getFileName()); |
| |
| r = p.getRuns().get(5); |
| assertEquals(" ", r.toString()); |
| assertEquals(0, r.getEmbeddedPictures().size()); |
| |
| // Final spacer |
| assertEquals("", doc.getParagraphs().get(6).getText()); |
| |
| |
| // Look in detail at one |
| r = p.getRuns().get(4); |
| XWPFPicture pict = r.getEmbeddedPictures().get(0); |
| CTPicture picture = pict.getCTPicture(); |
| assertEquals("rId8", picture.getBlipFill().getBlip().getEmbed()); |
| |
| // Ensure that the ooxml compiler finds everything we need |
| r.getCTR().getDrawingArray(0); |
| r.getCTR().getDrawingArray(0).getInlineArray(0); |
| r.getCTR().getDrawingArray(0).getInlineArray(0).getGraphic(); |
| r.getCTR().getDrawingArray(0).getInlineArray(0).getGraphic().getGraphicData(); |
| PicDocument pd = new PicDocumentImpl(null); |
| assertTrue(pd.isNil()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testTika792() throws Exception { |
| //This test forces the loading of CTMoveBookmark and |
| //CTMoveBookmarkImpl into ooxml-lite. |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Tika-792.docx"); |
| XWPFParagraph paragraph = doc.getParagraphs().get(0); |
| assertEquals("s", paragraph.getText()); |
| doc.close(); |
| } |
| |
| @Test |
| public void testSettersGetters() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| assertTrue(p.isEmpty()); |
| assertFalse(p.removeRun(0)); |
| |
| p.setBorderTop(Borders.BABY_PACIFIER); |
| p.setBorderBetween(Borders.BABY_PACIFIER); |
| p.setBorderBottom(Borders.BABY_RATTLE); |
| |
| assertNotNull(p.getIRuns()); |
| assertEquals(0, p.getIRuns().size()); |
| assertFalse(p.isEmpty()); |
| assertNull(p.getStyleID()); |
| assertNull(p.getStyle()); |
| |
| assertNull(p.getNumID()); |
| p.setNumID(BigInteger.valueOf(12)); |
| assertEquals(BigInteger.valueOf(12), p.getNumID()); |
| p.setNumID(BigInteger.valueOf(13)); |
| assertEquals(BigInteger.valueOf(13), p.getNumID()); |
| |
| assertNull(p.getNumFmt()); |
| |
| assertNull(p.getNumIlvl()); |
| |
| assertEquals("", p.getParagraphText()); |
| assertEquals("", p.getPictureText()); |
| assertEquals("", p.getFootnoteText()); |
| |
| p.setBorderBetween(Borders.NONE); |
| assertEquals(Borders.NONE, p.getBorderBetween()); |
| p.setBorderBetween(Borders.BASIC_BLACK_DASHES); |
| assertEquals(Borders.BASIC_BLACK_DASHES, p.getBorderBetween()); |
| |
| p.setBorderBottom(Borders.NONE); |
| assertEquals(Borders.NONE, p.getBorderBottom()); |
| p.setBorderBottom(Borders.BABY_RATTLE); |
| assertEquals(Borders.BABY_RATTLE, p.getBorderBottom()); |
| |
| p.setBorderLeft(Borders.NONE); |
| assertEquals(Borders.NONE, p.getBorderLeft()); |
| p.setBorderLeft(Borders.BASIC_WHITE_SQUARES); |
| assertEquals(Borders.BASIC_WHITE_SQUARES, p.getBorderLeft()); |
| |
| p.setBorderRight(Borders.NONE); |
| assertEquals(Borders.NONE, p.getBorderRight()); |
| p.setBorderRight(Borders.BASIC_WHITE_DASHES); |
| assertEquals(Borders.BASIC_WHITE_DASHES, p.getBorderRight()); |
| |
| p.setBorderBottom(Borders.NONE); |
| assertEquals(Borders.NONE, p.getBorderBottom()); |
| p.setBorderBottom(Borders.BASIC_WHITE_DOTS); |
| assertEquals(Borders.BASIC_WHITE_DOTS, p.getBorderBottom()); |
| |
| assertFalse(p.isPageBreak()); |
| p.setPageBreak(true); |
| assertTrue(p.isPageBreak()); |
| p.setPageBreak(false); |
| assertFalse(p.isPageBreak()); |
| |
| assertEquals(-1, p.getSpacingAfter()); |
| p.setSpacingAfter(12); |
| assertEquals(12, p.getSpacingAfter()); |
| |
| assertEquals(-1, p.getSpacingAfterLines()); |
| p.setSpacingAfterLines(14); |
| assertEquals(14, p.getSpacingAfterLines()); |
| |
| assertEquals(-1, p.getSpacingBefore()); |
| p.setSpacingBefore(16); |
| assertEquals(16, p.getSpacingBefore()); |
| |
| assertEquals(-1, p.getSpacingBeforeLines()); |
| p.setSpacingBeforeLines(18); |
| assertEquals(18, p.getSpacingBeforeLines()); |
| |
| assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule()); |
| p.setSpacingLineRule(LineSpacingRule.EXACT); |
| assertEquals(LineSpacingRule.EXACT, p.getSpacingLineRule()); |
| |
| assertEquals(-1, p.getIndentationLeft()); |
| p.setIndentationLeft(21); |
| assertEquals(21, p.getIndentationLeft()); |
| |
| assertEquals(-1, p.getIndentationRight()); |
| p.setIndentationRight(25); |
| assertEquals(25, p.getIndentationRight()); |
| |
| assertEquals(-1, p.getIndentationHanging()); |
| p.setIndentationHanging(25); |
| assertEquals(25, p.getIndentationHanging()); |
| |
| assertEquals(-1, p.getIndentationFirstLine()); |
| p.setIndentationFirstLine(25); |
| assertEquals(25, p.getIndentationFirstLine()); |
| |
| assertFalse(p.isWordWrap()); |
| p.setWordWrapped(true); |
| assertTrue(p.isWordWrap()); |
| p.setWordWrapped(false); |
| assertFalse(p.isWordWrap()); |
| |
| assertNull(p.getStyle()); |
| p.setStyle("teststyle"); |
| assertEquals("teststyle", p.getStyle()); |
| |
| p.addRun(CTR.Factory.newInstance()); |
| |
| //assertTrue(p.removeRun(0)); |
| |
| assertNotNull(p.getBody()); |
| assertEquals(BodyElementType.PARAGRAPH, p.getElementType()); |
| assertEquals(BodyType.DOCUMENT, p.getPartType()); |
| |
| doc.close(); |
| } |
| |
| @Test |
| public void testSearchTextNotFound() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| assertNull(p.searchText("test", new PositionInParagraph())); |
| assertEquals("", p.getText()); |
| doc.close(); |
| } |
| |
| @Test |
| public void testSearchTextFound() throws IOException { |
| XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx"); |
| |
| List<XWPFParagraph> ps = xml.getParagraphs(); |
| assertEquals(10, ps.size()); |
| |
| XWPFParagraph p = ps.get(0); |
| |
| TextSegement segment = p.searchText("sample word document", new PositionInParagraph()); |
| assertNotNull(segment); |
| |
| assertEquals("sample word document", p.getText(segment)); |
| |
| assertTrue(p.removeRun(0)); |
| xml.close(); |
| } |
| |
| @Test |
| public void testFieldRuns() throws IOException { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FldSimple.docx"); |
| List<XWPFParagraph> ps = doc.getParagraphs(); |
| assertEquals(1, ps.size()); |
| |
| XWPFParagraph p = ps.get(0); |
| assertEquals(1, p.getRuns().size()); |
| assertEquals(1, p.getIRuns().size()); |
| |
| XWPFRun r = p.getRuns().get(0); |
| assertEquals(XWPFFieldRun.class, r.getClass()); |
| |
| XWPFFieldRun fr = (XWPFFieldRun)r; |
| assertEquals(" FILENAME \\* MERGEFORMAT ", fr.getFieldInstruction()); |
| assertEquals("FldSimple.docx", fr.text()); |
| assertEquals("FldSimple.docx", p.getText()); |
| doc.close(); |
| } |
| |
| @SuppressWarnings("deprecation") |
| @Test |
| public void testRuns() throws IOException { |
| XWPFDocument doc = new XWPFDocument(); |
| XWPFParagraph p = doc.createParagraph(); |
| |
| CTR run = CTR.Factory.newInstance(); |
| XWPFRun r = new XWPFRun(run, doc.createParagraph()); |
| p.addRun(r); |
| p.addRun(r); |
| |
| assertNotNull(p.getRun(run)); |
| assertNull(p.getRun(null)); |
| doc.close(); |
| } |
| |
| @Test |
| public void test58067() throws IOException { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("58067.docx"); |
| |
| StringBuilder str = new StringBuilder(); |
| for(XWPFParagraph par : doc.getParagraphs()) { |
| str.append(par.getText()).append("\n"); |
| } |
| assertEquals("This is a test.\n\n\n\n3\n4\n5\n\n\n\nThis is a whole paragraph where one word is deleted.\n", str.toString()); |
| } |
| |
| @Test |
| public void testNumberedLists() throws Exception { |
| XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("ComplexNumberedLists.docx"); |
| XWPFParagraph p; |
| |
| p = doc.getParagraphArray(0); |
| assertEquals("This is a document with numbered lists", p.getText()); |
| assertEquals(null, p.getNumID()); |
| assertEquals(null, p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(1); |
| assertEquals("Entry #1", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(2); |
| assertEquals("Entry #2, with children", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(3); |
| assertEquals("2-a", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(1), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(4); |
| assertEquals("2-b", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(1), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(5); |
| assertEquals("2-c", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(1), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(6); |
| assertEquals("Entry #3", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(7); |
| assertEquals("Entry #4", p.getText()); |
| assertEquals(BigInteger.valueOf(1), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| // New list |
| p = doc.getParagraphArray(8); |
| assertEquals("Restarted to 1 from 5", p.getText()); |
| assertEquals(BigInteger.valueOf(2), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(9); |
| assertEquals("Restarted @ 2", p.getText()); |
| assertEquals(BigInteger.valueOf(2), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| p = doc.getParagraphArray(10); |
| assertEquals("Restarted @ 3", p.getText()); |
| assertEquals(BigInteger.valueOf(2), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| assertEquals(null, p.getNumStartOverride()); |
| |
| // New list starting at 10 |
| p = doc.getParagraphArray(11); |
| assertEquals("Jump to new list at 10", p.getText()); |
| assertEquals(BigInteger.valueOf(6), p.getNumID()); |
| assertEquals(BigInteger.valueOf(0), p.getNumIlvl()); |
| // TODO Why isn't this seen as 10? |
| assertEquals(null, p.getNumStartOverride()); |
| |
| // TODO Shouldn't we use XWPFNumbering or similar here? |
| // TODO Make it easier to change |
| } |
| } |