public void printReport(string filename) { string URIFilename = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + Path.DirectorySeparatorChar + "templates" + Path.DirectorySeparatorChar + "ST-HtmlReport" + Path.DirectorySeparatorChar; Uri uri = new Uri(URIFilename); logger.Debug("Defining Template directory for HTML report to " + uri.LocalPath); TemplateGroup group = new TemplateGroupDirectory(uri.LocalPath, '$', '$'); ErrorBuffer errors = new ErrorBuffer(); group.Listener = errors; group.Load(); Template st = group.GetInstanceOf("MainTemplate"); st.Add("Report", this); string result = st.Render(); if (errors.Errors.Count > 0) { foreach (TemplateMessage m in errors.Errors) { logger.Error(m); throw new Exception(m.ToString()); } } StreamWriter output = new StreamWriter(filename, false, Encoding.GetEncoding("UTF-8")); output.Write(result); output.Close(); }
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 TestIllegalOption() { ErrorBuffer errors = new ErrorBuffer(); TemplateGroup group = new TemplateGroup(); group.Listener = errors; group.DefineTemplate("test", "<name; bad=\"ugly\">", new string[] { "name" }); Template st = group.GetInstanceOf("test"); st.Add("name", "Ter"); string expected = "Ter"; string result = st.Render(); Assert.AreEqual(expected, result); expected = "[test 1:7: no such option: bad]"; Assert.AreEqual(expected, errors.Errors.ToListString()); }
public static TemplateVisualizer Visualize(this Template template, ErrorManager errorManager, CultureInfo culture, int lineWidth) { ErrorBuffer errors = new ErrorBuffer(); template.impl.NativeGroup.Listener = errors; StringWriter @out = new StringWriter(); ITemplateWriter wr = new AutoIndentWriter(@out); wr.LineWidth = lineWidth; Interpreter interp = new Interpreter(template.Group, culture, true); TemplateFrame frame = new TemplateFrame(template, null); interp.Execute(wr, frame); // Render and track events TemplateVisualizer visualizer = new TemplateVisualizer(errorManager, frame, @out.ToString(), interp, interp.GetExecutionTrace(), errors.Errors); visualizer.Show(); return visualizer; }
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 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 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 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 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 TestEvalSTFromAnotherGroup() { ErrorBuffer errors = new ErrorBuffer(); TemplateGroup innerGroup = new TemplateGroup(); innerGroup.Listener = errors; innerGroup.DefineTemplate("bob", "inner"); Template st = innerGroup.GetInstanceOf("bob"); TemplateGroup outerGroup = new TemplateGroup(); outerGroup.Listener = errors; outerGroup.DefineTemplate("errorMessage", "<x>", new string[] { "x" }); outerGroup.DefineTemplate("bob", "outer"); // should not be visible to test() in innerGroup Template outerST = outerGroup.GetInstanceOf("errorMessage"); outerST.Add("x", st); string expected = "inner"; string result = outerST.Render(); Assert.AreEqual(errors.Errors.Count, 0); // ignores no such prop errors Assert.AreEqual(expected, result); }
public void TestEvalSTIteratingSubtemplateInSTFromAnotherGroup() { ErrorBuffer errors = new ErrorBuffer(); TemplateGroup innerGroup = new TemplateGroup(); innerGroup.Listener = errors; innerGroup.DefineTemplate("test", "<m:samegroup()>", new string[] { "m" }); innerGroup.DefineTemplate("samegroup", "hi ", new string[] { "x" }); Template st = innerGroup.GetInstanceOf("test"); st.Add("m", new int[] { 1, 2, 3 }); TemplateGroup outerGroup = new TemplateGroup(); outerGroup.DefineTemplate("errorMessage", "<x>", new string[] { "x" }); Template outerST = outerGroup.GetInstanceOf("errorMessage"); outerST.Add("x", st); string expected = "hi hi hi "; string result = outerST.Render(); Assert.AreEqual(errors.Errors.Count, 0); // ignores no such prop errors 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 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 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 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 TestMap3() { string templates = "d ::= [\"k\":{dfkj}}]\n"; // extra } writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "[t.stg 1:17: invalid character '}']"; string result = errors.Errors.ToListString(); Assert.AreEqual(expected, result); }
public void TestValidButOutOfPlaceCharOnDifferentLine() { string templates = "foo() ::= \"hi <\n" + ".> mom\"\n"; writeFile(tmpdir, "t.stg", templates); ErrorBuffer 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: \\n in string, t.stg 1:14: doesn't look like an expression]"; string result = errors.Errors.ToListString(); 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 TestDefaultArgsOutOfOrder() { string templates = "foo(a={hi}, b) ::= << >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "[t.stg 1:13: Optional parameters must appear after all required parameters]"; string result = errors.Errors.ToListString(); 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 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 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 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 TestErrorWithinTemplate() { string templates = "foo(a) ::= \"<a b>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "[t.stg 1:15: 'b' came as a complete surprise to me]"; string result = errors.Errors.ToListString(); Assert.AreEqual(expected, result); }
public void TestUnterminatedString() { string templates = "f() ::= \""; // extra } writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "[t.stg 1:9: unterminated string, t.stg 1:9: missing template at '<EOF>']"; string result = errors.Errors.ToListString(); Assert.AreEqual(expected, result); }
public void TestMap2() { string templates = "d ::= [\"k\":]\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer 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 value for key at ']']"; string result = errors.Errors.ToListString(); Assert.AreEqual(expected, result); }
public void TestArg3() { string templates = "foo(a b) ::= << >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroupFile group; ErrorBuffer errors = new ErrorBuffer(); group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Listener = errors; group.Load(); // force load string expected = "[t.stg 1:6: no viable alternative at input 'b']"; string result = errors.Errors.ToListString(); 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); }