1 unit Antlr.Runtime.Tests; 2 3 interface 4 5 uses 6 Classes, 7 SysUtils, 8 TestFramework, 9 Antlr.Runtime; 10 11 type 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 33 implementation 34 35 { TestANTLRStringStream } 36 37 procedure TestANTLRStringStream.SetUp; 38 begin 39 end; 40 41 procedure TestANTLRStringStream.TearDown; 42 begin 43 end; 44 45 procedure TestANTLRStringStream.TestConsumeOnANTLRStringStream; 46 var 47 Stream: IANTLRStringStream; 48 begin 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); 103 end; 104 105 procedure TestANTLRStringStream.TestResetOnANTLRStringStream; 106 var 107 Stream: IANTLRStringStream; 108 begin 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 138 end; 139 140 procedure TestANTLRStringStream.TestSizeOnANTLRStringStream; 141 var 142 S1, S2, S3: IANTLRStringStream; 143 begin 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); 152 end; 153 154 procedure TestANTLRStringStream.TestSizeOnEmptyANTLRStringStream; 155 var 156 S1: IANTLRStringStream; 157 begin 158 S1 := TANTLRStringStream.Create(''); 159 CheckEquals(0, S1.Size); 160 CheckEquals(0, S1.Index); 161 end; 162 163 procedure TestANTLRStringStream.TestSubstringOnANTLRStringStream; 164 var 165 Stream: IANTLRStringStream; 166 begin 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)); 178 end; 179 180 initialization 181 // Register any test cases with the test runner 182 RegisterTest(TestANTLRStringStream.Suite); 183 end. 184