54 lines
1.3 KiB
C#
54 lines
1.3 KiB
C#
|
using Canon.Core.Abstractions;
|
|||
|
using Canon.Core.SemanticParser;
|
|||
|
using Canon.Core.SyntaxNodes;
|
|||
|
using Canon.Tests.Utils;
|
|||
|
|
|||
|
namespace Canon.Tests.SemanticTests;
|
|||
|
|
|||
|
public class ConstValueTests
|
|||
|
{
|
|||
|
private class ConstValueVisitor : SyntaxNodeVisitor
|
|||
|
{
|
|||
|
public bool Pre { get; private set; }
|
|||
|
|
|||
|
public bool Post { get; private set; }
|
|||
|
|
|||
|
public override void PreVisit(ConstValue constValue)
|
|||
|
{
|
|||
|
constValue.OnNumberGenerator += (_, _) =>
|
|||
|
{
|
|||
|
Assert.False(Pre);
|
|||
|
Pre = true;
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
public override void PostVisit(ConstValue constValue)
|
|||
|
{
|
|||
|
constValue.OnNumberGenerator += (_, _) =>
|
|||
|
{
|
|||
|
Assert.False(Post);
|
|||
|
Post = true;
|
|||
|
};
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void RaiseEventTest()
|
|||
|
{
|
|||
|
const string program = """
|
|||
|
program main;
|
|||
|
const a = 1;
|
|||
|
begin
|
|||
|
end.
|
|||
|
""";
|
|||
|
|
|||
|
ProgramStruct root = CompilerHelpers.Analyse(program);
|
|||
|
SyntaxTreeTraveller traveller = new();
|
|||
|
ConstValueVisitor visitor = new();
|
|||
|
traveller.Travel(root, visitor);
|
|||
|
|
|||
|
Assert.True(visitor.Pre);
|
|||
|
Assert.True(visitor.Post);
|
|||
|
}
|
|||
|
}
|