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=\" \")+\"&nbsp;\"$</ul>");
     t.setAttribute("name", "Ter");
     t.setAttribute("name", "Tom");
     t.setAttribute("name", "Mel");
     //System.out.println(t);
     String expecting = "<ul>Ter</li> <li>&nbsp;Tom</li> <li>&nbsp;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);
        }