123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877 |
- /* ====================================================================
- 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.jupiter.api.Assertions.assertEquals;
- import static org.junit.jupiter.api.Assertions.assertFalse;
- import static org.junit.jupiter.api.Assertions.assertNotNull;
- import static org.junit.jupiter.api.Assertions.assertNull;
- import static org.junit.jupiter.api.Assertions.assertTrue;
-
- import java.io.IOException;
- import java.math.BigInteger;
- import java.util.List;
-
- import org.apache.poi.util.StringUtil;
- import org.apache.poi.xwpf.XWPFTestDataSamples;
- import org.junit.jupiter.api.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.officeDocument.x2006.sharedTypes.STOnOff1;
- 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.STTextAlignment;
-
- /**
- * Tests for XWPF Paragraphs
- */
- public final class TestXWPFParagraph {
-
- /**
- * Check that we get the right paragraph from the header
- */
- @Test
- void testHeaderParagraph() throws IOException {
- try (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());
- }
- }
-
- /**
- * Check that we get the right paragraphs from the document
- */
- @Test
- void testDocumentParagraph() throws IOException {
- try (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());
- }
- }
-
- @Test
- void testSetGetBorderTop() throws IOException {
- //new clean instance of paragraph
- try (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();
-
- 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());
- }
- }
-
- @Test
- void testSetGetAlignment() throws IOException {
- //new clean instance of paragraph
- try (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());
- }
- }
-
- @Test
- void testSetGetSpacing() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
- XWPFParagraph p = doc.createParagraph();
-
- CTP ctp = p.getCTP();
- CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr();
-
- assertEquals(-1, p.getSpacingBefore());
- assertEquals(-1, p.getSpacingAfter());
- assertEquals(-1, p.getSpacingBetween(), 0.1);
- assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
-
- CTSpacing spacing = ppr.addNewSpacing();
- spacing.setAfter(new BigInteger("10"));
- assertEquals(10, p.getSpacingAfter());
- spacing.setBefore(new BigInteger("10"));
- assertEquals(10, p.getSpacingBefore());
-
- p.setSpacingAfter(100);
- assertEquals("100", spacing.xgetAfter().getStringValue());
- p.setSpacingBefore(100);
- assertEquals("100", spacing.xgetBefore().getStringValue());
-
- p.setSpacingBetween(.25, LineSpacingRule.EXACT);
- assertEquals(.25, p.getSpacingBetween(), 0.01);
- assertEquals(LineSpacingRule.EXACT, p.getSpacingLineRule());
- p.setSpacingBetween(1.25, LineSpacingRule.AUTO);
- assertEquals(1.25, p.getSpacingBetween(), 0.01);
- assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
- p.setSpacingBetween(.5, LineSpacingRule.AT_LEAST);
- assertEquals(.5, p.getSpacingBetween(), 0.01);
- assertEquals(LineSpacingRule.AT_LEAST, p.getSpacingLineRule());
- p.setSpacingBetween(1.15);
- assertEquals(1.15, p.getSpacingBetween(), 0.01);
- assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
- }
- }
-
- @Test
- void testSetGetSpacingLineRule() throws IOException {
- try (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.xgetAfter().getStringValue());
- }
- }
-
- @Test
- void testSetGetIndentationChars() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
- XWPFParagraph p = doc.createParagraph();
-
- assertEquals(-1, p.getIndentationLeftChars());
- assertEquals(-1, p.getIndentationRightChars());
- // set 1.5 characters
- p.setIndentationLeftChars(150);
- assertEquals(150, p.getIndentationLeftChars());
-
- p.setIndentationRightChars(250);
- assertEquals(250, p.getIndentationRightChars());
- }
- }
-
- @Test
- void testSetGetIndentation() throws IOException {
- try (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.xgetLeft().getStringValue());
- }
- }
- @Test
- void testSetGetVerticalAlignment() throws IOException {
- //new clean instance of paragraph
- try (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());
- }
- }
-
- @Test
- void testSetGetWordWrap() throws IOException {
- try (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(STOnOff1.OFF);
- assertFalse(p.isWordWrap());
-
- p.setWordWrapped(true);
- assertEquals("on", ppr.getWordWrap().getVal());
- }
- }
-
- @Test
- void testSetGetPageBreak() throws IOException {
- try (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(STOnOff1.OFF);
- assertFalse(p.isPageBreak());
-
- p.setPageBreak(true);
- assertEquals("on", ppr.getPageBreakBefore().getVal());
- }
- }
-
- @Test
- void testBookmarks() throws IOException {
- try (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());
- }
- }
- }
-
- @Test
- void testGetSetNumID() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
- XWPFParagraph p = doc.createParagraph();
-
- p.setNumID(new BigInteger("10"));
- assertEquals("10", p.getNumID().toString());
- }
- }
-
- @Test
- void testGetSetILvl() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
- XWPFParagraph p = doc.createParagraph();
-
- p.setNumILvl(new BigInteger("1"));
- assertEquals("1", p.getNumIlvl().toString());
- }
- }
-
- @Test
- void testAddingRuns() throws IOException {
- try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) {
-
- XWPFParagraph p = doc.getParagraphs().get(0);
- assertEquals(2, p.getRuns().size());
- assertEquals(2, p.getIRuns().size());
-
- XWPFRun r = p.createRun();
- assertEquals(3, p.getRuns().size());
- assertEquals(2, p.getRuns().indexOf(r));
-
- assertEquals(3, p.getIRuns().size());
- assertEquals(2, p.getIRuns().indexOf(r));
-
- XWPFRun r2 = p.insertNewRun(1);
- assertEquals(4, p.getRuns().size());
- assertEquals(1, p.getRuns().indexOf(r2));
- assertEquals(3, p.getRuns().indexOf(r));
-
- assertEquals(4, p.getIRuns().size());
- assertEquals(1, p.getIRuns().indexOf(r2));
- assertEquals(3, p.getIRuns().indexOf(r));
- }
- }
-
- @Test
- void testCreateNewRuns() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
-
- XWPFParagraph p = doc.createParagraph();
- XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org");
- XWPFFieldRun fieldRun = p.createFieldRun();
- XWPFRun r = p.createRun();
-
- assertEquals(3, p.getRuns().size());
- assertEquals(0, p.getRuns().indexOf(h));
- assertEquals(1, p.getRuns().indexOf(fieldRun));
- assertEquals(2, p.getRuns().indexOf(r));
-
- assertEquals(3, p.getIRuns().size());
- assertEquals(0, p.getIRuns().indexOf(h));
- assertEquals(1, p.getIRuns().indexOf(fieldRun));
- assertEquals(2, p.getIRuns().indexOf(r));
- }
- }
-
- @Test
- void testInsertNewRuns() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
-
- XWPFParagraph p = doc.createParagraph();
- XWPFRun r = p.createRun();
- assertEquals(1, p.getRuns().size());
- assertEquals(0, p.getRuns().indexOf(r));
-
- XWPFHyperlinkRun h = p.insertNewHyperlinkRun(0, "http://poi.apache.org");
- assertEquals(2, p.getRuns().size());
- assertEquals(0, p.getRuns().indexOf(h));
- assertEquals(1, p.getRuns().indexOf(r));
-
- XWPFFieldRun fieldRun2 = p.insertNewFieldRun(2);
- assertEquals(3, p.getRuns().size());
- assertEquals(2, p.getRuns().indexOf(fieldRun2));
- }
- }
-
- @Test
- void testRemoveRuns() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
-
- XWPFParagraph p = doc.createParagraph();
- XWPFRun r = p.createRun();
- p.createRun();
- XWPFHyperlinkRun hyperlinkRun = p
- .createHyperlinkRun("http://poi.apache.org");
- XWPFFieldRun fieldRun = p.createFieldRun();
-
- assertEquals(4, p.getRuns().size());
- assertEquals(2, p.getRuns().indexOf(hyperlinkRun));
- assertEquals(3, p.getRuns().indexOf(fieldRun));
-
- p.removeRun(2);
- assertEquals(3, p.getRuns().size());
- assertEquals(-1, p.getRuns().indexOf(hyperlinkRun));
- assertEquals(2, p.getRuns().indexOf(fieldRun));
-
- p.removeRun(0);
- assertEquals(2, p.getRuns().size());
- assertEquals(-1, p.getRuns().indexOf(r));
- assertEquals(1, p.getRuns().indexOf(fieldRun));
-
- p.removeRun(1);
- assertEquals(1, p.getRuns().size());
- assertEquals(-1, p.getRuns().indexOf(fieldRun));
- }
- }
-
- @Test
- void testRemoveAndInsertRunsWithOtherIRunElement()
- throws IOException {
- XWPFDocument doc = new XWPFDocument();
-
- XWPFParagraph p = doc.createParagraph();
- p.createRun();
- // add other run element
- p.getCTP().addNewSdt();
- // add two CTR in hyperlink
- XWPFHyperlinkRun hyperlinkRun = p
- .createHyperlinkRun("http://poi.apache.org");
- hyperlinkRun.getCTHyperlink().addNewR();
- p.createFieldRun();
-
- XWPFDocument doc2 = XWPFTestDataSamples.writeOutAndReadBack(doc);
- XWPFParagraph paragraph = doc2.getParagraphArray(0);
-
- assertEquals(4, paragraph.getRuns().size());
- assertEquals(5, paragraph.getIRuns().size());
-
- assertTrue(paragraph.getRuns().get(1) instanceof XWPFHyperlinkRun);
- assertTrue(paragraph.getRuns().get(2) instanceof XWPFHyperlinkRun);
- assertTrue(paragraph.getRuns().get(3) instanceof XWPFFieldRun);
-
- assertTrue(paragraph.getIRuns().get(1) instanceof XWPFSDT);
- assertTrue(paragraph.getIRuns().get(2) instanceof XWPFHyperlinkRun);
-
- paragraph.removeRun(1);
- assertEquals(3, paragraph.getRuns().size());
- assertTrue(paragraph.getRuns().get(1) instanceof XWPFHyperlinkRun);
- assertTrue(paragraph.getRuns().get(2) instanceof XWPFFieldRun);
-
- assertTrue(paragraph.getIRuns().get(1) instanceof XWPFSDT);
- assertTrue(paragraph.getIRuns().get(2) instanceof XWPFHyperlinkRun);
-
- paragraph.removeRun(1);
- assertEquals(2, paragraph.getRuns().size());
- assertTrue(paragraph.getRuns().get(1) instanceof XWPFFieldRun);
-
- assertTrue(paragraph.getIRuns().get(1) instanceof XWPFSDT);
- assertTrue(paragraph.getIRuns().get(2) instanceof XWPFFieldRun);
-
- paragraph.removeRun(0);
- assertEquals(1, paragraph.getRuns().size());
- assertTrue(paragraph.getRuns().get(0) instanceof XWPFFieldRun);
-
- assertTrue(paragraph.getIRuns().get(0) instanceof XWPFSDT);
- assertTrue(paragraph.getIRuns().get(1) instanceof XWPFFieldRun);
-
- XWPFRun newRun = paragraph.insertNewRun(0);
- assertEquals(2, paragraph.getRuns().size());
-
- assertEquals(3, paragraph.getIRuns().size());
- assertEquals(0, paragraph.getRuns().indexOf(newRun));
-
- doc.close();
- doc2.close();
- }
-
- @Test
- void testPictures() throws IOException {
- try (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());
- }
- }
-
- @Test
- void testTika792() throws Exception {
- //This test forces the loading of CTMoveBookmark and
- //CTMoveBookmarkImpl into ooxml-lite.
- try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Tika-792.docx")) {
- XWPFParagraph paragraph = doc.getParagraphs().get(0);
- assertEquals("", paragraph.getText());
- paragraph = doc.getParagraphs().get(1);
- assertEquals("b", paragraph.getText());
- }
- }
-
- @Test
- void testSettersGetters() throws IOException {
- try (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());
-
- assertFalse(p.isKeepNext());
- p.setKeepNext(true);
- assertTrue(p.isKeepNext());
- p.setKeepNext(false);
- assertFalse(p.isKeepNext());
-
- 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());
- }
- }
-
- @Test
- void testSearchTextNotFound() throws IOException {
- try (XWPFDocument doc = new XWPFDocument()) {
- XWPFParagraph p = doc.createParagraph();
-
- assertNull(p.searchText("test", new PositionInParagraph()));
- assertEquals("", p.getText());
- }
- }
-
- @Test
- void testSearchTextFound() throws IOException {
- try (XWPFDocument xml = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx")) {
-
- List<XWPFParagraph> ps = xml.getParagraphs();
- assertEquals(10, ps.size());
-
- XWPFParagraph p = ps.get(0);
-
- TextSegment segment = p.searchText("sample word document", new PositionInParagraph());
- assertNotNull(segment);
-
- assertEquals("sample word document", p.getText(segment));
-
- assertTrue(p.removeRun(0));
- }
- }
-
- @Test
- void testFieldRuns() throws IOException {
- try (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());
- }
- }
-
- @SuppressWarnings("deprecation")
- @Test
- void testRuns() throws IOException {
- try (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));
- }
- }
-
- @Test
- void test58067() throws IOException {
- try (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
- void test61787() throws IOException {
- try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("61787.docx")) {
-
- StringBuilder str = new StringBuilder();
- for (XWPFParagraph par : doc.getParagraphs()) {
- str.append(par.getText()).append("\n");
- }
- String s = str.toString();
- assertTrue(StringUtil.isNotBlank(s), "Having text: \n" + s + "\nTrimmed length: " + s.trim().length());
- }
- }
-
- /**
- * Tests for numbered lists
- *
- * See also https://github.com/jimklo/apache-poi-sample/blob/master/src/main/java/com/sri/jklo/StyledDocument.java
- * for someone else trying a similar thing
- */
- @Test
- void testNumberedLists() throws Exception {
- try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("ComplexNumberedLists.docx")) {
- XWPFParagraph p;
-
- p = doc.getParagraphArray(0);
- assertEquals("This is a document with numbered lists", p.getText());
- assertNull(p.getNumID());
- assertNull(p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(1);
- assertEquals("Entry #1", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(0), p.getNumIlvl());
- assertNull(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());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(3);
- assertEquals("2-a", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(1), p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(4);
- assertEquals("2-b", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(1), p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(5);
- assertEquals("2-c", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(1), p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(6);
- assertEquals("Entry #3", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(0), p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(7);
- assertEquals("Entry #4", p.getText());
- assertEquals(BigInteger.valueOf(1), p.getNumID());
- assertEquals(BigInteger.valueOf(0), p.getNumIlvl());
- assertNull(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());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(9);
- assertEquals("Restarted @ 2", p.getText());
- assertEquals(BigInteger.valueOf(2), p.getNumID());
- assertEquals(BigInteger.valueOf(0), p.getNumIlvl());
- assertNull(p.getNumStartOverride());
-
- p = doc.getParagraphArray(10);
- assertEquals("Restarted @ 3", p.getText());
- assertEquals(BigInteger.valueOf(2), p.getNumID());
- assertEquals(BigInteger.valueOf(0), p.getNumIlvl());
- assertNull(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?
- assertNull(p.getNumStartOverride());
-
- // TODO Shouldn't we use XWPFNumbering or similar here?
- // TODO Make it easier to change
- }
- }
- }
|