blob: f7d9663cfa90d1a801642e536e49d1fad0ecabe8 [file] [log] [blame]
unit Antlr.Runtime.Tools.Tests;
{
Delphi DUnit Test Case
----------------------
This unit contains a skeleton test case class generated by the Test Case Wizard.
Modify the generated code to correctly setup and call the methods from the unit
being tested.
}
interface
uses
SysUtils,
TestFramework,
Generics.Defaults,
Generics.Collections,
Antlr.Runtime.Tools;
type
// Test methods for class IANTLRString
TestIANTLRString = class(TTestCase)
strict private
FIANTLRString: IANTLRString;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestGetValue;
procedure TestSetValue;
end;
// Test methods for class TANTLRString
TestTANTLRString = class(TTestCase)
strict private
FANTLRString: TANTLRString;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestToString;
end;
// Test methods for class ICloneable
TestICloneable = class(TTestCase)
strict private
FICloneable: ICloneable;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestClone;
end;
// Test methods for class IList
TestIList = class(TTestCase)
strict private
FIList: IList<Integer>;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestGetCapacity;
procedure TestSetCapacity;
procedure TestGetCount;
procedure TestSetCount;
procedure TestGetItem;
procedure TestSetItem;
procedure TestAdd;
procedure TestAddRange;
procedure TestInsert;
procedure TestRemove;
procedure TestDelete;
procedure TestDeleteRange;
procedure TestClear;
procedure TestContains;
procedure TestIndexOf;
end;
// Test methods for class IDictionary
TestIDictionary = class(TTestCase)
strict private
FIDictionary: IDictionary<String, Integer>;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestGetItem;
procedure TestSetItem;
procedure TestGetCount;
procedure TestAdd;
procedure TestRemove;
procedure TestTryGetValue;
procedure TestContainsKey;
procedure TestContainsValue;
procedure TestEnumeration;
end;
// Test methods for record TLocalStorage
TestTLocalStorage = class(TTestCase)
published
procedure TestLocalIntegerStorage;
procedure TestLocalInterfaceStorage;
end;
implementation
type
IFoo = interface(IANTLRInterface)
['{48E3FC72-4E63-46D8-8450-A561ECF76995}']
function GetValue: String;
procedure SetValue(const V: String);
property Value: String read GetValue write SetValue;
end;
TFoo = class(TANTLRObject, ICloneable, IFoo)
FValue: String;
function GetValue: String;
procedure SetValue(const V: String);
function Clone: IANTLRInterface;
end;
function TFoo.GetValue: String;
begin
Result := FValue;
end;
procedure TFoo.SetValue(const V: String);
begin
FValue := V;
end;
function TFoo.Clone: IANTLRInterface;
var
Foo: IFoo;
begin
Foo := TFoo.Create;
Foo.Value := FValue;
Result := Foo;
end;
procedure TestIANTLRString.SetUp;
begin
FIANTLRString := TANTLRString.Create('foo');
end;
procedure TestIANTLRString.TearDown;
begin
FIANTLRString := nil;
end;
procedure TestIANTLRString.TestGetValue;
var
ReturnValue: string;
begin
ReturnValue := FIANTLRString.GetValue;
CheckEquals(ReturnValue,'foo');
end;
procedure TestIANTLRString.TestSetValue;
var
Value: string;
begin
Value := 'bar';
FIANTLRString.SetValue(Value);
CheckEquals(FIANTLRString.Value,'bar');
end;
procedure TestTANTLRString.SetUp;
begin
FANTLRString := TANTLRString.Create('foo');
end;
procedure TestTANTLRString.TearDown;
begin
FANTLRString.Free;
FANTLRString := nil;
end;
procedure TestTANTLRString.TestToString;
var
ReturnValue: string;
begin
ReturnValue := FANTLRString.ToString;
CheckEquals(ReturnValue,'foo');
end;
procedure TestICloneable.SetUp;
var
Foo: IFoo;
begin
Foo := TFoo.Create;
Foo.Value := 'original';
FICloneable := Foo as ICloneable;
end;
procedure TestICloneable.TearDown;
begin
FICloneable := nil;
end;
procedure TestICloneable.TestClone;
var
ReturnValue: IANTLRInterface;
begin
ReturnValue := FICloneable.Clone;
Check(Supports(ReturnValue, IFoo));
CheckEquals((ReturnValue as IFoo).Value,(FICloneable as IFoo).Value);
end;
procedure TestIList.SetUp;
begin
FIList := TList<Integer>.Create;
end;
procedure TestIList.TearDown;
begin
FIList := nil;
end;
procedure TestIList.TestGetCapacity;
var
ReturnValue: Integer;
begin
FIList.Capacity := 100;
ReturnValue := FIList.GetCapacity;
CheckEquals(ReturnValue,100);
end;
procedure TestIList.TestSetCapacity;
var
Value: Integer;
begin
Value := 100;
FIList.SetCapacity(Value);
CheckEquals(FIList.Capacity,100);
end;
procedure TestIList.TestGetCount;
var
ReturnValue: Integer;
begin
FIList.Clear;
FIList.Add(123);
ReturnValue := FIList.GetCount;
CheckEquals(ReturnValue,1);
end;
procedure TestIList.TestSetCount;
var
Value: Integer;
begin
Value := 4;
FIList.SetCount(Value);
CheckEquals(FIList.Count,4);
end;
procedure TestIList.TestGetItem;
var
ReturnValue: Integer;
Index: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Index := 2;
ReturnValue := FIList.GetItem(Index);
CheckEquals(ReturnValue,300);
end;
procedure TestIList.TestSetItem;
var
Value: Integer;
Index: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Index := 3;
Value := 333;
FIList.SetItem(Index, Value);
CheckEquals(FIList.Items[3],333);
end;
procedure TestIList.TestAdd;
var
ReturnValue: Integer;
Value: Integer;
begin
FIList.Clear;
Value := 3;
ReturnValue := FIList.Add(Value);
CheckEquals(ReturnValue,0);
end;
procedure TestIList.TestAddRange;
var
Values: array [0..3] of Integer;
begin
FIList.Clear;
Values[0] := 111;
Values[1] := 222;
Values[2] := 333;
Values[3] := 444;
FIList.AddRange(Values);
CheckEquals(FIList[0],111);
CheckEquals(FIList[1],222);
CheckEquals(FIList[2],333);
CheckEquals(FIList[3],444);
end;
procedure TestIList.TestInsert;
var
Value: Integer;
Index: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Index := 2;
Value := 250;
FIList.Insert(Index, Value);
CheckEquals(FIList[1],200);
CheckEquals(FIList[2],250);
CheckEquals(FIList[3],300);
end;
procedure TestIList.TestRemove;
var
ReturnValue: Integer;
Value: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Value := 300;
ReturnValue := FIList.Remove(Value);
CheckEquals(ReturnValue,2);
end;
procedure TestIList.TestDelete;
var
Index: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Index := 2;
FIList.Delete(Index);
CheckEquals(FIList[2],400);
end;
procedure TestIList.TestDeleteRange;
var
ACount: Integer;
AIndex: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
AIndex := 1;
ACount := 2;
FIList.DeleteRange(AIndex, ACount);
CheckEquals(FIlist[0],100);
CheckEquals(FIlist[1],400);
end;
procedure TestIList.TestClear;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
FIList.Clear;
CheckEquals(FIList.Count,0);
end;
procedure TestIList.TestContains;
var
ReturnValue: Boolean;
Value: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Value := 200;
ReturnValue := FIList.Contains(Value);
CheckTrue(ReturnValue);
Value := 250;
ReturnValue := FIList.Contains(Value);
CheckFalse(ReturnValue);
end;
procedure TestIList.TestIndexOf;
var
ReturnValue: Integer;
Value: Integer;
begin
FIList.Clear;
FIList.Add(100);
FIList.Add(200);
FIList.Add(300);
FIList.Add(400);
Value := 300;
ReturnValue := FIList.IndexOf(Value);
CheckEquals(ReturnValue,2);
Value := 301;
ReturnValue := FIList.IndexOf(Value);
CheckEquals(ReturnValue,-1);
end;
procedure TestIDictionary.SetUp;
begin
FIDictionary := TDictionary<String, Integer>.Create;
FIDictionary.Add('Foo',1);
FIDictionary.Add('Bar',3);
FIDictionary.Add('Baz',7);
FIDictionary.Add('Zip',7);
end;
procedure TestIDictionary.TearDown;
begin
FIDictionary := nil;
end;
procedure TestIDictionary.TestGetItem;
var
ReturnValue: Integer;
Key: String;
begin
Key := 'Baz';
ReturnValue := FIDictionary.GetItem(Key);
CheckEquals(ReturnValue,7);
end;
procedure TestIDictionary.TestSetItem;
var
Value: Integer;
Key: String;
begin
Key := 'Bar';
Value := 20;
FIDictionary.SetItem(Key, Value);
CheckEquals(FIDictionary['Bar'],20);
end;
procedure TestIDictionary.TestGetCount;
var
ReturnValue: Integer;
begin
ReturnValue := FIDictionary.GetCount;
CheckEquals(ReturnValue,4);
end;
procedure TestIDictionary.TestAdd;
var
Value: Integer;
Key: String;
begin
Key := 'Key';
Value := -1;
FIDictionary.Add(Key, Value);
CheckEquals(FIDictionary['Key'],-1);
end;
procedure TestIDictionary.TestRemove;
var
Key: String;
begin
Key := 'Bar';
FIDictionary.Remove(Key);
CheckEquals(FIDictionary.Count,3);
end;
procedure TestIDictionary.TestTryGetValue;
var
ReturnValue: Boolean;
Value: Integer;
Key: String;
begin
Key := 'Zip';
ReturnValue := FIDictionary.TryGetValue(Key, Value);
CheckTrue(ReturnValue);
CheckEquals(Value,7);
Key := 'Oops';
ReturnValue := FIDictionary.TryGetValue(Key, Value);
CheckFalse(ReturnValue);
end;
procedure TestIDictionary.TestContainsKey;
var
ReturnValue: Boolean;
Key: String;
begin
Key := 'Foo';
ReturnValue := FIDictionary.ContainsKey(Key);
CheckTrue(ReturnValue);
Key := 'foo';
ReturnValue := FIDictionary.ContainsKey(Key);
CheckFalse(ReturnValue);
end;
procedure TestIDictionary.TestContainsValue;
var
ReturnValue: Boolean;
Value: Integer;
begin
Value := 3;
ReturnValue := FIDictionary.ContainsValue(Value);
CheckTrue(ReturnValue);
Value := 2;
ReturnValue := FIDictionary.ContainsValue(Value);
CheckFalse(ReturnValue);
end;
procedure TestIDictionary.TestEnumeration;
var
Pair: TPair<String, Integer>;
Foo, Bar, Baz, Zip: Boolean;
begin
Foo := False;
Bar := False;
Baz := False;
Zip := False;
for Pair in FIDictionary do
begin
if (Pair.Key = 'Foo') then
begin
Foo := True;
CheckEquals(Pair.Value, 1);
end
else
if (Pair.Key = 'Bar') then
begin
Bar := True;
CheckEquals(Pair.Value, 3);
end
else
if (Pair.Key = 'Baz') then
begin
Baz := True;
CheckEquals(Pair.Value, 7);
end
else
if (Pair.Key = 'Zip') then
begin
Zip := True;
CheckEquals(Pair.Value, 7);
end
else
Check(False, 'Unknown key in dictionary');
end;
CheckTrue(Foo);
CheckTrue(Bar);
CheckTrue(Baz);
CheckTrue(Zip);
end;
{ TestTLocalStorage }
procedure TestTLocalStorage.TestLocalIntegerStorage;
var
Locals: TLocalStorage;
begin
Locals.Initialize;
try
Locals.AsInteger['x'] := 2;
Locals.AsInteger['X'] := 3;
CheckEquals(2, Locals.AsInteger['x']);
CheckEquals(3, Locals.AsInteger['X']);
CheckEquals(0, Locals.AsInteger['y']);
Locals.AsInteger['X'] := Locals.AsInteger['x'] * 2;
CheckEquals(4, Locals.AsInteger['X']);
CheckEquals(2, Locals.Count);
finally
Locals.Finalize;
end;
end;
procedure TestTLocalStorage.TestLocalInterfaceStorage;
var
Locals: TLocalStorage;
begin
Locals.Initialize;
try
{ Local variable Z is never accessed again. We add it to check that there
will be no memory leak. }
Locals['Z'] := TANTLRString.Create('Value Z');
Locals['x'] := TANTLRString.Create('Value x');
Locals['X'] := TANTLRString.Create('Value X');
CheckEquals('Value x', (Locals['x'] as IANTLRString).Value);
CheckEquals('Value X', (Locals['X'] as IANTLRString).Value);
Check(Locals['y'] = nil);
Locals['X'] := TANTLRString.Create(
(Locals['X'] as IANTLRString).Value + ' Update');
CheckEquals('Value X Update', (Locals['X'] as IANTLRString).Value);
CheckEquals(3, Locals.Count);
finally
Locals.Finalize;
end;
end;
initialization
// Register any test cases with the test runner
RegisterTest(TestIANTLRString.Suite);
RegisterTest(TestTANTLRString.Suite);
RegisterTest(TestICloneable.Suite);
RegisterTest(TestIList.Suite);
RegisterTest(TestIDictionary.Suite);
RegisterTest(TestTLocalStorage.Suite);
end.