Ver código fonte

Bug 65099: Fix incorrect handling of styles in XWPFStyle.getUsedStyleList

Closes github #216

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1886063 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_1_0
Dominik Stadler 3 anos atrás
pai
commit
caf2d32393

+ 2
- 2
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFStyles.java Ver arquivo

String nextStyleID = style.getNextStyleID(); String nextStyleID = style.getNextStyleID();
XWPFStyle nextStyle = getStyle(nextStyleID); XWPFStyle nextStyle = getStyle(nextStyleID);
if ((nextStyle != null) && (!usedStyleList.contains(nextStyle))) { if ((nextStyle != null) && (!usedStyleList.contains(nextStyle))) {
usedStyleList.add(linkStyle);
getUsedStyleList(linkStyle, usedStyleList);
usedStyleList.add(nextStyle);
getUsedStyleList(nextStyle, usedStyleList);
} }
return usedStyleList; return usedStyleList;
} }

+ 31
- 0
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java Ver arquivo

import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;


import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.List;


import org.apache.poi.util.Units; import org.apache.poi.util.Units;
import org.apache.poi.xwpf.XWPFTestDataSamples; import org.apache.poi.xwpf.XWPFTestDataSamples;


documentNumbering.addNum(abstractNumID); documentNumbering.addNum(abstractNumID);
} }

@Test
public void test65099() throws IOException {
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("65099.docx")) {
XWPFStyles styles = doc.getStyles();
assertNotNull(styles);

XWPFStyle normal = styles.getStyle("Normal");
assertNotNull(normal);

XWPFStyle style1 = styles.getStyle("EdfTitre3Car");
assertNotNull(style1);

List<XWPFStyle> list = styles.getUsedStyleList(normal);
assertNotNull(list);
assertEquals(1, list.size());

list = styles.getUsedStyleList(style1);
assertNotNull(list);
assertEquals(7, list.size());

assertThrows(NullPointerException.class,
() -> styles.getUsedStyleList(null),
"Pasisng in 'null' triggers an exception");

XWPFStyle style = doc.getStyles().getStyle("TableauGrille41");
doc.getStyles().getUsedStyleList(style);
}
}
} }

+ 3
- 3
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java Ver arquivo

assertNull(r.getColor()); assertNull(r.getColor());
assertNull(r.getFontFamily()); assertNull(r.getFontFamily());
assertNull(r.getFontName()); assertNull(r.getFontName());
assertEquals(-1, r.getFontSize());
assertNull(r.getFontSizeAsDouble());
} }


// On page two, has explicit styles, but on runs not on // On page two, has explicit styles, but on runs not on
XWPFRun r = p.getRuns().get(0); XWPFRun r = p.getRuns().get(0);
assertEquals("Arial Black", r.getFontFamily()); assertEquals("Arial Black", r.getFontFamily());
assertEquals("Arial Black", r.getFontName()); assertEquals("Arial Black", r.getFontName());
assertEquals(16, r.getFontSize());
assertEquals(16.0, r.getFontSizeAsDouble(), 0.01);
assertEquals("548DD4", r.getColor()); assertEquals("548DD4", r.getColor());
} }


assertNotNull(styles.getDefaultRunStyle()); assertNotNull(styles.getDefaultRunStyle());
assertNotNull(styles.getDefaultParagraphStyle()); assertNotNull(styles.getDefaultParagraphStyle());


assertEquals(11, styles.getDefaultRunStyle().getFontSize());
assertEquals(11.0, styles.getDefaultRunStyle().getFontSizeAsDouble(), 0.01);
assertEquals(11.0, styles.getDefaultRunStyle().getFontSizeAsDouble(), 0.01); assertEquals(11.0, styles.getDefaultRunStyle().getFontSizeAsDouble(), 0.01);
assertEquals(200, styles.getDefaultParagraphStyle().getSpacingAfter()); assertEquals(200, styles.getDefaultParagraphStyle().getSpacingAfter());
} }

BIN
test-data/document/65099.docx Ver arquivo


Carregando…
Cancelar
Salvar