Home | History | Annotate | Download | only in Antlr3.Runtime.Tests
      1 unit Antlr.Runtime.Tools.Tests;
      2 {
      3 
      4   Delphi DUnit Test Case
      5   ----------------------
      6   This unit contains a skeleton test case class generated by the Test Case Wizard.
      7   Modify the generated code to correctly setup and call the methods from the unit
      8   being tested.
      9 
     10 }
     11 
     12 interface
     13 
     14 uses
     15   SysUtils,
     16   TestFramework,
     17   Generics.Defaults,
     18   Generics.Collections,
     19   Antlr.Runtime.Tools;
     20 
     21 type
     22   // Test methods for class IANTLRString
     23   TestIANTLRString = class(TTestCase)
     24   strict private
     25     FIANTLRString: IANTLRString;
     26   public
     27     procedure SetUp; override;
     28     procedure TearDown; override;
     29   published
     30     procedure TestGetValue;
     31     procedure TestSetValue;
     32   end;
     33 
     34   // Test methods for class TANTLRString
     35   TestTANTLRString = class(TTestCase)
     36   strict private
     37     FANTLRString: TANTLRString;
     38   public
     39     procedure SetUp; override;
     40     procedure TearDown; override;
     41   published
     42     procedure TestToString;
     43   end;
     44 
     45   // Test methods for class ICloneable
     46   TestICloneable = class(TTestCase)
     47   strict private
     48     FICloneable: ICloneable;
     49   public
     50     procedure SetUp; override;
     51     procedure TearDown; override;
     52   published
     53     procedure TestClone;
     54   end;
     55 
     56   // Test methods for class IList
     57   TestIList = class(TTestCase)
     58   strict private
     59     FIList: IList<Integer>;
     60   public
     61     procedure SetUp; override;
     62     procedure TearDown; override;
     63   published
     64     procedure TestGetCapacity;
     65     procedure TestSetCapacity;
     66     procedure TestGetCount;
     67     procedure TestSetCount;
     68     procedure TestGetItem;
     69     procedure TestSetItem;
     70     procedure TestAdd;
     71     procedure TestAddRange;
     72     procedure TestInsert;
     73     procedure TestRemove;
     74     procedure TestDelete;
     75     procedure TestDeleteRange;
     76     procedure TestClear;
     77     procedure TestContains;
     78     procedure TestIndexOf;
     79   end;
     80 
     81   // Test methods for class IDictionary
     82   TestIDictionary = class(TTestCase)
     83   strict private
     84     FIDictionary: IDictionary<String, Integer>;
     85   public
     86     procedure SetUp; override;
     87     procedure TearDown; override;
     88   published
     89     procedure TestGetItem;
     90     procedure TestSetItem;
     91     procedure TestGetCount;
     92     procedure TestAdd;
     93     procedure TestRemove;
     94     procedure TestTryGetValue;
     95     procedure TestContainsKey;
     96     procedure TestContainsValue;
     97     procedure TestEnumeration;
     98   end;
     99 
    100   // Test methods for record TLocalStorage
    101   TestTLocalStorage = class(TTestCase)
    102   published
    103     procedure TestLocalIntegerStorage;
    104     procedure TestLocalInterfaceStorage;
    105   end;
    106 
    107 implementation
    108 
    109 type
    110   IFoo = interface(IANTLRInterface)
    111   ['{48E3FC72-4E63-46D8-8450-A561ECF76995}']
    112     function GetValue: String;
    113     procedure SetValue(const V: String);
    114     property Value: String read GetValue write SetValue;
    115   end;
    116 
    117   TFoo = class(TANTLRObject, ICloneable, IFoo)
    118     FValue: String;
    119     function GetValue: String;
    120     procedure SetValue(const V: String);
    121     function Clone: IANTLRInterface;
    122   end;
    123 
    124 function TFoo.GetValue: String;
    125 begin
    126   Result := FValue;
    127 end;
    128 
    129 procedure TFoo.SetValue(const V: String);
    130 begin
    131   FValue := V;
    132 end;
    133 
    134 function TFoo.Clone: IANTLRInterface;
    135 var
    136   Foo: IFoo;
    137 begin
    138   Foo := TFoo.Create;
    139   Foo.Value := FValue;
    140   Result := Foo;
    141 end;
    142 
    143 procedure TestIANTLRString.SetUp;
    144 begin
    145   FIANTLRString := TANTLRString.Create('foo');
    146 end;
    147 
    148 procedure TestIANTLRString.TearDown;
    149 begin
    150   FIANTLRString := nil;
    151 end;
    152 
    153 procedure TestIANTLRString.TestGetValue;
    154 var
    155   ReturnValue: string;
    156 begin
    157   ReturnValue := FIANTLRString.GetValue;
    158   CheckEquals(ReturnValue,'foo');
    159 end;
    160 
    161 procedure TestIANTLRString.TestSetValue;
    162 var
    163   Value: string;
    164 begin
    165   Value := 'bar';
    166   FIANTLRString.SetValue(Value);
    167   CheckEquals(FIANTLRString.Value,'bar');
    168 end;
    169 
    170 procedure TestTANTLRString.SetUp;
    171 begin
    172   FANTLRString := TANTLRString.Create('foo');
    173 end;
    174 
    175 procedure TestTANTLRString.TearDown;
    176 begin
    177   FANTLRString.Free;
    178   FANTLRString := nil;
    179 end;
    180 
    181 procedure TestTANTLRString.TestToString;
    182 var
    183   ReturnValue: string;
    184 begin
    185   ReturnValue := FANTLRString.ToString;
    186   CheckEquals(ReturnValue,'foo');
    187 end;
    188 
    189 procedure TestICloneable.SetUp;
    190 var
    191   Foo: IFoo;
    192 begin
    193   Foo := TFoo.Create;
    194   Foo.Value := 'original';
    195   FICloneable := Foo as ICloneable;
    196 end;
    197 
    198 procedure TestICloneable.TearDown;
    199 begin
    200   FICloneable := nil;
    201 end;
    202 
    203 procedure TestICloneable.TestClone;
    204 var
    205   ReturnValue: IANTLRInterface;
    206 begin
    207   ReturnValue := FICloneable.Clone;
    208   Check(Supports(ReturnValue, IFoo));
    209   CheckEquals((ReturnValue as IFoo).Value,(FICloneable as IFoo).Value);
    210 end;
    211 
    212 procedure TestIList.SetUp;
    213 begin
    214   FIList := TList<Integer>.Create;
    215 end;
    216 
    217 procedure TestIList.TearDown;
    218 begin
    219   FIList := nil;
    220 end;
    221 
    222 procedure TestIList.TestGetCapacity;
    223 var
    224   ReturnValue: Integer;
    225 begin
    226   FIList.Capacity := 100;
    227   ReturnValue := FIList.GetCapacity;
    228   CheckEquals(ReturnValue,100);
    229 end;
    230 
    231 procedure TestIList.TestSetCapacity;
    232 var
    233   Value: Integer;
    234 begin
    235   Value := 100;
    236   FIList.SetCapacity(Value);
    237   CheckEquals(FIList.Capacity,100);
    238 end;
    239 
    240 procedure TestIList.TestGetCount;
    241 var
    242   ReturnValue: Integer;
    243 begin
    244   FIList.Clear;
    245   FIList.Add(123);
    246   ReturnValue := FIList.GetCount;
    247   CheckEquals(ReturnValue,1);
    248 end;
    249 
    250 procedure TestIList.TestSetCount;
    251 var
    252   Value: Integer;
    253 begin
    254   Value := 4;
    255   FIList.SetCount(Value);
    256   CheckEquals(FIList.Count,4);
    257 end;
    258 
    259 procedure TestIList.TestGetItem;
    260 var
    261   ReturnValue: Integer;
    262   Index: Integer;
    263 begin
    264   FIList.Clear;
    265   FIList.Add(100);
    266   FIList.Add(200);
    267   FIList.Add(300);
    268   FIList.Add(400);
    269   Index := 2;
    270   ReturnValue := FIList.GetItem(Index);
    271   CheckEquals(ReturnValue,300);
    272 end;
    273 
    274 procedure TestIList.TestSetItem;
    275 var
    276   Value: Integer;
    277   Index: Integer;
    278 begin
    279   FIList.Clear;
    280   FIList.Add(100);
    281   FIList.Add(200);
    282   FIList.Add(300);
    283   FIList.Add(400);
    284   Index := 3;
    285   Value := 333;
    286   FIList.SetItem(Index, Value);
    287   CheckEquals(FIList.Items[3],333);
    288 end;
    289 
    290 procedure TestIList.TestAdd;
    291 var
    292   ReturnValue: Integer;
    293   Value: Integer;
    294 begin
    295   FIList.Clear;
    296   Value := 3;
    297   ReturnValue := FIList.Add(Value);
    298   CheckEquals(ReturnValue,0);
    299 end;
    300 
    301 procedure TestIList.TestAddRange;
    302 var
    303   Values: array [0..3] of Integer;
    304 begin
    305   FIList.Clear;
    306   Values[0] := 111;
    307   Values[1] := 222;
    308   Values[2] := 333;
    309   Values[3] := 444;
    310   FIList.AddRange(Values);
    311   CheckEquals(FIList[0],111);
    312   CheckEquals(FIList[1],222);
    313   CheckEquals(FIList[2],333);
    314   CheckEquals(FIList[3],444);
    315 end;
    316 
    317 procedure TestIList.TestInsert;
    318 var
    319   Value: Integer;
    320   Index: Integer;
    321 begin
    322   FIList.Clear;
    323   FIList.Add(100);
    324   FIList.Add(200);
    325   FIList.Add(300);
    326   FIList.Add(400);
    327   Index := 2;
    328   Value := 250;
    329   FIList.Insert(Index, Value);
    330   CheckEquals(FIList[1],200);
    331   CheckEquals(FIList[2],250);
    332   CheckEquals(FIList[3],300);
    333 end;
    334 
    335 procedure TestIList.TestRemove;
    336 var
    337   ReturnValue: Integer;
    338   Value: Integer;
    339 begin
    340   FIList.Clear;
    341   FIList.Add(100);
    342   FIList.Add(200);
    343   FIList.Add(300);
    344   FIList.Add(400);
    345   Value := 300;
    346   ReturnValue := FIList.Remove(Value);
    347   CheckEquals(ReturnValue,2);
    348 end;
    349 
    350 procedure TestIList.TestDelete;
    351 var
    352   Index: Integer;
    353 begin
    354   FIList.Clear;
    355   FIList.Add(100);
    356   FIList.Add(200);
    357   FIList.Add(300);
    358   FIList.Add(400);
    359   Index := 2;
    360   FIList.Delete(Index);
    361   CheckEquals(FIList[2],400);
    362 end;
    363 
    364 procedure TestIList.TestDeleteRange;
    365 var
    366   ACount: Integer;
    367   AIndex: Integer;
    368 begin
    369   FIList.Clear;
    370   FIList.Add(100);
    371   FIList.Add(200);
    372   FIList.Add(300);
    373   FIList.Add(400);
    374   AIndex := 1;
    375   ACount := 2;
    376   FIList.DeleteRange(AIndex, ACount);
    377   CheckEquals(FIlist[0],100);
    378   CheckEquals(FIlist[1],400);
    379 end;
    380 
    381 procedure TestIList.TestClear;
    382 begin
    383   FIList.Clear;
    384   FIList.Add(100);
    385   FIList.Add(200);
    386   FIList.Add(300);
    387   FIList.Add(400);
    388   FIList.Clear;
    389   CheckEquals(FIList.Count,0);
    390 end;
    391 
    392 procedure TestIList.TestContains;
    393 var
    394   ReturnValue: Boolean;
    395   Value: Integer;
    396 begin
    397   FIList.Clear;
    398   FIList.Add(100);
    399   FIList.Add(200);
    400   FIList.Add(300);
    401   FIList.Add(400);
    402   Value := 200;
    403   ReturnValue := FIList.Contains(Value);
    404   CheckTrue(ReturnValue);
    405   Value := 250;
    406   ReturnValue := FIList.Contains(Value);
    407   CheckFalse(ReturnValue);
    408 end;
    409 
    410 procedure TestIList.TestIndexOf;
    411 var
    412   ReturnValue: Integer;
    413   Value: Integer;
    414 begin
    415   FIList.Clear;
    416   FIList.Add(100);
    417   FIList.Add(200);
    418   FIList.Add(300);
    419   FIList.Add(400);
    420   Value := 300;
    421   ReturnValue := FIList.IndexOf(Value);
    422   CheckEquals(ReturnValue,2);
    423   Value := 301;
    424   ReturnValue := FIList.IndexOf(Value);
    425   CheckEquals(ReturnValue,-1);
    426 end;
    427 
    428 procedure TestIDictionary.SetUp;
    429 begin
    430   FIDictionary := TDictionary<String, Integer>.Create;
    431   FIDictionary.Add('Foo',1);
    432   FIDictionary.Add('Bar',3);
    433   FIDictionary.Add('Baz',7);
    434   FIDictionary.Add('Zip',7);
    435 end;
    436 
    437 procedure TestIDictionary.TearDown;
    438 begin
    439   FIDictionary := nil;
    440 end;
    441 
    442 procedure TestIDictionary.TestGetItem;
    443 var
    444   ReturnValue: Integer;
    445   Key: String;
    446 begin
    447   Key := 'Baz';
    448   ReturnValue := FIDictionary.GetItem(Key);
    449   CheckEquals(ReturnValue,7);
    450 end;
    451 
    452 procedure TestIDictionary.TestSetItem;
    453 var
    454   Value: Integer;
    455   Key: String;
    456 begin
    457   Key := 'Bar';
    458   Value := 20;
    459   FIDictionary.SetItem(Key, Value);
    460   CheckEquals(FIDictionary['Bar'],20);
    461 end;
    462 
    463 procedure TestIDictionary.TestGetCount;
    464 var
    465   ReturnValue: Integer;
    466 begin
    467   ReturnValue := FIDictionary.GetCount;
    468   CheckEquals(ReturnValue,4);
    469 end;
    470 
    471 procedure TestIDictionary.TestAdd;
    472 var
    473   Value: Integer;
    474   Key: String;
    475 begin
    476   Key := 'Key';
    477   Value := -1;
    478   FIDictionary.Add(Key, Value);
    479   CheckEquals(FIDictionary['Key'],-1);
    480 end;
    481 
    482 procedure TestIDictionary.TestRemove;
    483 var
    484   Key: String;
    485 begin
    486   Key := 'Bar';
    487   FIDictionary.Remove(Key);
    488   CheckEquals(FIDictionary.Count,3);
    489 end;
    490 
    491 procedure TestIDictionary.TestTryGetValue;
    492 var
    493   ReturnValue: Boolean;
    494   Value: Integer;
    495   Key: String;
    496 begin
    497   Key := 'Zip';
    498   ReturnValue := FIDictionary.TryGetValue(Key, Value);
    499   CheckTrue(ReturnValue);
    500   CheckEquals(Value,7);
    501 
    502   Key := 'Oops';
    503   ReturnValue := FIDictionary.TryGetValue(Key, Value);
    504   CheckFalse(ReturnValue);
    505 end;
    506 
    507 procedure TestIDictionary.TestContainsKey;
    508 var
    509   ReturnValue: Boolean;
    510   Key: String;
    511 begin
    512   Key := 'Foo';
    513   ReturnValue := FIDictionary.ContainsKey(Key);
    514   CheckTrue(ReturnValue);
    515 
    516   Key := 'foo';
    517   ReturnValue := FIDictionary.ContainsKey(Key);
    518   CheckFalse(ReturnValue);
    519 end;
    520 
    521 procedure TestIDictionary.TestContainsValue;
    522 var
    523   ReturnValue: Boolean;
    524   Value: Integer;
    525 begin
    526   Value := 3;
    527   ReturnValue := FIDictionary.ContainsValue(Value);
    528   CheckTrue(ReturnValue);
    529 
    530   Value := 2;
    531   ReturnValue := FIDictionary.ContainsValue(Value);
    532   CheckFalse(ReturnValue);
    533 end;
    534 
    535 procedure TestIDictionary.TestEnumeration;
    536 var
    537   Pair: TPair<String, Integer>;
    538   Foo, Bar, Baz, Zip: Boolean;
    539 begin
    540   Foo := False;
    541   Bar := False;
    542   Baz := False;
    543   Zip := False;
    544 
    545   for Pair in FIDictionary do
    546   begin
    547     if (Pair.Key = 'Foo') then
    548     begin
    549       Foo := True;
    550       CheckEquals(Pair.Value, 1);
    551     end
    552     else
    553     if (Pair.Key = 'Bar') then
    554     begin
    555       Bar := True;
    556       CheckEquals(Pair.Value, 3);
    557     end
    558     else
    559     if (Pair.Key = 'Baz') then
    560     begin
    561       Baz := True;
    562       CheckEquals(Pair.Value, 7);
    563     end
    564     else
    565     if (Pair.Key = 'Zip') then
    566     begin
    567       Zip := True;
    568       CheckEquals(Pair.Value, 7);
    569     end
    570     else
    571       Check(False, 'Unknown key in dictionary');
    572   end;
    573   CheckTrue(Foo);
    574   CheckTrue(Bar);
    575   CheckTrue(Baz);
    576   CheckTrue(Zip);
    577 end;
    578 
    579 { TestTLocalStorage }
    580 
    581 procedure TestTLocalStorage.TestLocalIntegerStorage;
    582 var
    583   Locals: TLocalStorage;
    584 begin
    585   Locals.Initialize;
    586   try
    587     Locals.AsInteger['x'] := 2;
    588     Locals.AsInteger['X'] := 3;
    589     CheckEquals(2, Locals.AsInteger['x']);
    590     CheckEquals(3, Locals.AsInteger['X']);
    591     CheckEquals(0, Locals.AsInteger['y']);
    592     Locals.AsInteger['X'] := Locals.AsInteger['x'] * 2;
    593     CheckEquals(4, Locals.AsInteger['X']);
    594     CheckEquals(2, Locals.Count);
    595   finally
    596     Locals.Finalize;
    597   end;
    598 end;
    599 
    600 procedure TestTLocalStorage.TestLocalInterfaceStorage;
    601 var
    602   Locals: TLocalStorage;
    603 begin
    604   Locals.Initialize;
    605   try
    606     { Local variable Z is never accessed again. We add it to check that there
    607       will be no memory leak. }
    608     Locals['Z'] := TANTLRString.Create('Value Z');
    609 
    610     Locals['x'] := TANTLRString.Create('Value x');
    611     Locals['X'] := TANTLRString.Create('Value X');
    612     CheckEquals('Value x', (Locals['x'] as IANTLRString).Value);
    613     CheckEquals('Value X', (Locals['X'] as IANTLRString).Value);
    614     Check(Locals['y'] = nil);
    615 
    616     Locals['X'] := TANTLRString.Create(
    617       (Locals['X'] as IANTLRString).Value + ' Update');
    618     CheckEquals('Value X Update', (Locals['X'] as IANTLRString).Value);
    619     CheckEquals(3, Locals.Count);
    620   finally
    621     Locals.Finalize;
    622   end;
    623 end;
    624 
    625 initialization
    626   // Register any test cases with the test runner
    627   RegisterTest(TestIANTLRString.Suite);
    628   RegisterTest(TestTANTLRString.Suite);
    629   RegisterTest(TestICloneable.Suite);
    630   RegisterTest(TestIList.Suite);
    631   RegisterTest(TestIDictionary.Suite);
    632   RegisterTest(TestTLocalStorage.Suite);
    633 end.
    634