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