BadScript 2
Loading...
Searching...
No Matches
SequenceTests.cs
Go to the documentation of this file.
1// Copyright 2005-2015 Giacomo Stelluti Scala & Contributors. All rights reserved. See License.md in the project root for license information.
2
3using System.Linq;
4using Xunit;
5using FluentAssertions;
6using CSharpx;
8
10{
11 public class SequenceTests
12 {
13 [Fact]
15 {
16 var expected = new Token[] { };
17
19 new Token[] { },
20 name =>
21 new[] { "seq" }.Contains(name)
22 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Nothing<int>()))
23 : Maybe.Nothing<TypeDescriptor>());
24 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
25
26 expected.Should().AllBeEquivalentTo(result);
27 }
28
29 [Fact]
31 {
32 var expected = new[]
33 {
34 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1")
35 };
36
38 new[]
39 {
40 Token.Name("str"), Token.Value("strvalue"), Token.Value("freevalue"),
41 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1"),
42 Token.Name("x"), Token.Value("freevalue2")
43 },
44 name =>
45 new[] { "seq" }.Contains(name)
46 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Nothing<int>()))
47 : Maybe.Nothing<TypeDescriptor>());
48 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
49
50 expected.Should().BeEquivalentTo(result);
51 }
52
53 [Fact]
55 {
56 var expected = new[]
57 {
58 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1"),
59 Token.Name("seqb"), Token.Value("seqbval0")
60 };
61
63 new[]
64 {
65 Token.Name("str"), Token.Value("strvalue"), Token.Value("freevalue"),
66 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1"),
67 Token.Name("x"), Token.Value("freevalue2"),
68 Token.Name("seqb"), Token.Value("seqbval0")
69 },
70 name =>
71 new[] { "seq", "seqb" }.Contains(name)
72 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Nothing<int>()))
73 : Maybe.Nothing<TypeDescriptor>());
74 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
75
76 expected.Should().BeEquivalentTo(result);
77 }
78
79 [Fact]
81 {
82 var expected = new[]
83 {
84 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1")
85 };
86
88 new[]
89 {
90 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1")
91 },
92 name =>
93 new[] { "seq" }.Contains(name)
94 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Nothing<int>()))
95 : Maybe.Nothing<TypeDescriptor>());
96 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
97
98 expected.Should().BeEquivalentTo(result);
99 }
100
101 [Fact]
103 {
104 var expected = new[]
105 {
106 Token.Name("seq"),
107 Token.Value("seqval0"),
108 Token.Value("seqval1"),
109 Token.Value("seqval2"),
110 Token.Value("seqval3"),
111 Token.Value("seqval4"),
112 };
113
115 new[]
116 {
117 Token.Name("str"), Token.Value("strvalue"), Token.Value("freevalue"),
118 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1"),
119 Token.Name("x"), Token.Value("freevalue2"),
120 Token.Name("seq"), Token.Value("seqval2"), Token.Value("seqval3"),
121 Token.Name("seq"), Token.Value("seqval4")
122 },
123 name =>
124 new[] { "seq" }.Contains(name)
125 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Nothing<int>()))
126 : Maybe.Nothing<TypeDescriptor>());
127 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
128
129 var actual = result.ToArray();
130 Assert.Equal(expected, actual);
131 }
132
133 [Fact]
135 {
136 var incorrect = new[]
137 {
138 Token.Name("seq"),
139 Token.Value("seqval0"),
140 Token.Value("seqval1"),
141 Token.Value("seqval2"),
142 Token.Value("seqval3"),
143 Token.Value("seqval4"),
144 Token.Value("seqval5"),
145 };
146
147 var expected = new[]
148 {
149 Token.Name("seq"),
150 Token.Value("seqval0"),
151 Token.Value("seqval1"),
152 Token.Value("seqval2"),
153 };
154
156 new[]
157 {
158 Token.Name("str"), Token.Value("strvalue"), Token.Value("freevalue"),
159 Token.Name("seq"), Token.Value("seqval0"), Token.Value("seqval1"),
160 Token.Name("x"), Token.Value("freevalue2"),
161 Token.Name("seq"), Token.Value("seqval2"), Token.Value("seqval3"),
162 Token.Name("seq"), Token.Value("seqval4"), Token.Value("seqval5"),
163 },
164 name =>
165 new[] { "seq" }.Contains(name)
166 ? Maybe.Just(TypeDescriptor.Create(TargetType.Sequence, Maybe.Just<int>(3)))
167 : Maybe.Nothing<TypeDescriptor>());
168 var result = tokens.Item3; // Switch, Scalar, *Sequence*, NonOption
169
170 // Max of 3 will apply to the total values, so there should only be 3 values, not 6
171 Assert.NotEqual(incorrect, result);
172 Assert.Equal(expected, result);
173 }
174 }
175}
The Maybe type models an optional value. A value of type Maybe a either contains a value of type a (r...
Definition Maybe.cs:33
static Token Value(string text)
Definition Token.cs:30
static Token Name(string text)
Definition Token.cs:25
static Tuple< IEnumerable< Token >, IEnumerable< Token >, IEnumerable< Token >, IEnumerable< Token > > PartitionTokensByType(IEnumerable< Token > tokens, Func< string, Maybe< TypeDescriptor > > typeLookup)
static TypeDescriptor Create(TargetType tag, Maybe< int > maximumItems, TypeDescriptor next=default)