public void ReturnNoExpressionTest()
        {
            const string Code = @"
            Return;
            ";

            ProgramNode program = MyAssert.NoError(() =>
            {
                var lexemes = new Lexer(Code).LexAll();
                var parser  = new ProgramParser(lexemes, Code);
                return(parser.ParseWholeProgram());
            });

            Assert.NotNull(program);
            Assert.AreEqual(1, program !.TopLevelStatementNodes.Count);
            Assert.IsTrue(program.TopLevelStatementNodes[0] is ReturnStatementNode
            {
                ReturnExpressionNode: null
            });
Exemple #2
0
        public void IllegalBindingTest()
        {
            const string Code =
                @"
            Var x = 1;
            y = 2;
            ";

            var e = MyAssert.Error(Code);

            Assert.AreEqual(ErrorCode.CantAssignUndeclaredVariable, e.ErrorCode);
            Assert.AreEqual(3, e.LineNumber);
            Assert.AreEqual(1, e.Column);

            //MyAssert.Error(Code,
            //               e =>
            //               {
            //                   Assert.AreEqual(ErrorCode.CantAssignUndeclaredVariable, e.ErrorCode);
            //                   Assert.AreEqual(3, e.LineNumber);
            //                   Assert.AreEqual(1, e.Column);
            //               });
        }
        public void FunctionDeclarationNoParametersWithReturnTest()
        {
            const string Code = @"
            Func HelloWorld() As Int
            {
                Output(""Hello "" + x);
            }
            ";

            FunctionDeclarationNode func = MyAssert.NoError(() =>
            {
                var lexemes = new Lexer(Code).LexAll();
                var parser  = new ProgramParser(lexemes, Code);
                return(parser.ParseFunctionDeclaration());
            });

            Assert.NotNull(func);
            Assert.AreEqual("HelloWorld", func !.Identifier);
            Assert.AreEqual(0, func.ParameterNodes.Count);
            Assert.NotNull(func.ReturnTypeNode);
            Assert.AreEqual(1, func.BodyNode.Count);
        }