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 });
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); }