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

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.