package simple.escp.placeholder; import org.junit.Test; import simple.escp.data.DataSources; import simple.escp.fill.DataSourceBinding; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; public class ScriptPlaceholderTest { @Test public void getText() { String text = "rate * 0.5 :: number :: 10"; ScriptPlaceholder placeholder = new ScriptPlaceholder(text, null); assertEquals("rate * 0.5 :: number :: 10", placeholder.getText()); } @Test public void getName() { assertEquals("rate * 0.5", new ScriptPlaceholder("rate * 0.5::currency", null).getScript()); assertEquals("rate * 0.5", new ScriptPlaceholder("rate * 0.5::10", null).getScript()); assertEquals("rate * 0.5", new ScriptPlaceholder("rate * 0.5::10 ", null).getScript()); assertEquals("rate * 0.5", new ScriptPlaceholder("rate * 0.5 ::10", null).getScript()); assertEquals("rate * 0.5", new ScriptPlaceholder(" rate * 0.5 :: 10", null).getScript()); assertEquals("rate * 0.5", new ScriptPlaceholder("rate * 0.5::currency::20", null).getScript()); } @Test public void getWidth() { assertEquals(0, new ScriptPlaceholder("rate * 0.5::currency", null).getWidth()); assertEquals(10, new ScriptPlaceholder("rate * 0.5::10", null).getWidth()); assertEquals(10, new ScriptPlaceholder("rate * 0.5::10 ", null).getWidth()); assertEquals(10, new ScriptPlaceholder("rate * 0.5 ::10", null).getWidth()); assertEquals(10, new ScriptPlaceholder(" rate * 0.5 :: 10", null).getWidth()); assertEquals(20, new ScriptPlaceholder("rate * 0.5::currency::20", null).getWidth()); } @Test public void getFormat() { assertEquals(DecimalFormat.class, new ScriptPlaceholder("rate * 0.5::number::10", null).getFormat().getClass()); assertEquals(DecimalFormat.class, new ScriptPlaceholder("rate * 0.5::number ::10 ", null).getFormat().getClass()); assertEquals(DecimalFormat.class, new ScriptPlaceholder("rate * 0.5:: number :: 10", null).getFormat().getClass()); assertEquals(DecimalFormat.class, new ScriptPlaceholder("rate * 0.5::integer", null).getFormat().getClass()); assertEquals(DecimalFormat.class, new ScriptPlaceholder("rate * 0.5::currency", null).getFormat().getClass()); assertEquals(SimpleDateFormat.class, new ScriptPlaceholder("rate * 0.5::date_full::20", null).getFormat().getClass()); assertEquals(SimpleDateFormat.class, new ScriptPlaceholder("rate * 0.5::date_long", null).getFormat().getClass()); assertEquals(SimpleDateFormat.class, new ScriptPlaceholder("rate * 0.5::date_medium", null).getFormat().getClass()); assertEquals(SimpleDateFormat.class, new ScriptPlaceholder("rate * 0.5::date_short", null).getFormat().getClass()); } @Test public void getFormattedNullValue() { assertEquals("", new ScriptPlaceholder("name", null).getFormatted(null)); assertEquals(" ", new ScriptPlaceholder("name::10", null).getFormatted(null)); } @Test public void formattedValueSum() { List<Integer> data = new ArrayList<>(); data.add(10); data.add(20); data.add(30); assertEquals(new BigDecimal("60.0"), new BasicPlaceholder("total::sum").getFormatted(data)); List<BigDecimal> data2 = new ArrayList<>(); data2.add(new BigDecimal("10.25")); data2.add(new BigDecimal("20.75")); assertEquals(NumberFormat.getCurrencyInstance().format(31), new BasicPlaceholder("total::sum::currency").getFormatted(data2)); } @Test public void formattedValueCount() { List<Integer> data = new ArrayList<>(); data.add(10); data.add(20); data.add(30); assertEquals(3, new BasicPlaceholder("total::count").getFormatted(data)); List<BigDecimal> data2 = new ArrayList<>(); data2.add(new BigDecimal("10.25")); data2.add(new BigDecimal("20.75")); assertEquals(NumberFormat.getCurrencyInstance().format(2), new BasicPlaceholder("total::count::currency").getFormatted(data2)); } @Test public void getNullValue() { Student student = new Student("student"); ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); scriptEngineManager.setBindings(new DataSourceBinding(DataSources.from(new Object[]{student}))); ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript"); ScriptPlaceholder placeholder = new ScriptPlaceholder("bean.name", scriptEngine); assertEquals("student", placeholder.getValueAsString(null)); placeholder = new ScriptPlaceholder("name::10", scriptEngine); assertEquals("student ", placeholder.getValueAsString(null)); placeholder = new ScriptPlaceholder("bean.name::10", scriptEngine); assertEquals("student ", placeholder.getValueAsString(null)); placeholder = new ScriptPlaceholder("unknown", scriptEngine); assertEquals("", placeholder.getValueAsString(null)); placeholder = new ScriptPlaceholder("unknown::10", scriptEngine); assertEquals(" ", placeholder.getValueAsString(null)); } public static class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }