diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFNum.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFNum.java index b1ae7ed8c..7674510c1 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFNum.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFNum.java @@ -19,8 +19,8 @@ package org.apache.poi.xwpf.usermodel; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNum; -/** - * @author Philipp Epp +/** + * TODO Bring more of the logic over from XWPFParagraph */ public class XWPFNum { protected XWPFNumbering numbering; diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java index 6cd3171f3..756aeef55 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java @@ -592,4 +592,88 @@ public final class TestXWPFParagraph { } 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 + } } diff --git a/test-data/document/ComplexNumberedLists.docx b/test-data/document/ComplexNumberedLists.docx new file mode 100644 index 000000000..b4409c9d1 Binary files /dev/null and b/test-data/document/ComplexNumberedLists.docx differ