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