package simple.escp;
import org.junit.Test;
import simple.escp.data.MapDataSource;
import simple.escp.dom.line.EmptyLine;
import simple.escp.dom.Line;
import simple.escp.dom.Page;
import simple.escp.dom.PageFormat;
import simple.escp.dom.Report;
import simple.escp.dom.line.ListLine;
import simple.escp.dom.line.TableLine;
import simple.escp.dom.line.TextLine;
import simple.escp.fill.FillJob;
import static org.junit.Assert.*;
import static simple.escp.util.EscpUtil.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ReportTest {
@Test
public void appendPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
List<Line> content = new ArrayList<>();
content.add(new TextLine("This is detail 1."));
Page page = report.appendSinglePage(content, false);
assertEquals(1, report.getNumberOfPages());
assertEquals(1, page.getPageNumber().intValue());
assertEquals(3, page.getNumberOfLines());
page = report.appendSinglePage(content, false);
assertEquals(2, report.getNumberOfPages());
assertEquals(2, page.getPageNumber().intValue());
assertEquals(3, page.getNumberOfLines());
page = report.appendSinglePage(new ArrayList<Line>(), false);
assertEquals(3, report.getNumberOfPages());
assertEquals(3, page.getPageNumber().intValue());
assertEquals(2, page.getNumberOfLines());
page = report.appendSinglePage(content, true);
assertEquals(4, report.getNumberOfPages());
assertEquals(4, page.getPageNumber().intValue());
assertEquals(1, page.getNumberOfLines());
}
@Test(expected = IllegalArgumentException.class)
public void appendFullPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
List<Line> content = new ArrayList<>();
content.add(new TextLine("This is detail 1."));
content.add(new TextLine("This is detail 2."));
content.add(new TextLine("This is detail 3."));
report.appendSinglePage(content, false);
}
@Test
public void newPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
Page page = report.newPage(true);
assertEquals(0, page.getNumberOfLines());
assertEquals(1, page.getPageNumber().intValue());
assertEquals(3, page.getPageLength().intValue());
assertFalse(page.isFull());
assertEquals(1, report.getNumberOfPages());
assertEquals(page, report.getCurrentPage());
page = report.newPage(false);
assertEquals(2, page.getNumberOfLines());
assertEquals(2, page.getPageNumber().intValue());
assertEquals(3, page.getPageLength().intValue());
assertFalse(page.isFull());
assertEquals(2, report.getNumberOfPages());
assertEquals(page, report.getCurrentPage());
}
@Test
public void append() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1"), false);
assertEquals(1, report.getLastPageNumber());
assertEquals(1, report.getNumberOfPages());
assertEquals(3, report.getCurrentPage().getNumberOfLines());
report.append(new TextLine("This is line 2"), false);
assertEquals(2, report.getLastPageNumber());
assertEquals(2, report.getNumberOfPages());
assertEquals(3, report.getCurrentPage().getNumberOfLines());
report.append(new TextLine("This is line 3"), false);
assertEquals(3, report.getLastPageNumber());
assertEquals(3, report.getNumberOfPages());
assertEquals(3, report.getCurrentPage().getNumberOfLines());
}
@Test
public void appendBasic() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1"), true);
assertEquals(1, report.getLastPageNumber());
assertEquals(1, report.getNumberOfPages());
assertEquals(1, report.getCurrentPage().getNumberOfLines());
report.append(new TextLine("This is line 2"), true);
assertEquals(1, report.getLastPageNumber());
assertEquals(1, report.getNumberOfPages());
assertEquals(2, report.getCurrentPage().getNumberOfLines());
report.append(new TextLine("This is line 3"), true);
assertEquals(1, report.getLastPageNumber());
assertEquals(1, report.getNumberOfPages());
assertEquals(3, report.getCurrentPage().getNumberOfLines());
report.append(new TextLine("This is line 4"), true);
assertEquals(2, report.getLastPageNumber());
assertEquals(2, report.getNumberOfPages());
assertEquals(1, report.getCurrentPage().getNumberOfLines());
}
@Test
public void fill() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("Name: ${name}"), false);
report.append(new TextLine("Result: ${score}"), false);
Map<String, Object> mapSource = new HashMap<>();
mapSource.put("name", "Solid Snake");
mapSource.put("score", 80);
assertEquals(escInitalize() + escPageLength(3) +
"This is header." + CRLF +
"Name: Solid Snake" + CRLF +
"This is footer." + CRLF + CRFF +
"This is header." + CRLF +
"Result: 80" + CRLF +
"This is footer." + CRLF + CRFF + escInitalize(),
new FillJob(report, new MapDataSource(mapSource)).fill()
);
}
@Test
public void nextPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is in page 1."), false);
report.lineBreak();
report.append(new TextLine("This is in page 2."), false);
report.lineBreak();
report.append(new TextLine("This is in page 3."), false);
assertEquals(3, report.getLastPageNumber());
Page page1 = report.getPage(1);
Page page2 = report.getPage(2);
Page page3 = report.getPage(3);
assertEquals(page2, report.nextPage(page1));
assertEquals(page3, report.nextPage(page2));
}
@Test
public void previousPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is in page 1."), false);
report.lineBreak();
report.append(new TextLine("This is in page 2."), false);
report.lineBreak();
report.append(new TextLine("This is in page 3."), false);
assertEquals(3, report.getLastPageNumber());
Page page1 = report.getPage(1);
Page page2 = report.getPage(2);
Page page3 = report.getPage(3);
assertEquals(page1, report.previousPage(page2));
assertEquals(page2, report.previousPage(page3));
}
@Test
public void insert() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(5);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1"), false);
report.append(new TextLine("This is line 2 in page 1"), false);
report.lineBreak();
report.append(new TextLine("This is line 1 in page 2"), false);
report.append(new TextLine("This is line 2 in page 2"), false);
report.append(new TextLine("This is line 3 in page 2"), false);
report.insert(new TextLine("This is inserted line."), 1, 4);
assertEquals(2, report.getNumberOfPages());
Page page1 = report.getPage(1);
assertEquals(5, page1.getNumberOfLines());
assertEquals("This is header.", page1.getLine(1).toString());
assertEquals("This is line 1 in page 1", page1.getLine(2).toString());
assertEquals("This is line 2 in page 1", page1.getLine(3).toString());
assertEquals("This is inserted line.", page1.getLine(4).toString());
assertEquals("This is footer.", page1.getLine(5).toString());
Page page2 = report.getPage(2);
assertEquals(5, page2.getNumberOfLines());
assertEquals("This is header.", page2.getLine(1).toString());
assertEquals("This is line 1 in page 2", page2.getLine(2).toString());
assertEquals("This is line 2 in page 2", page2.getLine(3).toString());
assertEquals("This is line 3 in page 2", page2.getLine(4).toString());
assertEquals("This is footer.", page2.getLine(5).toString());
}
@Test
public void insertWithNewPageFirstLines() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(10);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
for (int i=0; i<8; i++) {
report.append(new TextLine("This is line in page 1."), false);
}
TextLine[] forNewPages = new TextLine[] { new TextLine("Line 2 in new page."),
new TextLine("Line 3 in new page."), new TextLine("Line 4 in new page.")};
report.insert(new TextLine("This is inserted line."), 1, 2, Arrays.asList(forNewPages));
assertEquals(2, report.getNumberOfPages());
Page page1 = report.getPage(1);
assertEquals(10, page1.getNumberOfLines());
assertEquals("This is header.", page1.getLine(1).toString());
assertEquals("This is inserted line.", page1.getLine(2).toString());
assertEquals("This is line in page 1.", page1.getLine(3).toString());
assertEquals("This is line in page 1.", page1.getLine(4).toString());
assertEquals("This is line in page 1.", page1.getLine(5).toString());
assertEquals("This is line in page 1.", page1.getLine(6).toString());
assertEquals("This is line in page 1.", page1.getLine(7).toString());
assertEquals("This is line in page 1.", page1.getLine(8).toString());
assertEquals("This is line in page 1.", page1.getLine(9).toString());
assertEquals("This is footer.", page1.getLine(10).toString());
Page page2 = report.getPage(2);
assertEquals(6, page2.getNumberOfLines());
assertEquals("This is header.", page2.getLine(1).toString());
assertEquals("Line 2 in new page.", page2.getLine(2).toString());
assertEquals("Line 3 in new page.", page2.getLine(3).toString());
assertEquals("Line 4 in new page.", page2.getLine(4).toString());
assertEquals("This is line in page 1.", page2.getLine(5).toString());
assertEquals("This is footer.", page2.getLine(6).toString());
}
@Test
public void insertLast() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(5);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1"), false);
report.append(new TextLine("This is line 2 in page 1"), false);
report.append(new TextLine("This is line 3 in page 1"), false);
report.append(new TextLine("This is line 1 in page 2"), false);
report.append(new TextLine("This is line 2 in page 2"), false);
report.insert(new TextLine("This is inserted line."), 2, 4);
assertEquals(2, report.getNumberOfPages());
Page page1 = report.getPage(1);
assertEquals(5, page1.getNumberOfLines());
assertEquals("This is header.", page1.getLine(1).toString());
assertEquals("This is line 1 in page 1", page1.getLine(2).toString());
assertEquals("This is line 2 in page 1", page1.getLine(3).toString());
assertEquals("This is line 3 in page 1", page1.getLine(4).toString());
assertEquals("This is footer.", page1.getLine(5).toString());
Page page2 = report.getPage(2);
assertEquals(5, page2.getNumberOfLines());
assertEquals("This is header.", page2.getLine(1).toString());
assertEquals("This is line 1 in page 2", page2.getLine(2).toString());
assertEquals("This is line 2 in page 2", page2.getLine(3).toString());
assertEquals("This is inserted line.", page2.getLine(4).toString());
assertEquals("This is footer.", page2.getLine(5).toString());
}
@Test
public void insertOverflow() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(5);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1"), false);
report.append(new TextLine("This is line 2 in page 1"), false);
report.append(new TextLine("This is line 3 in page 1"), false);
report.append(new TextLine("This is line 1 in page 2"), false);
report.append(new TextLine("This is line 2 in page 2"), false);
report.append(new TextLine("This is line 3 in page 2"), false);
report.insert(new TextLine("This is inserted line."), 1, 3);
assertEquals(3, report.getNumberOfPages());
Page page1 = report.getPage(1);
assertEquals(5, page1.getNumberOfLines());
assertEquals("This is header.", page1.getLine(1).toString());
assertEquals("This is line 1 in page 1", page1.getLine(2).toString());
assertEquals("This is inserted line.", page1.getLine(3).toString());
assertEquals("This is line 2 in page 1", page1.getLine(4).toString());
assertEquals("This is footer.", page1.getLine(5).toString());
Page page2 = report.getPage(2);
assertEquals(5, page2.getNumberOfLines());
assertEquals("This is header.", page2.getLine(1).toString());
assertEquals("This is line 3 in page 1", page2.getLine(2).toString());
assertEquals("This is line 1 in page 2", page2.getLine(3).toString());
assertEquals("This is line 2 in page 2", page2.getLine(4).toString());
assertEquals("This is footer.", page2.getLine(5).toString());
Page page3 = report.getPage(3);
assertEquals(3, page3.getNumberOfLines());
assertEquals("This is header.", page3.getLine(1).toString());
assertEquals("This is line 3 in page 2", page3.getLine(2).toString());
assertEquals("This is footer.", page3.getLine(3).toString());
}
@Test
public void insertCausesNewPage() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1"), false);
report.insert(new TextLine("This is inserted line."), 1, 2);
assertEquals(2, report.getNumberOfPages());
Page page1 = report.getPage(1);
assertEquals(3, page1.getNumberOfLines());
assertEquals("This is header.", page1.getLine(1).toString());
assertEquals("This is inserted line.", page1.getLine(2).toString());
assertEquals("This is footer.", page1.getLine(3).toString());
Page page2 = report.getPage(2);
assertEquals(3, page2.getNumberOfLines());
assertEquals("This is header.", page2.getLine(1).toString());
assertEquals("This is line 1 in page 1", page2.getLine(2).toString());
assertEquals("This is footer.", page2.getLine(3).toString());
}
@Test
public void dynamicLine() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1"), false);
assertFalse(report.hasDynamicLine());
report.append(new TableLine("test"), true);
assertTrue(report.hasDynamicLine());
}
@Test
public void cloneReport() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line 1 in page 1."), false);
Report cloneReport = new Report(report);
// Change cloned report.
assertEquals(1, cloneReport.getNumberOfPages());
assertEquals("This is header.", cloneReport.getPage(1).getLine(1).toString());
assertEquals("This is line 1 in page 1.", cloneReport.getPage(1).getLine(2).toString());
assertEquals("This is footer.", cloneReport.getPage(1).getLine(3).toString());
// Make sure cloned report is modified
cloneReport.getPage(1).removeLine(2);
assertEquals(1, cloneReport.getNumberOfPages());
assertEquals(2, cloneReport.getPage(1).getNumberOfLines());
assertEquals("This is header.", cloneReport.getPage(1).getLine(1).toString());
assertEquals("This is footer.", cloneReport.getPage(1).getLine(2).toString());
// Make sure original report is not modified.
assertEquals(1, report.getNumberOfPages());
assertEquals(3, report.getPage(1).getNumberOfLines());
assertEquals("This is header.", report.getPage(1).getLine(1).toString());
assertEquals("This is line 1 in page 1.", report.getPage(1).getLine(2).toString());
assertEquals("This is footer.", report.getPage(1).getLine(3).toString());
}
@Test
public void getFirstPageWithTableLines() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
Report report = new Report(pageFormat, null, null);
report.append(new TextLine("This is line 1 in page 1."), false);
assertNull(report.getFirstPageWithTableLines());
pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
report = new Report(pageFormat, null, null);
report.append(new TableLine("test"), false);
assertEquals(report.getPage(1), report.getFirstPageWithTableLines());
pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
report = new Report(pageFormat, null, null);
report.append(new TextLine("This is line 1 in page 1."), false);
report.lineBreak();
report.append(new TableLine("source"), false);
assertEquals(report.getPage(2), report.getFirstPageWithTableLines());
}
@Test
public void getFirstPageWithListLines() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
Report report = new Report(pageFormat, null, null);
report.append(new TextLine("This is line 1 in page 1."), false);
assertNull(report.getFirstPageWithListLines());
pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
report = new Report(pageFormat, null, null);
report.append(new ListLine("test", "line text", null, null), false);
assertEquals(report.getPage(1), report.getFirstPageWithListLines());
pageFormat = new PageFormat();
pageFormat.setPageLength(3);
pageFormat.setUsePrinterPageLength(false);
report = new Report(pageFormat, null, null);
report.append(new TextLine("This is line 1 in page 1."), false);
report.lineBreak();
report.append(new ListLine("test", "line text", null, null), false);
assertEquals(report.getPage(2), report.getFirstPageWithListLines());
}
@Test
public void newPageStartAtLineNumber() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(5);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.newPage(false, 4);
report.append(new TextLine("This is line 4"), false);
report.append(new TextLine("This is in new page"), false);
assertEquals(2, report.getNumberOfPages());
assertEquals(5, report.getPage(1).getNumberOfLines());
assertEquals("This is header.", ((TextLine)report.getPage(1).getLine(1)).getText());
assertTrue(report.getPage(1).getLine(2) instanceof EmptyLine);
assertTrue(report.getPage(1).getLine(3) instanceof EmptyLine);
assertEquals("This is line 4", ((TextLine)report.getPage(1).getLine(4)).getText());
assertEquals("This is footer.", ((TextLine)report.getPage(1).getLine(5)).getText());
assertEquals(3, report.getPage(2).getNumberOfLines());
assertEquals("This is header.", ((TextLine)report.getPage(2).getLine(1)).getText());
assertEquals("This is in new page", ((TextLine)report.getPage(2).getLine(2)).getText());
assertEquals("This is footer.", ((TextLine)report.getPage(2).getLine(3)).getText());
}
@Test
public void getFlatLines() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(5);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.newPage(false, 4);
report.append(new TextLine("This is line 4"), false);
report.append(new TextLine("This is in new page"), false);
List<Line> results = report.getFlatLines();
assertEquals(6, results.size());
assertEquals("This is header.", ((TextLine)results.get(0)).getText());
assertEquals("This is line 4", ((TextLine)results.get(1)).getText());
assertEquals("This is footer.", ((TextLine)results.get(2)).getText());
assertEquals("This is header.", ((TextLine)results.get(3)).getText());
assertEquals("This is in new page", ((TextLine)results.get(4)).getText());
assertEquals("This is footer.", ((TextLine)results.get(5)).getText());
}
@Test
public void getGlobalLineNumber() {
PageFormat pageFormat = new PageFormat();
pageFormat.setPageLength(4);
pageFormat.setUsePrinterPageLength(false);
TextLine[] header = new TextLine[] { new TextLine("This is header.") };
TextLine[] footer = new TextLine[] { new TextLine("This is footer.") };
Report report = new Report(pageFormat, header, footer);
report.append(new TextLine("This is line"), false);
report.newPage(false);
report.append(new TextLine("This is line"), false);
assertEquals(2, report.getNumberOfPages());
for (Page page : report) {
if (page.getPageNumber() == 1) {
assertEquals(3, page.getNumberOfLines());
assertEquals(1, page.getLine(1).getGlobalLineNumber().intValue());
assertEquals(2, page.getLine(2).getGlobalLineNumber().intValue());
assertEquals(3, page.getLine(3).getGlobalLineNumber().intValue());
} else if (page.getPageNumber() == 2) {
assertEquals(3, page.getNumberOfLines());
assertEquals(4, page.getLine(1).getGlobalLineNumber().intValue());
assertEquals(5, page.getLine(2).getGlobalLineNumber().intValue());
assertEquals(6, page.getLine(3).getGlobalLineNumber().intValue());
}
}
}
}