/
ErrorTests.cs
56 lines (48 loc) · 1.8 KB
/
ErrorTests.cs
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using Should;
using Xunit;
namespace Parsley
{
public class ErrorTests
{
private readonly TokenStream x;
private readonly TokenStream endOfInput;
public ErrorTests()
{
var lexer = new Lexer();
x = new TokenStream(lexer.Tokenize("x"));
endOfInput = new TokenStream(lexer.Tokenize(""));
}
[Fact]
public void CanIndicateErrorsAtTheCurrentPosition()
{
new Error<object>(endOfInput, ErrorMessage.Unknown()).ErrorMessages.ToString().ShouldEqual("Parse error.");
new Error<object>(endOfInput, ErrorMessage.Expected("statement")).ErrorMessages.ToString().ShouldEqual("statement expected");
}
[Fact]
public void CanIndicateMultipleErrorsAtTheCurrentPosition()
{
var errors = ErrorMessageList.Empty
.With(ErrorMessage.Expected("A"))
.With(ErrorMessage.Expected("B"));
new Error<object>(endOfInput, errors).ErrorMessages.ToString().ShouldEqual("A or B expected");
}
[Fact]
public void ThrowsWhenAttemptingToGetParsedValue()
{
Func<object> inspectParsedValue = () => new Error<object>(x, ErrorMessage.Unknown()).Value;
inspectParsedValue.ShouldThrow<MemberAccessException>("(1, 1): Parse error.");
}
[Fact]
public void HasRemainingUnparsedTokens()
{
new Error<object>(x, ErrorMessage.Unknown()).UnparsedTokens.ShouldEqual(x);
new Error<object>(endOfInput, ErrorMessage.Unknown()).UnparsedTokens.ShouldEqual(endOfInput);
}
[Fact]
public void ReportsErrorState()
{
new Error<object>(x, ErrorMessage.Unknown()).Success.ShouldBeFalse();
}
}
}