unit uutlHandleManagerTests; {$mode objfpc}{$H+} interface uses Classes, SysUtils, TestFramework, uutlGenerics; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TStringHandleManager = specialize TutlHandleManager; TutlHandleManagerTests = class(TTestCase) private fManager: TStringHandleManager; public procedure SetUp; override; procedure TearDown; override; published procedure Add; procedure GetValue; procedure SetValue; procedure ComplexAddAndRemove; procedure Enumerate; end; implementation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlHandleManagerTests//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.SetUp; begin inherited SetUp; fManager := TStringHandleManager.Create(true); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.TearDown; begin FreeAndNil(fManager); inherited TearDown; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.Add; var h: TutlHandle; begin h := fManager.Add(0, 0, 'test'); AssertEquals($0000000100000000, h); h := fManager.Add(1, 0, 'test'); AssertEquals($0001000100000001, h); h := fManager.Add(2, 0, 'test'); AssertEquals($0002000100000002, h); h := fManager.Add(0, 1, 'test'); AssertEquals($0100000100000000, h); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.GetValue; var h: TutlHandle; s: String; b: Boolean; begin h := fManager.Add(0, 0, 'test'); b := fManager.TryGetValue(h, s); AssertTrue (b); AssertEquals('test', s); b := fManager.TryGetValue(123, s); AssertFalse(b); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.SetValue; var b: Boolean; s: String; begin b := fManager.TrySetValue($0000000100000010, 'test'); AssertTrue(b); b := fManager.TryGetValue($0000000100000010, s); AssertTrue (b); AssertEquals('test', s); b := fManager.TrySetValue($0000000100000010, 'hello'); AssertTrue(b); b := fManager.TryGetValue($0000000100000010, s); AssertTrue (b); AssertEquals('hello', s); b := fManager.TrySetValue($0000000200000010, 'blubb'); AssertFalse(b); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.ComplexAddAndRemove; var h1, h2, h3, h4, h5: TutlHandle; b: Boolean; begin h1 := fManager.Add(0, 0, '1'); AssertEquals($0000000100000000, h1); h2 := fManager.Add(0, 0, '2'); AssertEquals($0000000100000001, h2); h3 := fManager.Add(0, 0, '3'); AssertEquals($0000000100000002, h3); h4 := fManager.Add(0, 0, '4'); AssertEquals($0000000100000003, h4); h5 := fManager.Add(0, 0, '5'); AssertEquals($0000000100000004, h5); b := fManager.Remove(h2); AssertTrue(b); h2 := fManager.Add(0, 0, '12'); AssertEquals($0000000200000001, h2); b := fManager.Remove(h4); AssertTrue(b); b := fManager.Remove(h3); AssertTrue(b); h3 := fManager.Add(0, 0, '13'); AssertEquals($0000000200000002, h3); h4 := fManager.Add(0, 0, '14'); AssertEquals($0000000200000003, h4); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlHandleManagerTests.Enumerate; var h, h1, h2, h3: TutlHandle; b: Boolean; e: TStringHandleManager.IEnumerator; begin e := fManager.GetEnumerator; h1 := fManager.Add(0, 0, '1'); h2 := fManager.Add(0, 0, '2'); h3 := fManager.Add(0, 0, '3'); b := e.MoveNext; AssertTrue(b); h := e.Current; AssertTrue(h1 = h); b := e.MoveNext; AssertTrue(b); h := e.Current; AssertTrue(h2 = h); b := e.MoveNext; AssertTrue(b); h := e.Current; AssertTrue(h3 = h); b := e.MoveNext; AssertFalse(b); end; initialization RegisterTest(TutlHandleManagerTests.Suite); end.