예제 #1
0
        public void ShouldNotParseWithoutCases()
        {
            // Arrange
            var grammar    = new CicodeGrammar();
            var parser     = new Parser(grammar);
            var sourceCode =
                @"
FUNCTION A()

    SELECT CASE a                
    END SELECT

END
";
            // Act
            var parseTree = parser.Parse(sourceCode);

            // Assert
            Assert.IsNotNull(parseTree);
            Assert.IsTrue(parseTree.HasErrors());
            // A parser error is expected at the end of line 4 because the expected list of cases which is missing
            Assert.AreEqual <int>(1, parseTree.ParserMessages
                                  .Where(m => m.Location.Line == 4)
                                  .Where(m => m.ParserState.ExpectedTerminals.First().Name == "CASE")
                                  .Count());
        }
예제 #2
0
        public void ShouldNotParseWithoutCases()
        {
            // Arrange
            var grammar = new CicodeGrammar();
            var parser = new Parser(grammar);
            var sourceCode =
            @"
            FUNCTION A()

            SELECT CASE a
            END SELECT

            END
            ";
            // Act
            var parseTree = parser.Parse(sourceCode);

            // Assert
            Assert.IsNotNull(parseTree);
            Assert.IsTrue(parseTree.HasErrors());
            // A parser error is expected at the end of line 4 because the expected list of cases which is missing
            Assert.AreEqual<int>(1, parseTree.ParserMessages
                .Where(m => m.Location.Line == 4)
                .Where(m => m.ParserState.ExpectedTerminals.First().Name == "CASE")
                .Count());
        }
예제 #3
0
        public void ShouldNotParseCaseElseWhenNotAtTheEnd()
        {
            // Arrange
            var grammar    = new CicodeGrammar();
            var parser     = new Parser(grammar);
            var sourceCode =
                @"
FUNCTION A()

    SELECT CASE a
        CASE 1
            A();
        CASE ELSE
            A();
        CASE 1
            A();
    END SELECT

END
";
            // Act
            var parseTree = parser.Parse(sourceCode);

            // Assert
            Assert.IsNotNull(parseTree);
            Assert.IsTrue(parseTree.HasErrors());
            // A parser error is expected at line 7 because of the CASE ELSE clause which is not at then end of the case list
            Assert.AreEqual <int>(1, parseTree.ParserMessages.Where(m => m.Location.Line == 7).Count());
        }
예제 #4
0
        public void ShouldNotParseCaseElseWhenNotAtTheEnd()
        {
            // Arrange
            var grammar = new CicodeGrammar();
            var parser = new Parser(grammar);
            var sourceCode =
            @"
            FUNCTION A()

            SELECT CASE a
            CASE 1
            A();
            CASE ELSE
            A();
            CASE 1
            A();
            END SELECT

            END
            ";
            // Act
            var parseTree = parser.Parse(sourceCode);

            // Assert
            Assert.IsNotNull(parseTree);
            Assert.IsTrue(parseTree.HasErrors());
            // A parser error is expected at line 7 because of the CASE ELSE clause which is not at then end of the case list
            Assert.AreEqual<int>(1, parseTree.ParserMessages.Where(m => m.Location.Line == 7).Count());
        }
예제 #5
0
        protected void ParseAndAssertNoErrors(string sourceCode)
        {
            var grammar   = new CicodeGrammar();
            var parser    = new Parser(grammar);
            var parseTree = parser.Parse(sourceCode);

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors(), GetParserMessages(parseTree));
        }
예제 #6
0
        /// <summary>
        /// Load sample program from resources, run it and check its output
        /// </summary>
        protected void ParseResourceAndAssertNoErrors(string programResourceName)
        {
            var grammar   = new CicodeGrammar();
            var parser    = new Parser(grammar);
            var parseTree = parser.Parse(LoadResourceText(programResourceName));

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors(), GetParserMessages(parseTree));
        }
예제 #7
0
        /// <summary>
        /// Load sample program from resources, run it and check its output
        /// </summary>
        protected void ParseResourceAndAssertNoErrors(string programResourceName)
        {
            var grammar = new CicodeGrammar();
            var parser = new Parser(grammar);
            var parseTree = parser.Parse(LoadResourceText(programResourceName));

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors(), GetParserMessages(parseTree));
        }
예제 #8
0
        protected void ParseAndAssertNoErrors(string sourceCode)
        {
            var grammar = new CicodeGrammar();
            var parser = new Parser(grammar);
            var parseTree = parser.Parse(sourceCode);

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors(), GetParserMessages(parseTree));
        }
예제 #9
0
        /// <summary>
        /// Load sample program from resources, run it and check its output
        /// </summary>
        void RunSampleAndCompareResults(string programResourceName, string outputResourceName)
        {
            var grammar = new CicodeGrammar();
            var parser = new Parser(grammar);
            var parseTree = parser.Parse(LoadResourceText(programResourceName));

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors());

            string result = ""; //grammar.RunSample(new RunSampleArgs(parser.Language, null, parseTree));
            Assert.IsNotNull(result);
            Assert.AreEqual(LoadResourceText(outputResourceName), result);
        }
예제 #10
0
        /// <summary>
        /// Load sample program from resources, run it and check its output
        /// </summary>
        void RunSampleAndCompareResults(string programResourceName, string outputResourceName)
        {
            var grammar   = new CicodeGrammar();
            var parser    = new Parser(grammar);
            var parseTree = parser.Parse(LoadResourceText(programResourceName));

            Assert.IsNotNull(parseTree);
            Assert.IsFalse(parseTree.HasErrors());

            string result = ""; //grammar.RunSample(new RunSampleArgs(parser.Language, null, parseTree));

            Assert.IsNotNull(result);
            Assert.AreEqual(LoadResourceText(outputResourceName), result);
        }