public virtual void testApplyAnonymousTemplateToMultiValuedAttribute() { // specify a template to apply to an attribute // Use a template group so we can specify the start/stop chars StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate list = new StringTemplate(group, "<ul>$items$</ul>"); // demonstrate setting arg to anonymous subtemplate StringTemplate item = new StringTemplate(group, "$item:{<li>$it$</li>}; separator=\",\"$"); item.setAttribute("item", "Terence"); item.setAttribute("item", "Jim"); item.setAttribute("item", "John"); list.setAttribute("items", item); // nested template Assert.AreEqual(list.ToString(), "<ul><li>Terence</li>,<li>Jim</li>,<li>John</li></ul>"); }
public virtual void testMultiValuedAttributeWithAnonymousTemplateUsingIndexVariableI() { StringTemplateGroup tgroup = new StringTemplateGroup("dummy", "."); StringTemplate t = new StringTemplate(tgroup, " List:" + this.newline + " " + this.newline + "foo" + this.newline + this.newline + "$names:{<br>$i$. $it$" + this.newline + "}$"); t.setAttribute("names", "Terence"); t.setAttribute("names", "Jim"); t.setAttribute("names", "Sriram"); String newline = System.Environment.NewLine; //System.out.println(t); String expecting = " List:" + newline + " " + newline + "foo" + newline + newline + "<br>1. Terence" + newline + "<br>2. Jim" + newline + "<br>3. Sriram" + newline; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testAlternativeWriter() { System.Text.StringBuilder buf = new System.Text.StringBuilder(); StringTemplateWriter w = new AnonymousClassStringTemplateWriter(buf, this); StringTemplateGroup group = new StringTemplateGroup("test"); group.defineTemplate("bold", "<b>$x$</b>"); StringTemplate name = new StringTemplate(group, "$name:bold(x=name)$"); name.setAttribute("name", "Terence"); name.write(w); Assert.AreEqual(buf.ToString(), "<b>Terence</b>"); }
public virtual void testIFTemplate() { StringTemplateGroup group = new StringTemplateGroup("dummy", ".", typeof(AngleBracketTemplateLexer)); StringTemplate t = new StringTemplate(group, "SELECT <column> FROM PERSON " + "<if(cond)>WHERE ID=<id><endif>;"); t.setAttribute("column", "name"); t.setAttribute("cond", "true"); t.setAttribute("id", "231"); Assert.AreEqual(t.ToString(), "SELECT name FROM PERSON WHERE ID=231;"); }
public virtual void testMultiLevelInheritance() { // must loop up two levels to find bold() StringTemplateGroup rootgroup = new StringTemplateGroup("root"); StringTemplateGroup level1 = new StringTemplateGroup("level1"); StringTemplateGroup level2 = new StringTemplateGroup("level2"); rootgroup.defineTemplate("bold", "<b>$it$</b>"); level1.setSuperGroup(rootgroup); level2.setSuperGroup(level1); StringTemplateErrorListener errors = new ErrorBuffer(); rootgroup.setErrorListener(errors); level1.setErrorListener(errors); level2.setErrorListener(errors); StringTemplate duh = new StringTemplate(level2, "$name:bold()$"); duh.setAttribute("name", "Terence"); String expecting = "<b>Terence</b>"; Assert.AreEqual(duh.ToString(), expecting); }
public virtual void testEscapesOutsideExpressions() { StringTemplate b = new StringTemplate("It\\'s ok...\\$; $a:{\\'hi\\', $it$}$"); b.setAttribute("a", "Ter"); String expecting = "It\\'s ok...$; \\'hi\\', Ter"; String result = b.ToString(); Assert.AreEqual(result, expecting); }
public virtual void testHashMapPropertyFetch() { StringTemplate a = new StringTemplate("$stuff.prop$"); Hashtable map = new Hashtable(); a.setAttribute("stuff", map); map["prop"] = "Terence"; String results = a.ToString(); //System.out.println(results); String expecting = "Terence"; Assert.AreEqual(results, expecting); }
public virtual void testAttributeRefButtedUpAgainstEndifAndWhitespace() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate a = new StringTemplate(group, "$if (!firstName)$$email$$endif$"); a.setAttribute("email", "*****@*****.**"); String expecting = "*****@*****.**"; Assert.AreEqual(a.ToString(), expecting); }
public virtual void testChangingAttrValueRepeatedTemplateApplicationToVector() { StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate bold = group.defineTemplate("bold", "<b>$item$</b>"); StringTemplate italics = group.defineTemplate("italics", "<i>$it$</i>"); StringTemplate members = new StringTemplate(group, "$members:bold(item=it):italics(it=it)$"); members.setAttribute("members", "Jim"); members.setAttribute("members", "Mike"); members.setAttribute("members", "Ashar"); //System.out.println("members="+members); String expecting = "<i><b>Jim</b></i><i><b>Mike</b></i><i><b>Ashar</b></i>"; Assert.AreEqual(members.ToString(), expecting); }
public virtual void testApplyTemplateNameExpression() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate bold = group.defineTemplate("foobar", "foo$attr$bar"); StringTemplate t = new StringTemplate(group, "$data:(name+\"bar\")()$"); t.setAttribute("data", "Ter"); t.setAttribute("data", "Tom"); t.setAttribute("name", "foo"); //System.out.println(t); String expecting = "fooTerbarfooTombar"; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testApplyTemplateToSingleValuedAttributeWithDefaultAttribute() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate bold = group.defineTemplate("bold", "<b>$it$</b>"); StringTemplate name = new StringTemplate(group, "$name:bold()$"); name.setAttribute("name", "Terence"); Assert.AreEqual(name.ToString(), "<b>Terence</b>"); }
public virtual void testApplyRepeatedAnonymousTemplateWithForeignTemplateRefToMultiValuedAttribute() { // specify a template to apply to an attribute // Use a template group so we can specify the start/stop chars StringTemplateGroup group = new StringTemplateGroup("dummy", "."); group.defineTemplate("link", "<a href=\"$url$\"><b>$title$</b></a>"); StringTemplate duh = new StringTemplate(group, "start|$p:{$link(url=\"/member/view?ID=\"+it.ID, title=it.firstName)$ $if(it.canEdit)$canEdit$endif$}:" + "{$it$<br>\n}$|end"); duh.setAttribute("p", new Connector(this)); duh.setAttribute("p", new Connector2(this)); String newline = System.Environment.NewLine; //System.out.println(duh); String expecting = "start|<a href=\"/member/view?ID=1\"><b>Terence</b></a> <br>\n<a href=\"/member/view?ID=2\"><b>Tom</b></a> canEdit<br>\n|end"; Assert.AreEqual(duh.ToString(), expecting); }
public virtual void testApplyAnonymousTemplateToSingleValuedAttribute() { // specify a template to apply to an attribute // Use a template group so we can specify the start/stop chars StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate item = new StringTemplate(group, "$item:{<li>$it$</li>}$"); item.setAttribute("item", "Terence"); Assert.AreEqual(item.ToString(), "<li>Terence</li>"); }
public virtual StringTemplate getSubTemplate() { StringTemplate s = new StringTemplate("sub ST"); s.setName("a template created in R1"); s.setAttribute("fruit", "Apple"); s.setAttribute("nestedAggr", new R2()); return s; }
public virtual void testEmptyIteratedValueGetsSeparator() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplateErrorListener errors = new ErrorBuffer(); group.setErrorListener(errors); StringTemplate t = new StringTemplate(group, "$names; separator=\",\"$"); t.setAttribute("names", "Terence"); t.setAttribute("names", ""); t.setAttribute("names", ""); t.setAttribute("names", "Tom"); t.setAttribute("names", "Frank"); t.setAttribute("names", ""); // empty values get separator still String expecting = "Terence,,,Tom,Frank,"; String result = t.ToString(); Assert.AreEqual(result, expecting); }
public virtual void testChangingAttrValueTemplateApplicationToVector() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate italics = group.defineTemplate("italics", "<i>$x$</i>"); StringTemplate bold = group.defineTemplate("bold", "<b>$x$</b>"); StringTemplate t = new StringTemplate(group, "$names:bold(x=it)$"); t.setAttribute("names", "Terence"); t.setAttribute("names", "Tom"); //System.out.println("'"+t.toString()+"'"); String expecting = "<b>Terence</b><b>Tom</b>"; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testEscapes() { StringTemplateGroup group = new StringTemplateGroup("dummy", "."); String newline = System.Environment.NewLine; group.defineTemplate("foo", "$x$ && $it$"); StringTemplate t = new StringTemplate(group, "$A:foo(x=\"dog\\\"\\\"\")$"); StringTemplate u = new StringTemplate(group, "$A:foo(x=\"dog\\\"g\")$"); StringTemplate v = new StringTemplate(group, "$A:{$it:foo(x=\"\\{dog\\}\\\"\")$ is cool}$"); t.setAttribute("A", "ick"); u.setAttribute("A", "ick"); v.setAttribute("A", "ick"); //System.out.println("t is '"+t.toString()+"'"); //System.out.println("u is '"+u.toString()+"'"); //System.out.println("v is '"+v.toString()+"'"); String expecting = "dog\"\" && ick"; Assert.AreEqual(t.ToString(), expecting); expecting = "dog\"g && ick"; Assert.AreEqual(u.ToString(), expecting); expecting = "{dog}\" && ick is cool"; Assert.AreEqual(v.ToString(), expecting); }
public virtual void testCollectionAttributes() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate bold = group.defineTemplate("bold", "<b>$it$</b>"); StringTemplate t = new StringTemplate(group, "$data$, $data:bold()$, " + "$list:bold():bold()$, $array$, $a2$, $a3$, $a4$"); ArrayList v = ArrayList.Synchronized(new ArrayList(10)); v.Add("1"); v.Add("2"); v.Add("3"); IList list = new ArrayList(); list.Add("a"); list.Add("b"); list.Add("c"); t.setAttribute("data", v); t.setAttribute("list", list); t.setAttribute("array", new String[]{"x", "y"}); t.setAttribute("a2", new int[]{10, 20}); t.setAttribute("a3", new float[]{1.2f, 1.3f}); t.setAttribute("a4", new double[]{8.7, 9.2}); //System.out.println(t); String expecting = "123, <b>1</b><b>2</b><b>3</b>, " + "<b><b>a</b></b><b><b>b</b></b><b><b>c</b></b>, xy, 1020, 1.21.3, 8.79.2"; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testExprInParens() { // specify a template to apply to an attribute // Use a template group so we can specify the start/stop chars StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate bold = group.defineTemplate("bold", "<b>$it$</b>"); StringTemplate duh = new StringTemplate(group, "$(\"blort: \"+(list)):bold()$"); duh.setAttribute("list", "a"); duh.setAttribute("list", "b"); duh.setAttribute("list", "c"); // System.out.println(duh); String expecting = "<b>blort: abc</b>"; Assert.AreEqual(duh.ToString(), expecting); }
public virtual void testComplicatedSeparatorExpr() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate bold = group.defineTemplate("bulletSeparator", "</li>$foo$<li>"); // make separator a complicated expression with args passed to included template StringTemplate t = new StringTemplate(group, "<ul>$name; separator=bulletSeparator(foo=\" \")+\" \"$</ul>"); t.setAttribute("name", "Ter"); t.setAttribute("name", "Tom"); t.setAttribute("name", "Mel"); //System.out.println(t); String expecting = "<ul>Ter</li> <li> Tom</li> <li> Mel</ul>"; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testIFBoolean() { StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate t = new StringTemplate(group, "$if(b)$x$endif$ $if(!b)$y$endif$"); t.setAttribute("b", true); Assert.AreEqual(t.ToString(), "x "); t = t.getInstanceOf(); t.setAttribute("b", false); Assert.AreEqual(t.ToString(), " y"); }
public virtual void testDumpMapAndSet() { StringTemplate st = new StringTemplate("$items; separator=\",\"$"); IDictionary m = new Hashtable(); m["a"] = "1"; m["b"] = "2"; m["c"] = "3"; st.setAttribute("items", m); String expecting = "1,2,3"; Assert.AreEqual(st.ToString(), expecting); st = st.getInstanceOf(); IDictionary s = new Hashtable(); s.Add("1", null); s.Add("2", null); s.Add("3", null); st.setAttribute("items", s.Keys); expecting = "2,3,1"; Assert.AreEqual(st.ToString(), expecting); }
public virtual void testAlternatingTemplateApplication() { StringTemplateGroup group = new StringTemplateGroup("dummy", "."); StringTemplate listItem = group.defineTemplate("listItem", "<li>$it$</li>"); StringTemplate bold = group.defineTemplate("bold", "<b>$it$</b>"); StringTemplate italics = group.defineTemplate("italics", "<i>$it$</i>"); StringTemplate item = new StringTemplate(group, "$item:bold(),italics():listItem()$"); item.setAttribute("item", "Jim"); item.setAttribute("item", "Mike"); item.setAttribute("item", "Ashar"); //System.out.println("ITEM="+item); String expecting = "<li><b>Jim</b></li><li><i>Mike</i></li><li><b>Ashar</b></li>"; Assert.AreEqual(item.ToString(), expecting); }
public virtual void testElseClause() { StringTemplate e = new StringTemplate("$if(title)$" + newline + "foo" + newline + "$else$" + newline + "bar" + newline + "$endif$"); e.setAttribute("title", "sample"); String expecting = "foo"; Assert.AreEqual(e.ToString(), expecting); e = e.getInstanceOf(); expecting = "bar"; Assert.AreEqual(e.ToString(), expecting); }
public virtual void testMultipleAdditions() { // specify a template to apply to an attribute // Use a template group so we can specify the start/stop chars StringTemplateGroup group = new StringTemplateGroup("dummy", "."); group.defineTemplate("link", "<a href=\"$url$\"><b>$title$</b></a>"); StringTemplate duh = new StringTemplate(group, "$link(url=\"/member/view?ID=\"+ID+\"&x=y\"+foo, title=\"the title\")$"); duh.setAttribute("ID", "3321"); duh.setAttribute("foo", "fubar"); String expecting = "<a href=\"/member/view?ID=3321&x=yfubar\"><b>the title</b></a>"; Assert.AreEqual(duh.ToString(), expecting); }
public virtual void testEmbeddedMultiLineIF() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplate main = new StringTemplate(group, "$sub$"); StringTemplate sub = new StringTemplate(group, "begin" + newline + "$if(foo)$" + newline + "$foo$" + newline + "$else$" + newline + "blort" + newline + "$endif$" + newline); sub.setAttribute("foo", "stuff"); main.setAttribute("sub", sub); String expecting = "begin" + newline + "stuff"; Assert.AreEqual(main.ToString(), expecting); main = new StringTemplate(group, "$sub$"); sub = sub.getInstanceOf(); main.setAttribute("sub", sub); expecting = "begin" + newline + "blort"; Assert.AreEqual(main.ToString(), expecting); }
public virtual void testMultiValuedAttributeWithSeparator() { StringTemplate query; // if column can be multi-valued, specify a separator StringTemplateGroup group = new StringTemplateGroup("dummy", ".", typeof(AngleBracketTemplateLexer)); query = new StringTemplate(group, "SELECT <distinct> <column; separator=\", \"> FROM <table>;"); query.setAttribute("column", "name"); query.setAttribute("column", "email"); query.setAttribute("table", "User"); // uncomment next line to make "DISTINCT" appear in output // query.setAttribute("distince", "DISTINCT"); // System.out.println(query); Assert.AreEqual(query.ToString(), "SELECT name, email FROM User;"); }
public virtual void testEmptyIteratedConditionalWithElseValueGetsSeparator() { StringTemplateGroup group = new StringTemplateGroup("test"); StringTemplateErrorListener errors = new ErrorBuffer(); group.setErrorListener(errors); StringTemplate t = new StringTemplate(group, "$users:{$if(it.ok)$$it.name$$else$$endif$}; separator=\",\"$"); t.setAttribute("users.{name,ok}", "Terence", true); t.setAttribute("users.{name,ok}", "Tom", false); t.setAttribute("users.{name,ok}", "Frank", true); t.setAttribute("users.{name,ok}", "Johnny", false); // empty conditional values get no separator String expecting = "Terence,,Frank,"; // haven't solved the last empty value problem yet String result = t.ToString(); Assert.AreEqual(result, expecting); }
public virtual void testNestedAnonymousTemplates() { StringTemplateGroup group = new StringTemplateGroup("dummy", "."); String newline = System.Environment.NewLine; StringTemplate t = new StringTemplate(group, "$A:{" + newline + "<i>$it:{" + newline + "<b>$it$</b>" + newline + "}$</i>" + newline + "}$"); t.setAttribute("A", "parrt"); String expecting = newline + "<i>" + newline + "<b>parrt</b>" + newline + "</i>" + newline; Assert.AreEqual(t.ToString(), expecting); }
public virtual void testApplyAnonymousTemplateToMapAndSet() { StringTemplate st = new StringTemplate("$items:{<li>$it$</li>}$"); IDictionary m = new Hashtable(); m["a"] = "1"; m["b"] = "2"; m["c"] = "3"; st.setAttribute("items", m); String expecting = "<li>1</li><li>2</li><li>3</li>"; Assert.AreEqual(st.ToString(), expecting); st = st.getInstanceOf(); IDictionary s = new Hashtable(); s.Add("1", null); s.Add("2", null); s.Add("3", null); st.setAttribute("items", s.Keys); expecting = "<li>2</li><li>3</li><li>1</li>"; Assert.AreEqual(st.ToString(), expecting); }