More unit testing for XWPF list numbering complex cases, and some TODOs on improving it, inspired by users@ discussions

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1768005 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2016-11-04 10:55:31 +00:00
parent 29c0fcf941
commit 2780bf3be3
3 changed files with 86 additions and 2 deletions

View File

@ -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;

View File

@ -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
}
}

Binary file not shown.