mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-02 22:00:31 +01:00
912 lines
18 KiB
ObjectPascal
912 lines
18 KiB
ObjectPascal
{$mode objfpc}
|
|
{$h+}
|
|
unit tctparser;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, fpcunit, testutils, testregistry;
|
|
|
|
{ TTestToString }
|
|
type
|
|
TTestToString= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
procedure Test3;
|
|
procedure Test4;
|
|
procedure Test5;
|
|
procedure Test6;
|
|
procedure Test7;
|
|
procedure Test8;
|
|
procedure Test9;
|
|
procedure Test10;
|
|
procedure Test11;
|
|
procedure Test12;
|
|
procedure Test13;
|
|
procedure Test14;
|
|
procedure Test15;
|
|
procedure Test16;
|
|
procedure Test17;
|
|
end;
|
|
|
|
{ TTestTokenInt }
|
|
|
|
TTestTokenInt= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
procedure Test3;
|
|
end;
|
|
|
|
{ TTestTokenFloat }
|
|
|
|
TTestTokenFloat= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
procedure Test3;
|
|
procedure Test4;
|
|
procedure Test5;
|
|
procedure Test6;
|
|
end;
|
|
|
|
{ TTestSymbol }
|
|
|
|
TTestSymbol= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
procedure Test3;
|
|
end;
|
|
|
|
{ TTestPositions }
|
|
|
|
TTestPositions= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
end;
|
|
|
|
{ TTestBinary }
|
|
|
|
TTestBinary= class(TTestCase)
|
|
private
|
|
fStream : TMemoryStream;
|
|
fOutStr : TMemoryStream;
|
|
fPar : TParser;
|
|
protected
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure Test1;
|
|
procedure Test2;
|
|
end;
|
|
|
|
Implementation
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestToString
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
procedure TTestToString.Test1;
|
|
const
|
|
aStr = '- 10';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken('-');
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('-',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken(toInteger);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('10',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test2;
|
|
const
|
|
aStr = '-10';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toInteger);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('-10',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test3;
|
|
const
|
|
aStr = '$AFz';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toInteger);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('$AF',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken(toSymbol);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('z',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test4;
|
|
const
|
|
aStr : string = '$';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
try
|
|
fPar:=TParser.Create(fStream);
|
|
except
|
|
on e : EParserError do exit
|
|
else
|
|
begin
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
end;
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
|
|
procedure TTestToString.Test5;
|
|
const
|
|
aStr = '1.';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toFloat);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('1.',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test6;
|
|
const
|
|
aStr = '1.0';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toFloat);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('1.0',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test7;
|
|
const
|
|
aStr = '1E';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
try
|
|
fPar:=TParser.Create(fStream);
|
|
except
|
|
on e : EParserError do exit
|
|
else
|
|
begin
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
end;
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
|
|
procedure TTestToString.Test8;
|
|
const
|
|
aStr = '1E+';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
try
|
|
fPar:=TParser.Create(fStream);
|
|
except
|
|
on e : EParserError do exit
|
|
else
|
|
begin
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
end;
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
|
|
procedure TTestToString.Test9;
|
|
const
|
|
aStr = '1.E+2';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toFloat);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('1.E+2',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test10;
|
|
const
|
|
aStr = '1.E+2a';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toFloat);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('1.E+2',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken(toSymbol);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('a',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test11;
|
|
const
|
|
aStr = '12s';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toFloat);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('12s',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test12;
|
|
const
|
|
aStr = '''string'''; //'string'
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toString);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('string',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test13;
|
|
const
|
|
aStr = '''can''''t'''; //'can''t'
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toString);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('can''t',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test14;
|
|
const
|
|
aStr = '''c''#97#110''''''''#116#32''open file'''; //'c'#97#110''''#116#32'open file'
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toString);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('can''t open file',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test15;
|
|
const
|
|
aStr = '''perch''#232';
|
|
var ws : widestring;
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
ws:='perch'#232;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toWString);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals(ws,fPar.TokenWideString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.Test16;
|
|
const
|
|
aStr = '''unterminated string'#10'blah''';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
try
|
|
fPar:=TParser.Create(fStream);
|
|
except
|
|
on e : EParserError do exit
|
|
else
|
|
begin
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
end;
|
|
fPar.Free;
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
|
|
procedure TTestToString.Test17;
|
|
const
|
|
aStr = 'first.second.third';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.CheckToken(toSymbol);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('first',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken('.');
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('.',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken(toSymbol);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('second',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken('.');
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('.',fPar.TokenString);
|
|
fPar.NextToken;
|
|
try
|
|
fPar.CheckToken(toSymbol);
|
|
except
|
|
on e : EParserError do Fail('CheckToken failed');
|
|
end;
|
|
AssertEquals('third',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestToString.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestToString.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestTokenInt
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
procedure TTestTokenInt.Test1;
|
|
const
|
|
aStr = '10';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toInteger,fPar.Token);
|
|
AssertEquals(10,fPar.TokenInt);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenInt.Test2;
|
|
const
|
|
aStr = '-10';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toInteger,fPar.Token);
|
|
AssertEquals(-10,fPar.TokenInt);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenInt.Test3;
|
|
const
|
|
aStr = '$AF';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toInteger,fPar.Token);
|
|
AssertEquals($AF,fPar.TokenInt);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenInt.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestTokenInt.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestTokenFloat
|
|
---------------------------------------------------------------------}
|
|
|
|
procedure TTestTokenFloat.Test1;
|
|
const
|
|
aStr = '1.';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(1.0,fPar.TokenFloat);
|
|
AssertEquals(#0,fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.Test2;
|
|
const
|
|
aStr = '1.0';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(1.0,fPar.TokenFloat);
|
|
AssertEquals(#0,fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.Test3;
|
|
const
|
|
aStr = '1.E+2';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(100.0,fPar.TokenFloat);
|
|
AssertEquals(#0,fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.Test4;
|
|
const
|
|
aStr = '12s';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(12.0,fPar.TokenFloat);
|
|
AssertEquals('s',fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.Test5;
|
|
const
|
|
aStr = '12d';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(12.0,fPar.TokenFloat);
|
|
AssertEquals('d',fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.Test6;
|
|
const
|
|
aStr = '12c';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertEquals(toFloat,fPar.Token);
|
|
AssertEquals(12.0,fPar.TokenFloat);
|
|
AssertEquals('c',fPar.FloatType);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestTokenFloat.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestSymbol
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
procedure TTestSymbol.Test1;
|
|
const
|
|
aStr = 'hello world';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertTrue(fPar.TokenSymbolIs('HELLO'));
|
|
try
|
|
fPar.CheckTokenSymbol('HeLlO');
|
|
except
|
|
on e : EParserError do Fail('CheckTokenSymbol failed');
|
|
end;
|
|
AssertEquals('hello',fPar.TokenComponentIdent);
|
|
fPar.NextToken;
|
|
AssertTrue(fPar.TokenSymbolIs('world'));
|
|
try
|
|
fPar.CheckTokenSymbol('wOrLd');
|
|
except
|
|
on e : EParserError do Fail('CheckTokenSymbol failed');
|
|
end;
|
|
AssertEquals('world',fPar.TokenComponentIdent);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestSymbol.Test2;
|
|
const
|
|
aStr = 'first.second.third';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertTrue(fPar.TokenSymbolIs('first'));
|
|
try
|
|
fPar.CheckTokenSymbol('first');
|
|
except
|
|
on e : EParserError do Fail('CheckTokenSymbol failed');
|
|
end;
|
|
AssertEquals('first',fPar.TokenString);
|
|
AssertEquals('first.second.third',fPar.TokenComponentIdent);
|
|
AssertEquals('first.second.third',fPar.TokenString);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestSymbol.Test3;
|
|
const
|
|
aStr = 'first.';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
AssertTrue(fPar.TokenSymbolIs('first'));
|
|
try
|
|
fPar.CheckTokenSymbol('first');
|
|
except
|
|
on e : EParserError do Fail('CheckTokenSymbol failed');
|
|
end;
|
|
AssertEquals('first',fPar.TokenString);
|
|
try
|
|
fPar.TokenComponentIdent;
|
|
except
|
|
on e : EParserError do exit
|
|
else
|
|
Fail('EParserError should be raised');
|
|
end;
|
|
Fail('EParserError should be raised');
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestSymbol.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestSymbol.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestPositions
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
procedure TTestPositions.Test1;
|
|
const
|
|
aStr = 'this is'#10'a '#13'test.'#13#10'Another line';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
//this
|
|
AssertEquals(1,fPar.SourceLine);
|
|
AssertEquals(4,fPar.SourcePos);
|
|
//is
|
|
fPar.NextToken;
|
|
AssertEquals(1,fPar.SourceLine);
|
|
AssertEquals(7,fPar.SourcePos);
|
|
//a
|
|
fPar.NextToken;
|
|
AssertEquals(2,fPar.SourceLine);
|
|
AssertEquals(9,fPar.SourcePos);
|
|
//test
|
|
fPar.NextToken;
|
|
AssertEquals(3,fPar.SourceLine);
|
|
AssertEquals(15,fPar.SourcePos);
|
|
//.
|
|
fPar.NextToken;
|
|
AssertEquals(3,fPar.SourceLine);
|
|
AssertEquals(16,fPar.SourcePos);
|
|
//Another
|
|
fPar.NextToken;
|
|
AssertEquals(4,fPar.SourceLine);
|
|
AssertEquals(25,fPar.SourcePos);
|
|
//line
|
|
fPar.NextToken;
|
|
AssertEquals(4,fPar.SourceLine);
|
|
AssertEquals(30,fPar.SourcePos);
|
|
//eof
|
|
fPar.NextToken;
|
|
AssertEquals(4,fPar.SourceLine);
|
|
AssertEquals(30,fPar.SourcePos);
|
|
AssertEquals(toEOF,fPar.Token);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestPositions.Test2;
|
|
const
|
|
aStr = 'this is a test';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
//this
|
|
fPar.NextToken;
|
|
//is
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
AssertEquals(7,fStream.Position);
|
|
end;
|
|
|
|
procedure TTestPositions.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestPositions.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
end;
|
|
|
|
{ ---------------------------------------------------------------------
|
|
TTestBinary
|
|
---------------------------------------------------------------------}
|
|
|
|
procedure TTestBinary.Test1;
|
|
const
|
|
aStr = '{ 1234 56'+#13#10'789A somethingelse';
|
|
var buf : array[0..4] of byte = ($12,$34,$56,$78,$9A);
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fOutStr.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
fPar.HexToBinary(fOutStr);
|
|
AssertEquals(5,fOutStr.Size);
|
|
AssertTrue(CompareMem(@buf[0],fOutStr.Memory,5));
|
|
AssertEquals(16,fPar.SourcePos);
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestBinary.Test2;
|
|
const
|
|
aStr = '{ 123z';
|
|
begin
|
|
fStream.WriteBuffer(aStr[1],length(aStr));
|
|
fStream.Position:=0;
|
|
fOutStr.Position:=0;
|
|
fPar:=TParser.Create(fStream);
|
|
try
|
|
try
|
|
fPar.HexToBinary(fOutStr);
|
|
except
|
|
on e : EParserError do exit
|
|
else Fail('EParserError should be raised');
|
|
end;
|
|
Fail('EParserError should be raised');
|
|
finally
|
|
fPar.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestBinary.SetUp;
|
|
begin
|
|
fStream:=TMemoryStream.Create;
|
|
fOutStr:=TMemoryStream.Create;
|
|
end;
|
|
|
|
procedure TTestBinary.TearDown;
|
|
begin
|
|
fStream.Free;
|
|
fOutStr.Free;
|
|
end;
|
|
|
|
initialization
|
|
|
|
RegisterTests([TTestToString,TTestTokenInt,TTestTokenFloat,TTestSymbol,TTestBinary]);
|
|
|
|
end.
|