Skip to content

Commit def5200

Browse files
author
Kate Ivanova
committed
Add intergration tests reproducing keep-together causing content overlap
DEVSIX-4641
1 parent 966d9fd commit def5200

File tree

4 files changed

+90
-82
lines changed

4 files changed

+90
-82
lines changed

layout/src/test/java/com/itextpdf/layout/KeepTogetherTest.java

Lines changed: 90 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ This file is part of the iText (R) project.
4545

4646
import com.itextpdf.io.LogMessageConstant;
4747
import com.itextpdf.io.font.constants.StandardFonts;
48-
import com.itextpdf.io.image.ImageDataFactory;
4948
import com.itextpdf.kernel.colors.ColorConstants;
5049
import com.itextpdf.kernel.font.PdfFontFactory;
5150
import com.itextpdf.kernel.geom.PageSize;
5251
import com.itextpdf.kernel.geom.Rectangle;
5352
import com.itextpdf.kernel.pdf.PdfDocument;
53+
import com.itextpdf.kernel.pdf.PdfPage;
5454
import com.itextpdf.kernel.pdf.PdfWriter;
55+
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
5556
import com.itextpdf.kernel.utils.CompareTool;
5657
import com.itextpdf.layout.borders.SolidBorder;
5758
import com.itextpdf.layout.element.AreaBreak;
5859
import com.itextpdf.layout.element.Cell;
5960
import com.itextpdf.layout.element.Div;
60-
import com.itextpdf.layout.element.Image;
6161
import com.itextpdf.layout.element.List;
6262
import com.itextpdf.layout.element.Paragraph;
6363
import com.itextpdf.layout.element.Table;
@@ -85,6 +85,20 @@ public class KeepTogetherTest extends ExtendedITextTest {
8585
public static final String sourceFolder = "./src/test/resources/com/itextpdf/layout/KeepTogetherTest/";
8686
public static final String destinationFolder = "./target/test/com/itextpdf/layout/KeepTogetherTest/";
8787

88+
private static final String BIG_TEXT = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n"
89+
+ " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n"
90+
+ " sed diam voluptua.\n\n At vero eos et accusam et justo duo dolores et ea rebum.\n\n "
91+
+ " Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n"
92+
+ " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n"
93+
+ " sed diam voluptua.\n\n At vero eos et accusam et justo duo dolores et ea rebum.\n\n "
94+
+ "Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n sed diam nonumy eirmod tempor"
95+
+ " invidunt ut labore et dolore magna aliquyam erat,\n sed diam voluptua.\n\n"
96+
+ " At vero eos et accusam et justo duo dolores et ea rebum.\n\n ";
97+
private static final String MEDIUM_TEXT = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr"
98+
+ " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."
99+
+ " At vero eos et accusam et justo duo dolores et ea rebum.\n ";
100+
101+
88102
@BeforeClass
89103
public static void beforeClass() {
90104
createOrClearDestinationFolder(destinationFolder);
@@ -1011,122 +1025,116 @@ public void smallFloatInsideKeptTogetherTableTest02() throws IOException, Interr
10111025

10121026
@Test
10131027
@LogMessages(messages = {
1014-
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA)
1028+
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA, count = 2)
10151029
})
1016-
//TODO: update cmp file when DEVSIX-4681 will be fixed
1017-
public void floatingElementsInDivAndKeepTogetherElemTest() throws IOException, InterruptedException {
1018-
String cmpFileName = sourceFolder + "cmp_floatingElementsInDivAndKeepTogetherElem.pdf";
1019-
String outFile = destinationFolder + "floatingElementsInDivAndKeepTogetherElem.pdf";
1030+
public void contentOverlappingInDivWithKeepTogetherTest() throws IOException, InterruptedException {
1031+
String filename = "contentOverlappingInDivWithKeepTogether.pdf";
1032+
String outFile = destinationFolder + filename;
1033+
String cmpFileName = sourceFolder + "cmp_" + filename;
10201034

1021-
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFile));
1022-
pdfDoc.addNewPage();
1035+
try (Document doc = new Document(new PdfDocument(new PdfWriter(outFile)))) {
1036+
doc.getPdfDocument().addNewPage(PageSize.A5.rotate());
10231037

1024-
Document doc = new Document(pdfDoc);
1025-
1026-
Div mainDiv = new Div();
1038+
Div main = new Div();
10271039

1028-
Image first = new Image(ImageDataFactory.create(sourceFolder + "1.png"));
1029-
first.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1030-
first.setHeight(350);
1040+
Div child1 = createChildDivWithText(main, null).setKeepTogether(true);
1041+
createChildDivWithText(child1, BIG_TEXT).setKeepTogether(true);
10311042

1032-
Image second = new Image(ImageDataFactory.create(sourceFolder + "2.png"));
1033-
second.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1034-
second.setHeight(350);
1043+
Div div1_2 = createChildDivWithText(child1, null).setKeepTogether(true);
1044+
createChildDivWithText(div1_2, "Section A");
1045+
createChildDivWithText(div1_2, null).add(new Paragraph(MEDIUM_TEXT).setFirstLineIndent(20));
10351046

1036-
mainDiv.add(first);
1037-
mainDiv.add(second);
1047+
Div child2 = createChildDivWithText(main, null).setKeepTogether(true);
1048+
createChildDivWithText(child2, "Section B");
1049+
createChildDivWithText(child2, null);
1050+
createChildDivWithText(child2, "Lorem ipsum dolor sit amet!");
10381051

1039-
doc.add(mainDiv);
1040-
doc.add(new Paragraph("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1041-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1042-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1043-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1044-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1045-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! ")
1046-
.setKeepTogether(true).setFontSize(24));
1052+
doc.add(main);
1053+
}
10471054

1048-
doc.close();
10491055
Assert.assertNull(new CompareTool().compareByContent(outFile, cmpFileName, destinationFolder));
10501056
}
10511057

10521058
@Test
10531059
@LogMessages(messages = {
1054-
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA)
1060+
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA, count = 2)
10551061
})
1056-
//TODO: update cmp file when DEVSIX-4681 will be fixed
1057-
public void floatingEmptyElementsInDivAndKeepTogetherElemTest() throws IOException, InterruptedException {
1058-
String cmpFileName = sourceFolder + "cmp_floatingEmptyElementsInDivAndKeepTogetherElem.pdf";
1059-
String outFile = destinationFolder + "floatingEmptyElementsInDivAndKeepTogetherElem.pdf";
1060-
1061-
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFile));
1062-
pdfDoc.addNewPage(PageSize.A5.rotate());
1062+
public void missContentAndOverlappingInDivNoKeepTogetherTest() throws IOException, InterruptedException {
1063+
String filename = "missContentAndOverlappingInDivNoKeepTogether.pdf";
1064+
String outFile = destinationFolder + filename;
1065+
String cmpFileName = sourceFolder + "cmp_" + filename;
10631066

1064-
Document doc = new Document(pdfDoc);
1067+
try (Document doc = new Document(new PdfDocument(new PdfWriter(outFile)))) {
1068+
doc.getPdfDocument().addNewPage(PageSize.A5.rotate());
10651069

1066-
Div mainDiv = new Div();
1070+
Div main = new Div();
10671071

1068-
Paragraph p1 = new Paragraph();
1069-
p1.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1072+
Div child1 = createChildDivWithText(main, null).setKeepTogether(true);
1073+
createChildDivWithText(child1, BIG_TEXT);
10701074

1071-
Paragraph p2 = new Paragraph();
1072-
p2.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1075+
Div div1_2 = createChildDivWithText(child1, null).setKeepTogether(true);
1076+
createChildDivWithText(div1_2, "Section A");
10731077

1074-
Paragraph ktp = new Paragraph("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1075-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1076-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1077-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1078-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1079-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1080-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1081-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1082-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1083-
).setKeepTogether(true).setFontSize(20);
1078+
createChildDivWithText(div1_2, null).add(new Paragraph(MEDIUM_TEXT).setFirstLineIndent(20));
10841079

1085-
mainDiv.add(p1);
1086-
mainDiv.add(p2);
1080+
// KEEP_TOGETHER is not set here
1081+
Div child2 = createChildDivWithText(main, null);
1082+
createChildDivWithText(child2, "Section B");
1083+
createChildDivWithText(child2, null);
1084+
createChildDivWithText(child2, "Lorem ipsum dolor sit amet!");
10871085

1088-
doc.add(mainDiv);
1089-
doc.add(ktp);
1086+
doc.add(main);
1087+
}
10901088

1091-
doc.close();
10921089
Assert.assertNull(new CompareTool().compareByContent(outFile, cmpFileName, destinationFolder));
10931090
}
10941091

10951092
@Test
1096-
public void floatingEmptyElementsAndKeepTogetherElemTest() throws IOException, InterruptedException {
1097-
String cmpFileName = sourceFolder + "cmp_floatingEmptyElementsAndKeepTogetherElem.pdf";
1098-
String outFile = destinationFolder + "floatingEmptyElementsAndKeepTogetherElem.pdf";
1093+
@LogMessages(messages = {
1094+
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA, count = 2)
1095+
})
1096+
public void contentOverlappingDivKeepTogetherInRectTest() throws IOException, InterruptedException {
1097+
String filename = "contentOverlappingDivKeepTogetherInRect.pdf";
1098+
String outFile = destinationFolder + filename;
1099+
String cmpFileName = sourceFolder + "cmp_" + filename;
10991100

1100-
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFile));
1101-
pdfDoc.addNewPage(PageSize.A5.rotate());
1101+
try (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFile))) {
1102+
PdfPage page = pdfDoc.addNewPage(PageSize.A5.rotate());
1103+
Rectangle rectangle = new Rectangle(10, 10, 500, 350);
1104+
PdfCanvas pdfCanvas = new PdfCanvas(page);
11021105

1103-
Document doc = new Document(pdfDoc);
1106+
try (Canvas canvas = new Canvas(pdfCanvas, rectangle)) {
1107+
Div main = new Div();
11041108

1105-
Paragraph p1 = new Paragraph();
1106-
p1.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1109+
Div child1 = createChildDivWithText(main, null).setKeepTogether(true);
11071110

1108-
Paragraph p2 = new Paragraph();
1109-
p2.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
1111+
createChildDivWithText(child1, BIG_TEXT).setKeepTogether(true);
1112+
createChildDivWithText(child1, "Section A")
1113+
.setKeepTogether(true)
1114+
.add(new Paragraph(MEDIUM_TEXT).setFirstLineIndent(20));
11101115

1111-
Paragraph ktp = new Paragraph("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1112-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1113-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1114-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1115-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1116-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1117-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1118-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1119-
+ "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1120-
).setKeepTogether(true).setFontSize(20);
1116+
Div child2 = createChildDivWithText(main, null).setKeepTogether(true);
11211117

1122-
doc.add(p1);
1123-
doc.add(p2);
1124-
doc.add(ktp);
1118+
createChildDivWithText(child2, "Section B");
1119+
createChildDivWithText(child2, null);
1120+
createChildDivWithText(child2, "Lorem ipsum dolor sit amet!");
1121+
1122+
canvas.add(main);
1123+
}
1124+
}
11251125

1126-
doc.close();
11271126
Assert.assertNull(new CompareTool().compareByContent(outFile, cmpFileName, destinationFolder));
11281127
}
11291128

1129+
private Div createChildDivWithText(Div parent, String text) {
1130+
Div child = new Div();
1131+
if (text != null) {
1132+
child.add(new Paragraph(text));
1133+
}
1134+
parent.add(child);
1135+
1136+
return child;
1137+
}
11301138

11311139
private static Div createKeptTogetherDivWithSmallFloat(int divHeight) {
11321140
// test keep-together processing on height-only overflow for blocks

0 commit comments

Comments
 (0)