You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.5 KiB
184 lines
4.5 KiB
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.
|