public void TestDictDefaultIsDefaultString() { string templates = "map ::= [default: \"default\"] " + newline + "t() ::= << <map.(\"1\")> >>" + newline ; WriteFile(tmpdir, "test.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "test.stg")); Template st = group.GetInstanceOf("t"); string expecting = " default "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestDefineRegionInSameGroup() { string dir = GetRandomDir(); string g = "a() ::= <<[<@r()>]>>\n" + "@a.r() ::= <<foo>>\n"; WriteFile(dir, "g.stg", g); TemplateGroup group = new TemplateGroupFile(dir + "/g.stg"); Template st = group.GetInstanceOf("a"); string expected = "[foo]"; string result = st.Render(); Assert.AreEqual(expected, result); }
public void TestCantDefineEmbeddedRegionAgain() { string dir = GetRandomDir(); string g = "a() ::= <<[<@r>foo<@end>]>>\n" + "@a.r() ::= <<bar>>\n"; // error; dup WriteFile(dir, "g.stg", g); TemplateGroup group = new TemplateGroupFile(Path.Combine(dir, "g.stg")); ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; group.Load(); string expected = "2:3: region a.r is embedded and thus already implicitly defined" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestDictDefaultValue() { string templates = "typeInit ::= [\"int\":\"0\", default:\"null\"] " + newline + "var(type,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline ; WriteFile(tmpdir, "test.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "test.stg")); Template st = group.GetInstanceOf("var"); st.Add("type", "UserRecord"); st.Add("name", "x"); string expecting = "UserRecord x = null;"; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestDictDefaultStringAsKey() { string templates = "typeInit ::= [\"default\":\"foo\"] " + newline + "var(type,name) ::= \"<type> <name> = <typeInit.(type)>;\"" + newline ; WriteFile(tmpdir, "test.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "test.stg")); Template st = group.GetInstanceOf("var"); st.Add("type", "default"); st.Add("name", "x"); string expecting = "default x = foo;"; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestArg() { String templates = "foo(a,) ::= << >>\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; var errors = new ErrorBuffer(); group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:6: missing ID at ')'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestNumberRendererWithPrintfFormat() { string templates = "foo(x,y) ::= << <x; format=\"F0\"> <y; format=\"0.000\"> >>\n"; WriteFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(int), new NumberRenderer()); group.RegisterRenderer(typeof(double), new NumberRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", -2100); st.Add("y", 3.14159); string expecting = " -2100 3.142 "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestDefineRegionInSubgroup() { string dir = GetRandomDir(); string g1 = "a() ::= <<[<@r()>]>>\n"; WriteFile(dir, "g1.stg", g1); string g2 = "@a.r() ::= <<foo>>\n"; WriteFile(dir, "g2.stg", g2); TemplateGroup group1 = new TemplateGroupFile(dir + "/g1.stg"); TemplateGroup group2 = new TemplateGroupFile(dir + "/g2.stg"); group2.ImportTemplates(group1); // define r in g2 Template st = group2.GetInstanceOf("a"); string expected = "[foo]"; string result = st.Render(); Assert.AreEqual(expected, result); }
public void TestAttribute() { String templates = "t(x) ::= << <x> >>" + newline; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "t.stg"); group.Debug = true; DebugTemplate template = (DebugTemplate)group.GetInstanceOf("t"); IList<InterpEvent> events = template.GetEvents(); String expected = "[EvalExprEvent{self=t(),start=0,stop=-1,expr=<x>}," + " EvalExprEvent{self=t(),start=0,stop=0,expr= }," + " EvalTemplateEvent{self=t(),start=0,stop=0}]"; String result = ((IList)events).ToElementString(); Assert.AreEqual(expected, result); }
public void TestLocaleWithNumberRenderer() { string templates = "foo(x,y) ::= << <x; format=\"N0\"> <y; format=\"0.000\"> >>\n"; WriteFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(int), new NumberRenderer()); group.RegisterRenderer(typeof(double), new NumberRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", -2100); st.Add("y", 3.14159); // Polish uses ' ' for ',' and ',' for '.' string expecting = " -2 100 3,142 "; string result = st.Render(CultureInfo.GetCultureInfo("pl-PL")); Assert.AreEqual(expecting, result); }
public void TestHiddenPropertyNotError() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; String templates = "t(u) ::= \"<u.name>\"" + newline; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ST st = group.GetInstanceOf("t"); st.Add("u", new UserHiddenName("parrt")); st.Render(); String expected = ""; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestSoleArgUsingApplySyntax() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; String templates = "t() ::= \"<{9}:u()>\"\n" + "u(x,y) ::= \"<x>\"\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ST st = group.GetInstanceOf("t"); String expected = "9"; String result = st.Render(); Assert.AreEqual(expected, result); expected = "context [t] 1:1 expecting single arg in template reference u() (not 2 args)" + newline; result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestPassUnknownAttr() { String templates = "t() ::= \"<u(x={Ter})>\"\n" + "u(y) ::= <<hi <x>!>>\n"; ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ST st = group.GetInstanceOf("t"); String expected = "hi Ter!"; String result = st.Render(); Assert.AreEqual(expected, result); // check error now expected = "context [t u] can't set attribute x; template u has no such attribute" + newline; result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestMissingSuperTemplate() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; String templates = "t() ::= \"<super.t()>\"" + newline; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); String templates2 = "u() ::= \"blech\"" + newline; WriteFile(tmpdir, "t2.stg", templates2); STGroup group2 = new STGroupFile(Path.Combine(tmpdir, "t2.stg")); group.ImportTemplates(group2); ST st = group.GetInstanceOf("t"); st.Render(); String expected = "context [t] 1:1 no such template: super.t" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestDefineRegionInSubgroup2() { string dir = GetRandomDir(); string g1 = "a() ::= <<[<@r()>]>>\n"; WriteFile(dir, "g1.stg", g1); string g2 = "@a.r() ::= <<foo>>>\n"; WriteFile(dir, "g2.stg", g2); TemplateGroup group1 = new TemplateGroupFile(dir + "/g1.stg"); TemplateGroup group2 = new TemplateGroupFile(dir + "/g2.stg"); group1.ImportTemplates(group2); // opposite of previous; g1 imports g2 Template st = group1.GetInstanceOf("a"); string expected = "[]"; // @a.r implicitly defined in g1; can't see g2's string result = st.Render(); Assert.AreEqual(expected, result); }
public void TestReUseOfCat() { string templates = "a(mine,yours) ::= \"<b([mine,yours])>\"" + newline + "b(x) ::= \"<x>, <x>\"" + newline ; WriteFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); Template e = group.GetInstanceOf("a"); var mine = new ArrayList(); mine.Add("Ter"); mine.Add("Tom"); e.Add("mine", mine); var yours = new ArrayList(); yours.Add("Foo"); e.Add("yours", yours); string expecting = "TerTomFoo, TerTomFoo"; Assert.AreEqual(expecting, e.Render()); }
public void TestNewlineInString() { String templates = "foo() ::= \"\nfoo\"\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; var errors = new ErrorBuffer(); group = new STGroupFile(tmpdir + "/" + "t.stg"); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:11: \\n in string" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestParallelAttributeIterationWithDifferentSizesTemplateRefInsideToo() { String templates = "page(names,phones,salaries) ::= " + newline + " << <names,phones,salaries:{n,p,s | <value(n)>@<value(p)>: <value(s)>}; separator=\", \"> >>" + newline + "value(x=\"n/a\") ::= \"<x>\"" + newline; WriteFile(tmpdir, "g.stg", templates); STGroup group = new STGroupFile(tmpdir + "/g.stg"); ST p = group.GetInstanceOf("page"); p.Add("names", "Ter"); p.Add("names", "Tom"); p.Add("names", "Sriram"); p.Add("phones", "1"); p.Add("phones", "2"); p.Add("salaries", "big"); String expecting = "Ter@1: big, Tom@2: n/a, Sriram@n/a: n/a"; Assert.AreEqual(expecting, p.Render()); }
public void TestRegion() { string dir = GetRandomDir(); string groupFile = "a() ::= <<\n" + "[<@r()>]\n" + ">>\n"; WriteFile(dir, "group.stg", groupFile); TemplateGroup group = new TemplateGroupFile(dir + "/group.stg"); Template st = group.GetInstanceOf("a"); string expected = "[]" + newline; string result = st.Render(); Assert.AreEqual(expected, result); }
public void TestMap2() { String templates = "d ::= [\"k\":]\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; ErrorBuffer errors = new ErrorBuffer(); group = new STGroupFile(tmpdir + "/" + "t.stg"); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:11: missing value for key at ']'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestTemplateCall() { String templates = "t(x) ::= <<[<u()>]>>\n" + "u() ::= << <x> >>\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "t.stg"); group.Debug = true; DebugTemplate template = (DebugTemplate)group.GetInstanceOf("t"); IList<InterpEvent> events = template.GetEvents(); String expected = "[EvalExprEvent{self=t(),start=0,stop=0,expr=[}," + " EvalExprEvent{self=u(),start=1,stop=0,expr=<x>}," + " EvalExprEvent{self=u(),start=1,stop=1,expr= }," + " EvalTemplateEvent{self=u(),start=1,stop=1}," + " EvalExprEvent{self=t(),start=1,stop=1,expr=<u()>}," + " EvalExprEvent{self=t(),start=2,stop=2,expr=]}," + " EvalTemplateEvent{self=t(),start=0,stop=2}]"; String result = ((IList)events).ToElementString(); Assert.AreEqual(expected, result); }
public void TestMap3() { String templates = "d ::= [\"k\":{dfkj}}]\n"; // extra } WriteFile(tmpdir, "t.stg", templates); STGroup group = null; ErrorBuffer errors = new ErrorBuffer(); group = new STGroupFile(tmpdir + "/" + "t.stg"); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:17: invalid character '}'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestUnterminatedString() { String templates = "f() ::= \""; // extra } WriteFile(tmpdir, "t.stg", templates); STGroup group = null; ErrorBuffer errors = new ErrorBuffer(); group = new STGroupFile(tmpdir + "/" + "t.stg"); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:9: unterminated string" + newline + "t.stg 1:9: missing template at '<EOF>'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestParen2() { String templates = "foo) ::= << >>\n" + "bar() ::= <<bar>>\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; var errors = new ErrorBuffer(); group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 1:0: garbled template definition starting at 'foo'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestUndefinedArg() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; string templates = "t() ::= \"<u()>\"\n" + "u() ::= \"<x>\"\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); group.Debug = true; ST st = group.GetInstanceOf("t"); st.Render(); String expected = "context [t, u] 1:1 attribute x isn't defined" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestErrorWithinTemplate() { String templates = "foo(a) ::= \"<a b>\"\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; ErrorBuffer errors = new ErrorBuffer(); group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "1:15: 'b' came as a complete surprise to me" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestUndefinedArgNoProblemInCompatibilityMode() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; ErrorManager.CompatibilityMode = true; try { string templates = "t() ::= \"<u()>\"\n" + "u() ::= \"<x>\"\n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(tmpdir + "/" + "t.stg"); ST st = group.GetInstanceOf("t"); st.Render(); String expected = ""; String result = errors.ToString(); Assert.AreEqual(expected, result); } finally { ErrorManager.CompatibilityMode = false; } }
public void TestReUseOfRestResult() { string templates = "a(names) ::= \"<b(rest(names))>\"" + newline + "b(x) ::= \"<x>, <x>\"" + newline ; WriteFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); Template e = group.GetInstanceOf("a"); var names = new ArrayList(); names.Add("Ter"); names.Add("Tom"); e.Add("names", names); string expecting = "Tom, Tom"; Assert.AreEqual(expecting, e.Render()); }
public void TestMissingEmbeddedTemplate() { ErrorBuffer errors = new ErrorBuffer(); ErrorManager.ErrorListener = errors; String templates = "t() ::= \"<foo()>\"" + newline; WriteFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ST st = group.GetInstanceOf("t"); st.Render(); String expected = "context [t] 1:0 no such template: foo" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestMissingTemplate() { String templates = "foo() ::= \n"; WriteFile(tmpdir, "t.stg", templates); STGroup group = null; ITemplateErrorListener errors = new ErrorBuffer(); group = new STGroupFile(Path.Combine(tmpdir, "t.stg")); ErrorManager.ErrorListener = errors; group.Load(); // force load String expected = "t.stg 2:0: missing template at '<EOF>'" + newline; String result = errors.ToString(); Assert.AreEqual(expected, result); }