-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFullFidelityLexerTests.cs
More file actions
39 lines (32 loc) · 1.61 KB
/
Copy pathFullFidelityLexerTests.cs
File metadata and controls
39 lines (32 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using AuroraScript.Compiler;
using AuroraScript.Compiler.Syntax;
using System;
using System.Linq;
using Xunit;
namespace AuroraScript.Tests;
public sealed class FullFidelityLexerTests
{
[Fact]
public void PreservesWhitespaceCommentsAndTokensInSourceOrder()
{
const string source = "// first\r\n const value = /a[\\/]b/g; /* block */";
var elements = AuroraSyntaxScanner.ScanAll(source, "test.as");
Assert.Contains(elements, element => !element.IsToken && element.Trivia.Kind == SyntaxTriviaKind.LineComment);
Assert.Contains(elements, element => !element.IsToken && element.Trivia.Kind == SyntaxTriviaKind.WhiteSpace);
Assert.Contains(elements, element => !element.IsToken && element.Trivia.Kind == SyntaxTriviaKind.NewLine);
Assert.Contains(elements, element => !element.IsToken && element.Trivia.Kind == SyntaxTriviaKind.BlockComment);
Assert.Contains(elements, element => element.IsToken && element.Token.Kind == SyntaxTokenKind.Regex);
Assert.Equal(SyntaxTokenKind.EndOfFile, elements.Last().Token.Kind);
}
[Fact]
public void DoesNotTreatDivisionAsRegexAfterValue()
{
const string source = "const value = 8 / 2;";
var elements = AuroraSyntaxScanner.ScanAll(source, "test.as");
Assert.DoesNotContain(elements, element => element.IsToken && element.Token.Kind == SyntaxTokenKind.Regex);
Assert.Contains(elements, element =>
element.IsToken &&
element.Token.SymbolId == Symbols.OP_DIVIDE.Id &&
source.AsSpan(element.Token.Offset, element.Token.Length).SequenceEqual("/"));
}
}