package simple.escp.json; import org.junit.Test; import simple.escp.dom.Line; import simple.escp.dom.Page; import simple.escp.dom.Report; import simple.escp.fill.FillJob; import simple.escp.fill.function.Function; import simple.escp.util.EscpUtil; import java.util.regex.Matcher; import static simple.escp.util.EscpUtil.*; import static org.junit.Assert.*; public class FunctionTest { private final String INIT = EscpUtil.escInitalize(); @Test public void pageNo() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"detail\": [" + "\"Page %{PAGE_NO}\"," + "\"Page %{ PAGE_NO}\"," + "\"Page %{PAGE_NO }\"," + "\"Page %{ PAGE_NO }\"," + "\"Page %{PAGE_NO}\"," + "\"Page %{PAGE_NO}\"," + "\"Page %{ PAGE_NO }\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Page 1" + CRLF + "Page 1" + CRLF + "Page 1" + CRLF + CRFF + "Page 2" + CRLF + "Page 2" + CRLF + "Page 2" + CRLF + CRFF + "Page 3" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void pageNoWithHeader() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"header\": [\"Halaman %{PAGE_NO}\"]," + "\"detail\": [" + "\"Detail 2\"," + "\"Detail 3\"," + "\"Detail 4\"," + "\"Detail 5\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Halaman 1" + CRLF + "Detail 2" + CRLF + "Detail 3" + CRLF + CRFF + "Halaman 2" + CRLF + "Detail 4" + CRLF + "Detail 5" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void ascii() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"detail\": [" + "\"Result: %{65}%{66}%{67}\"," + "\"Result: %{176}%{177}%{178}\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Result: ABC" + CRLF + "Result: " + (char) 176 + (char) 177 + (char) 178 + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void asciiWithRepeat() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"detail\": [" + "\"Result: %{177 R10}\"," + "\"Result: %{176 R 5}\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Result: " + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + (char) 177 + CRLF + "Result: " + (char) 176 + (char) 176 + (char) 176 + (char) 176 + (char) 176 + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void bold() { String jsonString = "{" + "\"template\": [" + "\"%{BOLD}This is bold%{BOLD}\"," + "\"This is normal\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + escSelectBoldFont() + "This is bold" + escCancelBoldFont() + CRLF + "This is normal" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void italic() { String jsonString = "{" + "\"template\": [" + "\"%{ITALIC}This is italic%{ITALIC}\"," + "\"This is normal\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + escSelectItalicFont() + "This is italic" + escCancelItalicFont() + CRLF + "This is normal" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void doubleStrike() { String jsonString = "{" + "\"template\": [" + "\"%{DOUBLE}This is double-strike%{DOUBLE}\"," + "\"This is normal\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + escSelectDoubleStrikeFont() + "This is double-strike" + escCancelDoubleStrikeFont() + CRLF + "This is normal" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void underline() { String jsonString = "{" + "\"template\": [" + "\"%{UNDERLINE}This is underline%{UNDERLINE}\"," + "\"This is normal\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + escSelectUnderline() + "This is underline" + escCancelUnderline() + CRLF + "This is normal" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void superscript() { String jsonString = "{" + "\"template\": [" + "\"This is normal%{SUPER}This is superscript%{SUPER}\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "This is normal" + escSelectSuperscript() + "This is superscript" + escCancelSuperscriptOrSubscript() + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void subscript() { String jsonString = "{" + "\"template\": [" + "\"This is normal%{SUB}This is subscript%{SUB}\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "This is normal" + escSelectSubscript() + "This is subscript" + escCancelSuperscriptOrSubscript() + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void autoIncrement() { String jsonString = "{" + "\"template\": [" + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_A}\"," + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_A}\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Result: 1" + CRLF + "Result: 1" + CRLF + "Result: 2" + CRLF + "Result: 3" + CRLF + "Result: 2" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void autoIncrementDuplicate() { String jsonString = "{" + "\"template\": [" + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_A}\"," + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_NO}\"," + "\"Result: %{INC AUTO_A}\"" + "]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Result: 1" + CRLF + "Result: 1" + CRLF + "Result: 2" + CRLF + "Result: 3" + CRLF + "Result: 2" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void lineNo() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"header\": [\"Halaman %{PAGE_NO}\"]," + "\"detail\": [" + "\"Line %{LINE_NO}\"," + "\"Line %{LINE_NO}\"," + "\"Line %{LINE_NO}\"," + "\"Line %{LINE_NO}\"," + "\"Line %{LINE_NO}\"," + "\"Line %{LINE_NO}\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Halaman 1" + CRLF + "Line 2" + CRLF + "Line 3" + CRLF + CRFF + "Halaman 2" + CRLF + "Line 2" + CRLF + "Line 3" + CRLF + CRFF + "Halaman 3" + CRLF + "Line 2" + CRLF + "Line 3" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void globalLineNo() { String jsonString = "{" + "\"pageFormat\": {" + "\"pageLength\": 3" + "}," + "\"template\": {" + "\"header\": [\"Halaman %{PAGE_NO}\"]," + "\"detail\": [" + "\"Line %{GLOBAL_LINE_NO}\"," + "\"Line %{GLOBAL_LINE_NO}\"," + "\"Line %{GLOBAL_LINE_NO}\"," + "\"Line %{GLOBAL_LINE_NO}\"," + "\"Line %{GLOBAL_LINE_NO}\"," + "\"Line %{GLOBAL_LINE_NO}\"]" + "}" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals( INIT + "Halaman 1" + CRLF + "Line 2" + CRLF + "Line 3" + CRLF + CRFF + "Halaman 2" + CRLF + "Line 5" + CRLF + "Line 6" + CRLF + CRFF + "Halaman 3" + CRLF + "Line 8" + CRLF + "Line 9" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill() ); } @Test public void customFunction() { Function function = new CustomFunction(); FillJob.addFunction(function); String jsonString = "{" + "\"template\": [\"Result: %{MY_CUSTOM}\"]" + "}"; JsonTemplate jsonTemplate = new JsonTemplate(jsonString); assertEquals(INIT + "Result: MyCustomResult" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill()); FillJob.removeFunction(function); assertEquals(INIT + "Result: %{MY_CUSTOM}" + CRLF + CRFF + INIT, new FillJob(jsonTemplate.parse()).fill()); } private static class CustomFunction extends Function { public CustomFunction() { super("%\\{\\s*(MY_CUSTOM)\\s*\\}"); } @Override public String process(Matcher matcher, Report report, Page page, Line line) { return "MyCustomResult"; } @Override public void reset() { // do nothing } } }