You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
4.4 KiB

  1. unit uutlObservableListTests;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, TestFramework,
  6. uutlGenerics, uutlObservable, uutlEvent;
  7. type
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TObservableIntList = specialize TutlObservableList<Integer>;
  10. TEventArgList = specialize TutlList<IutlEventArgs>;
  11. TutlObservableListTests = class(TTestCase)
  12. private
  13. fCaptureEvents: Boolean;
  14. fList: TObservableIntList;
  15. fEventArgs: TEventArgList;
  16. procedure EventHandler(constref aSender: TObject; constref aEventArgs: IutlEventArgs);
  17. public
  18. procedure SetUp; override;
  19. procedure TearDown; override;
  20. published
  21. procedure Add;
  22. procedure Delete;
  23. procedure ReplaceItem;
  24. procedure Clear;
  25. end;
  26. implementation
  27. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  28. //TutlObservableListTests///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. procedure TutlObservableListTests.EventHandler(constref aSender: TObject; constref aEventArgs: IutlEventArgs);
  31. begin
  32. if fCaptureEvents then
  33. fEventArgs.Add(aEventArgs);
  34. end;
  35. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. procedure TutlObservableListTests.SetUp;
  37. begin
  38. inherited SetUp;
  39. fCaptureEvents := false;
  40. fEventArgs := TEventArgList.Create(true);
  41. fList := TObservableIntList.Create(true);
  42. fList.RegisterEventHandler(@EventHandler);
  43. end;
  44. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. procedure TutlObservableListTests.TearDown;
  46. begin
  47. FreeAndNil(fList);
  48. FreeAndNil(fEventArgs);
  49. inherited TearDown;
  50. end;
  51. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. procedure TutlObservableListTests.Add;
  53. var
  54. ea: TObservableIntList.TItemEventArgs;
  55. begin
  56. fCaptureEvents := true;
  57. fList.Add(5);
  58. AssertEquals(1, fEventArgs.Count);
  59. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TItemEventArgs, ea));
  60. AssertTrue (oetAdd = ea.EventType);
  61. AssertEquals(0, ea.Index);
  62. AssertEquals(5, ea.Item);
  63. end;
  64. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. procedure TutlObservableListTests.Delete;
  66. var
  67. ea: TObservableIntList.TItemEventArgs;
  68. begin
  69. fList.Add(5);
  70. fList.Add(10);
  71. fList.Add(15);
  72. fCaptureEvents := true;
  73. fList.Delete(1);
  74. AssertEquals(1, fEventArgs.Count);
  75. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TItemEventArgs, ea));
  76. AssertTrue (oetRemove = ea.EventType);
  77. AssertEquals(1, ea.Index);
  78. AssertEquals(10, ea.Item);
  79. end;
  80. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  81. procedure TutlObservableListTests.ReplaceItem;
  82. var
  83. ea: TObservableIntList.TReplaceEventArgs;
  84. begin
  85. fList.Add(5);
  86. fList.Add(10);
  87. fList.Add(15);
  88. fCaptureEvents := true;
  89. fList[1] := 99;
  90. AssertEquals(1, fEventArgs.Count);
  91. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TReplaceEventArgs, ea));
  92. AssertTrue (oetReplace = ea.EventType);
  93. AssertEquals(1, ea.Index);
  94. AssertEquals(10, ea.OldItem);
  95. AssertEquals(99, ea.NewItem);
  96. end;
  97. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98. procedure TutlObservableListTests.Clear;
  99. var
  100. ea: TutlObservableEventArgs;
  101. begin
  102. fList.Add(5);
  103. fList.Add(10);
  104. fList.Add(15);
  105. fCaptureEvents := true;
  106. fList.Clear;
  107. AssertEquals(1, fEventArgs.Count);
  108. AssertTrue (Supports(fEventArgs[0], TutlObservableEventArgs, ea));
  109. AssertTrue (oetClear = ea.EventType);
  110. end;
  111. initialization
  112. RegisterTest(TutlObservableListTests.Suite);
  113. end.