unit uutlObservableHashSetTests; {$mode objfpc}{$H+} interface uses Classes, SysUtils, TestFramework, uutlGenerics, uutlObservable, uutlEvent; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TObservableIntSet = specialize TutlObservableHashSet; TEventArgList = specialize TutlList; TutlObservableHashSetTests = class(TTestCase) private fCaptureEvents: Boolean; fSet: TObservableIntSet; fEventArgs: TEventArgList; procedure EventHandler(constref aSender: TObject; constref aEventArgs: IutlEventArgs); public procedure SetUp; override; procedure TearDown; override; published procedure Add; procedure Remove; procedure ReplaceItem; procedure Clear; end; implementation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlObservableHashSetTests//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.EventHandler(constref aSender: TObject; constref aEventArgs: IutlEventArgs); begin if fCaptureEvents then fEventArgs.Add(aEventArgs); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.SetUp; begin inherited SetUp; fCaptureEvents := false; fEventArgs := TEventArgList.Create(true); fSet := TObservableIntSet.Create(true); fSet.RegisterEventHandler(@EventHandler); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.TearDown; begin FreeAndNil(fSet); FreeAndNil(fEventArgs); inherited TearDown; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.Add; var ea: TObservableIntSet.TItemEventArgs; begin fCaptureEvents := true; fSet.Add(5); fSet.Add(7); fSet.Add(5); AssertEquals(2, fEventArgs.Count); AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TItemEventArgs, ea)); AssertTrue (oetAdd = ea.EventType); AssertEquals(0, ea.Index); AssertEquals(5, ea.Item); AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TItemEventArgs, ea)); AssertTrue (oetAdd = ea.EventType); AssertEquals(1, ea.Index); AssertEquals(7, ea.Item); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.Remove; var ea: TObservableIntSet.TItemEventArgs; begin fSet.Add(5); fSet.Add(10); fSet.Add(15); fCaptureEvents := true; fSet.Remove(5); fSet.Remove(10); fSet.Remove(5); AssertEquals(2, fEventArgs.Count); AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TItemEventArgs, ea)); AssertTrue (oetRemove = ea.EventType); AssertEquals(0, ea.Index); AssertEquals(5, ea.Item); AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TItemEventArgs, ea)); AssertTrue (oetRemove = ea.EventType); AssertEquals(0, ea.Index); AssertEquals(10, ea.Item); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.ReplaceItem; var ea: TObservableIntSet.TReplaceEventArgs; begin fSet.Add(5); fSet.Add(10); fSet.Add(15); fCaptureEvents := true; fSet[0] := 5; fSet[1] := 10; AssertEquals(2, fEventArgs.Count); AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TReplaceEventArgs, ea)); AssertTrue (oetReplace = ea.EventType); AssertEquals(0, ea.Index); AssertEquals(5, ea.OldItem); AssertEquals(5, ea.NewItem); AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TReplaceEventArgs, ea)); AssertTrue (oetReplace = ea.EventType); AssertEquals(1, ea.Index); AssertEquals(10, ea.OldItem); AssertEquals(10, ea.NewItem); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlObservableHashSetTests.Clear; var ea: TutlObservableEventArgs; begin fSet.Add(5); fSet.Add(10); fSet.Add(15); fCaptureEvents := true; fSet.Clear; AssertEquals(1, fEventArgs.Count); AssertTrue (Supports(fEventArgs[0], TutlObservableEventArgs, ea)); AssertTrue (oetClear = ea.EventType); end; initialization RegisterTest(TutlObservableHashSetTests.Suite); end.