package org.nutz.lang.tmpl; import static org.junit.Assert.*; import java.util.Date; import org.junit.Test; import org.nutz.lang.Lang; import org.nutz.lang.Times; public class TmplTest { @Test public void test_bracket_mode(){ assertEquals("A100C", Tmpl.exec("A${b(int)?89}C", Lang.map("b:100"))); assertEquals("A89C", Tmpl.exec("A${b(int)?89}C", null)); } @Test public void test_json_format() { assertEquals("null", Tmpl.exec("${a<json>}", Lang.map(""))); assertEquals("null", Tmpl.exec("${a<json>}", Lang.map("a:null"))); assertEquals("{x:100,y:99}", Tmpl.exec("${a<json:c>}", Lang.map("a:{x:100,y:99}"))); assertEquals("{\"x\":100,\"y\":99}", Tmpl.exec("${a<json:cq>}", Lang.map("a:{x:100,y:99}"))); assertEquals("", Tmpl.exec("${a<json>?}", Lang.map(""))); assertEquals("[]", Tmpl.exec("${a<json>?[]}", Lang.map(""))); assertEquals("{}", Tmpl.exec("${a<json>?-obj-}", Lang.map(""))); assertEquals("xyz", Tmpl.exec("${a<json>?-obj-}", Lang.map("a:'xyz'"))); assertEquals("{k:[3, true, \"a\"]}", Tmpl.exec("${a<json:c>?-obj-}", Lang.map("a:{k:[3,true,'a']}"))); } @Test public void test_string_format() { assertEquals("AB C", Tmpl.exec("A${b<:%-4s>?}C", Lang.map("b:'B'}"))); // assertEquals("AB C", Tmpl.exec("A${b<string:%-4s>?}C", // Lang.map("b:'B'}"))); } @Test public void test_escape() { assertEquals("A${b}C", Tmpl.exec("A$${b}C", Lang.map("b:'BB'}"))); } @Test public void test_dynamic_dft() { assertEquals("ABC", Tmpl.exec("A${b?@x}C", Lang.map("x:'B'}"))); } @Test public void test_empty_dft() { assertEquals("AC", Tmpl.exec("A${b?}C", Lang.map("x:'B'}"))); assertEquals("ABC", Tmpl.exec("A${b?}C", Lang.map("b:'B'}"))); } @Test public void test_special_key() { assertEquals("ABC", Tmpl.exec("A${a-b}C", Lang.map("'a-b':'B'}"))); assertEquals("ABC", Tmpl.exec("A${'a.b'}C", Lang.map("'a.b':'B'}"))); assertEquals("A1C", Tmpl.exec("A${pos[0].'x.x'}C", Lang.map("pos:[{'x.x':1},{'y.y':2}]}"))); assertEquals("A2C", Tmpl.exec("A${pos[1].'y.y'}C", Lang.map("pos:[{'x.x':1},{'y.y':2}]}"))); } @Test public void test_string() { assertEquals("ABC", Tmpl.exec("A${a.b}C", Lang.map("a:{b:'B'}"))); assertEquals("ABC", Tmpl.exec("A${a.b[1]}C", Lang.map("a:{b:['A','B','C']}"))); assertEquals("ABC", Tmpl.exec("A${a?B}C", null)); } @Test public void test_int() { assertEquals("003", Tmpl.exec("${n<int:%03d>}", Lang.map("n:3"))); assertEquals("010", Tmpl.exec("${n<int:%03X>}", Lang.map("n:16"))); } @Test public void test_simple_float() { assertEquals("3.00", Tmpl.exec("${n<float>}", Lang.map("n:3"))); assertEquals("0.98", Tmpl.exec("${n<float>?.984}", null)); } @Test public void test_date() { long ms = System.currentTimeMillis(); Date d = Times.D(ms); String sd = Times.format("yyyy-MM-dd'T'HH:mm:ss", d); assertEquals(sd, Tmpl.exec("${d<date>}", Lang.mapf("d:%s", ms))); assertEquals(Times.sD(d), Tmpl.exec("${d<date:yyyy-MM-dd>}", Lang.mapf("d:'%s'", sd))); } @Test public void test_boolean() { assertEquals("yes", Tmpl.exec("${v<boolean:no/yes>}", Lang.map("v:true"))); assertEquals("no", Tmpl.exec("${v<boolean:no/yes>}", Lang.map("v:false"))); assertEquals("no", Tmpl.exec("${v<boolean:no/yes>?false}", null)); assertEquals("是", Tmpl.exec("${v<boolean:否/是>}", Lang.map("v:true"))); assertEquals("否", Tmpl.exec("${v<boolean:否/是>}", Lang.map("v:false"))); assertEquals("否", Tmpl.exec("${v<boolean:否/是>?false}", null)); assertEquals("false", Tmpl.exec("${v<boolean>?false}", null)); assertEquals("true", Tmpl.exec("${v<boolean>?true}", Lang.map("{}"))); assertEquals("false", Tmpl.exec("${v<boolean>}", null)); assertEquals("false", Tmpl.exec("${v<boolean>}", Lang.map("{}"))); } }