예제 #1
0
        public void ITC24MetaSyntax()
        {
            // Build a grammar to test meta grammar
            string actual1, actual2, expect, msg;

            expect = MetaParser.SoftMetaGrammarAndSettings;

            var parser = new Parser(MetaParser.SoftMetaGrammarAndSettings);

            actual1 = parser.GetGrammar();              // Test Meta grammar after after compilation in a Parser.
            actual2 = MetaParser.Instance.GetGrammar(); // Test Meta grammar in internal Parser.
            msg     = Util.CompareTextLines(actual1, expect);
            Assert.AreEqual(string.Empty, msg, "Meta grammar diff error");
            msg = Util.CompareTextLines(actual2, expect);
            Assert.AreEqual(string.Empty, msg, "Meta grammar internal diff error");

            // Compare generated CodeDocument with 'selected nodes'
            string       actualTags1, actualTags2, expectTags;
            CodeDocument docExpect = TestMetaGrammarDoc();

            //var metaParser = _metaparser;
            TextBuffer   buffer     = new FlatBuffer(MetaParser.SoftMetaGrammarAndSettings);
            CodeDocument docActual1 = parser.ParseString(buffer);

            buffer = new FlatBuffer(MetaParser.SoftMetaGrammarAndSettings);
            CodeDocument docActual2 = MetaParser.Instance.ParseString(buffer);

            expectTags  = docExpect.ToMarkup();
            actualTags1 = docActual1.ToMarkup();
            actualTags2 = docActual2.ToMarkup();

            msg = CodeDocument.CompareCode(docActual1, docExpect);
            Assert.AreEqual(string.Empty, msg, "Meta grammar document diff error");
            msg = CodeDocument.CompareCode(docActual2, docExpect);
            Assert.AreEqual(string.Empty, msg, "Meta grammar internal document diff error");
            Assert.AreEqual(docExpect.Name, docActual1.Name, "Document name diff error");

            Assert.AreEqual(expectTags, actualTags1, "Meta grammar document.toMarkup diff error");
            Assert.AreEqual(expectTags, actualTags2, "Meta grammar document.toMarkup diff error");
        }