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