Пример #1
0
 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());
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 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);
 }
Пример #5
0
        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);
        }
Пример #6
0
        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;
        }
Пример #7
0
        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;
        }
Пример #8
0
 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);
 }
Пример #9
0
 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);
 }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
        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);
        }
Пример #17
0
        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());
        }
Пример #18
0
        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());
        }
Пример #19
0
 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());
 }
Пример #20
0
        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);
        }
Пример #21
0
        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);
        }
Пример #22
0
 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);
 }
Пример #23
0
        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);
        }
Пример #24
0
        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);
        }
Пример #25
0
        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);
        }
Пример #26
0
        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);
        }
Пример #27
0
        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);
        }
Пример #28
0
 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);
 }
Пример #29
0
        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);
        }
Пример #30
0
 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());
 }