1unit Antlr.Runtime.Tests;
2
3interface
4
5uses
6  Classes,
7  SysUtils,
8  TestFramework,
9  Antlr.Runtime;
10
11type
12  // Test methods for class IANTLRStringStream
13  TestANTLRStringStream = class(TTestCase)
14  strict private
15    const
16      NL = #13#10;
17      GRAMMARSTR = ''
18        + 'parser grammar p;' + NL
19        + 'prog : WHILE ID LCURLY (assign)* RCURLY EOF;' + NL
20        + 'assign : ID ASSIGN expr SEMI ;' + NL
21        + 'expr : INT | FLOAT | ID ;' + NL;
22  public
23    procedure SetUp; override;
24    procedure TearDown; override;
25  published
26    procedure TestSizeOnEmptyANTLRStringStream;
27    procedure TestSizeOnANTLRStringStream;
28    procedure TestConsumeOnANTLRStringStream;
29    procedure TestResetOnANTLRStringStream;
30    procedure TestSubstringOnANTLRStringStream;
31  end;
32
33implementation
34
35{ TestANTLRStringStream }
36
37procedure TestANTLRStringStream.SetUp;
38begin
39end;
40
41procedure TestANTLRStringStream.TearDown;
42begin
43end;
44
45procedure TestANTLRStringStream.TestConsumeOnANTLRStringStream;
46var
47  Stream: IANTLRStringStream;
48begin
49  Stream := TANTLRStringStream.Create('One'#13#10'Two');
50  CheckEquals(0, Stream.Index);
51  CheckEquals(0, Stream.CharPositionInLine);
52  CheckEquals(1, Stream.Line);
53
54  Stream.Consume; // O
55  CheckEquals(1, Stream.Index);
56  CheckEquals(1, Stream.CharPositionInLine);
57  CheckEquals(1, Stream.Line);
58
59  Stream.Consume; // n
60  CheckEquals(2, Stream.Index);
61  CheckEquals(2, Stream.CharPositionInLine);
62  CheckEquals(1, Stream.Line);
63
64  Stream.Consume; // e
65  CheckEquals(3, Stream.Index);
66  CheckEquals(3, Stream.CharPositionInLine);
67  CheckEquals(1, Stream.Line);
68
69  Stream.Consume; // #13
70  CheckEquals(4, Stream.Index);
71  CheckEquals(4, Stream.CharPositionInLine);
72  CheckEquals(1, Stream.Line);
73
74  Stream.Consume; // #10
75  CheckEquals(5, Stream.Index);
76  CheckEquals(0, Stream.CharPositionInLine);
77  CheckEquals(2, Stream.Line);
78
79  Stream.Consume; // T
80  CheckEquals(6, Stream.Index);
81  CheckEquals(1, Stream.CharPositionInLine);
82  CheckEquals(2, Stream.Line);
83
84  Stream.Consume; // w
85  CheckEquals(7, Stream.Index);
86  CheckEquals(2, Stream.CharPositionInLine);
87  CheckEquals(2, Stream.Line);
88
89  Stream.Consume; // o
90  CheckEquals(8, Stream.Index);
91  CheckEquals(3, Stream.CharPositionInLine);
92  CheckEquals(2, Stream.Line);
93
94  Stream.Consume; // EOF
95  CheckEquals(8, Stream.Index);
96  CheckEquals(3, Stream.CharPositionInLine);
97  CheckEquals(2, Stream.Line);
98
99  Stream.Consume; // EOF
100  CheckEquals(8, Stream.Index);
101  CheckEquals(3, Stream.CharPositionInLine);
102  CheckEquals(2, Stream.Line);
103end;
104
105procedure TestANTLRStringStream.TestResetOnANTLRStringStream;
106var
107  Stream: IANTLRStringStream;
108begin
109  Stream := TANTLRStringStream.Create('One'#13#10'Two');
110  CheckEquals(0, Stream.Index);
111  CheckEquals(0, Stream.CharPositionInLine);
112  CheckEquals(1, Stream.Line);
113
114  Stream.Consume; // O
115  Stream.Consume; // n
116
117  CheckEquals(Ord('e'), Stream.LA(1));
118  CheckEquals(2, Stream.Index);
119
120  Stream.Reset;
121  CheckEquals(Ord('O'), Stream.LA(1));
122  CheckEquals(0, Stream.Index);
123  CheckEquals(0, Stream.CharPositionInLine);
124  CheckEquals(1, Stream.Line);
125  Stream.Consume; // O
126
127  CheckEquals(Ord('n'), Stream.LA(1));
128  CheckEquals(1, Stream.Index);
129  CheckEquals(1, Stream.CharPositionInLine);
130  CheckEquals(1, Stream.Line);
131  Stream.Consume; // n
132
133  CheckEquals(Ord('e'), Stream.LA(1));
134  CheckEquals(2, Stream.Index);
135  CheckEquals(2, Stream.CharPositionInLine);
136  CheckEquals(1, Stream.Line);
137  Stream.Consume; // n
138end;
139
140procedure TestANTLRStringStream.TestSizeOnANTLRStringStream;
141var
142  S1, S2, S3: IANTLRStringStream;
143begin
144  S1 := TANTLRStringStream.Create('lexer'#13#10);
145  CheckEquals(7, S1.Size);
146
147  S2 := TANTLRStringStream.Create(GRAMMARSTR);
148  CheckEquals(Length(GRAMMARSTR), S2.Size);
149
150  S3 := TANTLRStringStream.Create('grammar P;');
151  CheckEquals(10, S3.Size);
152end;
153
154procedure TestANTLRStringStream.TestSizeOnEmptyANTLRStringStream;
155var
156  S1: IANTLRStringStream;
157begin
158  S1 := TANTLRStringStream.Create('');
159  CheckEquals(0, S1.Size);
160  CheckEquals(0, S1.Index);
161end;
162
163procedure TestANTLRStringStream.TestSubstringOnANTLRStringStream;
164var
165  Stream: IANTLRStringStream;
166begin
167  Stream := TANTLRStringStream.Create('One'#13#10'Two'#13#10'Three');
168
169  CheckEquals('Two', Stream.Substring(5, 7));
170  CheckEquals('One', Stream.Substring(0, 2));
171  CheckEquals('Three', Stream.Substring(10, 14));
172
173  Stream.Consume;
174
175  CheckEquals('Two', Stream.Substring(5, 7));
176  CheckEquals('One', Stream.Substring(0, 2));
177  CheckEquals('Three', Stream.Substring(10, 14));
178end;
179
180initialization
181  // Register any test cases with the test runner
182  RegisterTest(TestANTLRStringStream.Suite);
183end.
184