| unit Antlr.Runtime.Tests; |
| |
| interface |
| |
| uses |
| Classes, |
| SysUtils, |
| TestFramework, |
| Antlr.Runtime; |
| |
| type |
| // Test methods for class IANTLRStringStream |
| TestANTLRStringStream = class(TTestCase) |
| strict private |
| const |
| NL = #13#10; |
| GRAMMARSTR = '' |
| + 'parser grammar p;' + NL |
| + 'prog : WHILE ID LCURLY (assign)* RCURLY EOF;' + NL |
| + 'assign : ID ASSIGN expr SEMI ;' + NL |
| + 'expr : INT | FLOAT | ID ;' + NL; |
| public |
| procedure SetUp; override; |
| procedure TearDown; override; |
| published |
| procedure TestSizeOnEmptyANTLRStringStream; |
| procedure TestSizeOnANTLRStringStream; |
| procedure TestConsumeOnANTLRStringStream; |
| procedure TestResetOnANTLRStringStream; |
| procedure TestSubstringOnANTLRStringStream; |
| end; |
| |
| implementation |
| |
| { TestANTLRStringStream } |
| |
| procedure TestANTLRStringStream.SetUp; |
| begin |
| end; |
| |
| procedure TestANTLRStringStream.TearDown; |
| begin |
| end; |
| |
| procedure TestANTLRStringStream.TestConsumeOnANTLRStringStream; |
| var |
| Stream: IANTLRStringStream; |
| begin |
| Stream := TANTLRStringStream.Create('One'#13#10'Two'); |
| CheckEquals(0, Stream.Index); |
| CheckEquals(0, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // O |
| CheckEquals(1, Stream.Index); |
| CheckEquals(1, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // n |
| CheckEquals(2, Stream.Index); |
| CheckEquals(2, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // e |
| CheckEquals(3, Stream.Index); |
| CheckEquals(3, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // #13 |
| CheckEquals(4, Stream.Index); |
| CheckEquals(4, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // #10 |
| CheckEquals(5, Stream.Index); |
| CheckEquals(0, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| |
| Stream.Consume; // T |
| CheckEquals(6, Stream.Index); |
| CheckEquals(1, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| |
| Stream.Consume; // w |
| CheckEquals(7, Stream.Index); |
| CheckEquals(2, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| |
| Stream.Consume; // o |
| CheckEquals(8, Stream.Index); |
| CheckEquals(3, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| |
| Stream.Consume; // EOF |
| CheckEquals(8, Stream.Index); |
| CheckEquals(3, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| |
| Stream.Consume; // EOF |
| CheckEquals(8, Stream.Index); |
| CheckEquals(3, Stream.CharPositionInLine); |
| CheckEquals(2, Stream.Line); |
| end; |
| |
| procedure TestANTLRStringStream.TestResetOnANTLRStringStream; |
| var |
| Stream: IANTLRStringStream; |
| begin |
| Stream := TANTLRStringStream.Create('One'#13#10'Two'); |
| CheckEquals(0, Stream.Index); |
| CheckEquals(0, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| |
| Stream.Consume; // O |
| Stream.Consume; // n |
| |
| CheckEquals(Ord('e'), Stream.LA(1)); |
| CheckEquals(2, Stream.Index); |
| |
| Stream.Reset; |
| CheckEquals(Ord('O'), Stream.LA(1)); |
| CheckEquals(0, Stream.Index); |
| CheckEquals(0, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| Stream.Consume; // O |
| |
| CheckEquals(Ord('n'), Stream.LA(1)); |
| CheckEquals(1, Stream.Index); |
| CheckEquals(1, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| Stream.Consume; // n |
| |
| CheckEquals(Ord('e'), Stream.LA(1)); |
| CheckEquals(2, Stream.Index); |
| CheckEquals(2, Stream.CharPositionInLine); |
| CheckEquals(1, Stream.Line); |
| Stream.Consume; // n |
| end; |
| |
| procedure TestANTLRStringStream.TestSizeOnANTLRStringStream; |
| var |
| S1, S2, S3: IANTLRStringStream; |
| begin |
| S1 := TANTLRStringStream.Create('lexer'#13#10); |
| CheckEquals(7, S1.Size); |
| |
| S2 := TANTLRStringStream.Create(GRAMMARSTR); |
| CheckEquals(Length(GRAMMARSTR), S2.Size); |
| |
| S3 := TANTLRStringStream.Create('grammar P;'); |
| CheckEquals(10, S3.Size); |
| end; |
| |
| procedure TestANTLRStringStream.TestSizeOnEmptyANTLRStringStream; |
| var |
| S1: IANTLRStringStream; |
| begin |
| S1 := TANTLRStringStream.Create(''); |
| CheckEquals(0, S1.Size); |
| CheckEquals(0, S1.Index); |
| end; |
| |
| procedure TestANTLRStringStream.TestSubstringOnANTLRStringStream; |
| var |
| Stream: IANTLRStringStream; |
| begin |
| Stream := TANTLRStringStream.Create('One'#13#10'Two'#13#10'Three'); |
| |
| CheckEquals('Two', Stream.Substring(5, 7)); |
| CheckEquals('One', Stream.Substring(0, 2)); |
| CheckEquals('Three', Stream.Substring(10, 14)); |
| |
| Stream.Consume; |
| |
| CheckEquals('Two', Stream.Substring(5, 7)); |
| CheckEquals('One', Stream.Substring(0, 2)); |
| CheckEquals('Three', Stream.Substring(10, 14)); |
| end; |
| |
| initialization |
| // Register any test cases with the test runner |
| RegisterTest(TestANTLRStringStream.Suite); |
| end. |