public void TestAnonIncludeArgMismatch3() { ITemplateErrorListener errors = new ErrorBuffer(); string template = "<a:{x|foo},{bar}>"; CompiledTemplate code = new TemplateCompiler(new TemplateGroup() { ErrorManager = new ErrorManager(errors) }).Compile(template); string expected = "1:11: anonymous template has 0 arg(s) but mapped across 1 value(s)" + newline; Assert.AreEqual(expected, errors.ToString()); }
public void TestCantDefineEmbeddedRegionAgain() { string dir = tmpdir; string g = "a() ::= <<[<@r>foo<@end>]>>\n" + "@a.r() ::= <<bar>>\n"; // error; dup writeFile(dir, "g.stg", g); TemplateGroupFile group = new TemplateGroupFile(Path.Combine(dir, "g.stg")); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; group.Load(); string expected = "g.stg 2:3: the explicit definition of region /a.r hides an embedded definition in the same group" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestArg() { string templates = "foo(a,) ::= << >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = 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 TestEmptyExpr2() { string template = "hi <> "; TemplateGroup group = new TemplateGroup(); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; try { group.DefineTemplate("test", template); } catch (TemplateException) { } string result = errors.ToString(); string expected = "test 1:3: doesn't look like an expression" + newline; Assert.AreEqual(expected, result); }
public void TestHiddenPropertyNotError() { ErrorBuffer errors = new ErrorBuffer(); string templates = "t(u) ::= \"<u.name>\"" + Environment.NewLine; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); st.Add("u", new UserHiddenName("parrt")); st.Render(); string expected = ""; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestIndexAttrVisibleLocallyOnly() { string templates = "t(names) ::= \"<names:{n | <u(n)>}>\"\n" + "u(x) ::= \"<i>:<x>\""; ErrorBuffer errors = new ErrorBuffer(); writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); st.Add("names", "Ter"); string result = st.Render(); group.GetInstanceOf("u").impl.Dump(); string expectedError = "t.stg 2:11: implicitly-defined attribute i not visible" + newline; Assert.AreEqual(expectedError, errors.ToString()); string expected = ":Ter"; Assert.AreEqual(expected, result); group.Listener = ErrorManager.DefaultErrorListener; }
public void TestArgWithSameNameAsEnclosing() { string templates = "t(x,y) ::= \"<u(x)>\"\n" + "u(y) ::= \"<x><y>\""; ErrorBuffer errors = new ErrorBuffer(); writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); st.Add("x", "x"); st.Add("y", "y"); string result = st.Render(); string expectedError = ""; Assert.AreEqual(expectedError, errors.ToString()); string expected = "xx"; Assert.AreEqual(expected, result); group.Listener = ErrorManager.DefaultErrorListener; }
public void TestWeirdChar2() { string template = "\n<\\\n"; TemplateGroup group = new TemplateGroup(); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; try { group.DefineTemplate("test", template); } catch (TemplateException) { } string result = errors.ToString(); string expected = "test 1:2: invalid escaped char: '<EOF>'" + newline + "test 1:2: expecting '>', found '<EOF>'" + newline; Assert.AreEqual(expected, result); }
public void TestWeirdChar() { string template = " <*>"; TemplateGroup group = new TemplateGroup(); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; try { group.DefineTemplate("test", template); } catch (TemplateException) { } string result = errors.ToString(); string expected = "test 1:4: invalid character '*'" + newline + "test 1:0: this doesn't look like a template: \" <*>\"" + newline; Assert.AreEqual(expected, result); }
public void TestValidButOutOfPlaceChar() { string templates = "foo() ::= <<hi <.> mom>>\n"; writeFile(tmpdir, "t.stg", templates); ITemplateErrorListener errors = new ErrorBuffer(); TemplateGroupFile group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:15: doesn't look like an expression" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestSoleArgUsingApplySyntax() { ErrorBuffer errors = new ErrorBuffer(); string templates = "t() ::= \"<{9}:u()>\"\n" + "u(x,y) ::= \"<x>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); string expected = "9"; string result = st.Render(); Assert.AreEqual(expected, result); expected = "context [/t] 1:5 passed 1 arg(s) to template /u with 2 declared arg(s)" + newline; result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestUnclosedTemplate() { string templates = "foo() ::= {"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:11: missing final '}' in {...} anonymous template" + newline + "t.stg 1:10: no viable alternative at input '{'" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestParen() { string templates = "foo( ::= << >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:5: no viable alternative at input '::='" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestMissingImportString() { string templates = "import\n" + "foo() ::= <<>>\n"; writeFile(tmpdir, "t.stg", templates); ITemplateErrorListener errors = new ErrorBuffer(); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 2:0: mismatched input 'foo' expecting STRING" + newline + "t.stg 2:3: missing EndOfFile at '('" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestErrorInNestedTemplate() { string templates = "foo() ::= \"hi <name:{[<aaa.bb!>]}> mom\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:29: mismatched input '!' expecting RDELIM" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestEOFInString() { string templates = "foo() ::= << <f(\"foo>>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:20: EOF in string" + newline + "t.stg 1:20: premature EOF" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestMissingArg() { string templates = "t() ::= \"<u()>\"\n" + "u(z) ::= \"\""; ErrorBuffer errors = new ErrorBuffer(); writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); string result = st.Render(); string expectedError = "context [/t] 1:1 passed 0 arg(s) to template /u with 1 declared arg(s)" + newline; Assert.AreEqual(expectedError, errors.ToString()); }
public void TestUnknownAttr() { string templates = "t() ::= \"<x>\"\n"; ErrorBuffer errors = new ErrorBuffer(); writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); string result = st.Render(); string expectedError = "context [/t] 1:1 attribute x isn't defined" + newline; Assert.AreEqual(expectedError, errors.ToString()); }
public void TestParallelAttributeIterationWithMissingArgs() { ErrorBuffer errors = new ErrorBuffer(); TemplateGroup group = new TemplateGroup(); group.Listener = errors; Template e = new Template(group, "<names,phones,salaries:{n,p | <n>@<p>}; separator=\", \">" ); e.Add("names", "Ter"); e.Add("names", "Tom"); e.Add("phones", "1"); e.Add("phones", "2"); e.Add("salaries", "big"); e.Render(); string errorExpecting = "1:23: anonymous template has 2 arg(s) but mapped across 3 value(s)" + newline + "context [anonymous] 1:23 passed 3 arg(s) to template /_sub1 with 2 declared arg(s)" + newline + "context [anonymous] 1:1 iterating through 3 values in zip map but template has 2 declared arguments" + newline; Assert.AreEqual(errorExpecting, errors.ToString()); string expecting = "Ter@1, Tom@2"; Assert.AreEqual(expecting, e.Render()); }
public void TestMissingEmbeddedTemplate() { ErrorBuffer errors = new ErrorBuffer(); string templates = "t() ::= \"<foo()>\"" + Environment.NewLine; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; Template st = group.GetInstanceOf("t"); st.Render(); string expected = "context [/t] 1:1 no such template: /foo" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestMissingSuperTemplate() { ErrorBuffer errors = new ErrorBuffer(); string templates = "t() ::= \"<super.t()>\"" + Environment.NewLine; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; string templates2 = "u() ::= \"blech\"" + Environment.NewLine; writeFile(tmpdir, "t2.stg", templates2); TemplateGroup group2 = new TemplateGroupFile(Path.Combine(tmpdir, "t2.stg")); group.ImportTemplates(group2); Template 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 TestUnknownRegionDefError() { string dir = tmpdir; string g = "a() ::= <<\n" + "X<@r()>Y" + ">>\n" + "@a.q() ::= \"foo\"" + newline; ITemplateErrorListener errors = new ErrorBuffer(); writeFile(dir, "g.stg", g); TemplateGroupFile group = new TemplateGroupFile(Path.Combine(dir, "g.stg")); group.Listener = errors; Template st = group.GetInstanceOf("a"); st.Render(); string result = errors.ToString(); string expecting = "g.stg 3:3: template a doesn't have a region called q" + newline; Assert.AreEqual(expecting, result); }
public void TestEOFInExpr() { string templates = "foo() ::= \"hi <name:{x|[<aaa.bb>]}\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:34: premature EOF" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestNonterminatedComment() { string templates = "foo() ::= << <!foo> >>"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:20: Nonterminated comment starting at 1:1: '!>' missing" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestNewlineInString() { string templates = "foo() ::= \"\nfoo\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = 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 TestRotPar() { string templates = "foo() ::= \"<a,b:t(),u()>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:19: mismatched input ',' expecting RDELIM" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestParen2() { string templates = "foo) ::= << >>\n" + "bar() ::= <<bar>>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = 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 TestUnterminatedExpr() { string template = "hi <t()$"; TemplateGroup group = new TemplateGroup(); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; try { group.DefineTemplate("test", template); } catch (TemplateException) { } string result = errors.ToString(); string expected = "test 1:7: invalid character '$'" + newline + "test 1:7: invalid character '<EOF>'" + newline + "test 1:7: premature EOF" + newline; Assert.AreEqual(expected, result); }
public void TestMissingRPAREN() { string templates = "foo() ::= \"hi <foo(>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ITemplateErrorListener errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "t.stg 1:19: '>' came as a complete surprise to me" + newline; string result = errors.ToString(); Assert.AreEqual(expected, result); }
public void TestStringTypeMismatch2() { ErrorBuffer errors = new ErrorBuffer(); TemplateGroup group = new TemplateGroup(); group.Listener = errors; Template e = new Template(group, "<strlen(s)>"); e.Add("s", 34); e.Render(); // generate the error string errorExpecting = "context [anonymous] 1:1 function strlen expects a string not System.Int32" + newline; Assert.AreEqual(errorExpecting, errors.ToString()); }