42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
|
using CanonSharp.Pascal.SyntaxTree;
|
|||
|
using CanonSharp.Tests.Utils;
|
|||
|
|
|||
|
namespace CanonSharp.Tests.ParserTests;
|
|||
|
|
|||
|
public class ProgramParserTests : GrammarParserTestBase
|
|||
|
{
|
|||
|
[Fact]
|
|||
|
public void ProgramParseTest1()
|
|||
|
{
|
|||
|
Program program = ProgramParse("""
|
|||
|
program main;
|
|||
|
begin
|
|||
|
end.
|
|||
|
""");
|
|||
|
|
|||
|
Assert.Equal("main", program.Head.ProgramName.LiteralValue);
|
|||
|
Assert.Empty(program.Body.MainBlock.Statements);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ProgramParseTest2()
|
|||
|
{
|
|||
|
Program program = ProgramParse("""
|
|||
|
program main;
|
|||
|
begin
|
|||
|
temp := 1 + 1;
|
|||
|
end.
|
|||
|
""");
|
|||
|
|
|||
|
Assert.Equal("main", program.Head.ProgramName.LiteralValue);
|
|||
|
|
|||
|
AssignNode assignNode = program.Body.MainBlock.Statements[0].Convert<AssignNode>();
|
|||
|
Assert.Equal("temp", assignNode.Variable.IdentifierName);
|
|||
|
|
|||
|
BinaryOperatorNode binaryOperatorNode = assignNode.Expression.Convert<BinaryOperatorNode>();
|
|||
|
Assert.Equal(BinaryOperatorType.Add, binaryOperatorNode.OperatorType);
|
|||
|
Assert.Equal(1, binaryOperatorNode.Left.Convert<IntegerValueNode>().Value);
|
|||
|
Assert.Equal(1, binaryOperatorNode.Right.Convert<IntegerValueNode>().Value);
|
|||
|
}
|
|||
|
}
|