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 testReflectionRecursive()
 {
     StringTemplate.setLintMode(true);
     StringTemplate a = new StringTemplate("$attributes$");
     StringTemplateErrorListener errors = new ErrorBuffer();
     a.setErrorListener(errors);
     a.setAttribute("name", "Terence");
     a.setAttribute("name", "Tom");
     StringTemplate b = new StringTemplate("embedded template text");
     b.setName("EmbeddedTemplate");
     b.setAttribute("x", 1);
     b.setAttribute("y", "foo");
     a.setAttribute("name", b);
     a.setAttribute("name", new R1());
     a.setAttribute("duh", "foo");
     String results = a.ToString();
     //System.out.println(results);
     String expecting = "Template anonymous:" + newline +
         "    1. Attribute duh values:" + newline +
         "        1. String" + newline +
         "    2. Attribute name values:" + newline +
         "        1. String" + newline +
         "        2. String" + newline +
         "        3. Template EmbeddedTemplate:" + newline +
         "            1. Attribute x values:" + newline +
         "                1. Int32" + newline +
         "            2. Attribute y values:" + newline +
         "                1. String" + newline +
         "        1. Property subAggregate : TestStringTemplate+R2" + newline +
         "            1. Property email : String" + newline +
         "        2. Property subTemplate : StringTemplate" + newline +
         "            2. Template a template created in R1:" + newline +
         "                1. Attribute nestedAggr values:" + newline +
         "                2. Attribute fruit values:" + newline +
         "                    1. String" + newline +
         "        3. Property lastName : String" + newline +
         "        4. Property firstName : String" + newline;
         StringTemplate.setLintMode(false);
     Assert.AreEqual(results, expecting);
 }