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