Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

145 рядки
4.5 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. fEventListener: IutlEventListener;
  17. procedure EventHandler(aSender: TObject; aEventArgs: IutlEventArgs);
  18. public
  19. procedure SetUp; override;
  20. procedure TearDown; override;
  21. published
  22. procedure Add;
  23. procedure Delete;
  24. procedure ReplaceItem;
  25. procedure Clear;
  26. end;
  27. implementation
  28. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. //TutlObservableListTests///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  31. procedure TutlObservableListTests.EventHandler(aSender: TObject; aEventArgs: IutlEventArgs);
  32. begin
  33. if fCaptureEvents then
  34. fEventArgs.Add(aEventArgs);
  35. end;
  36. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  37. procedure TutlObservableListTests.SetUp;
  38. begin
  39. inherited SetUp;
  40. fCaptureEvents := false;
  41. fEventArgs := TEventArgList.Create(true);
  42. fEventListener := TutlEventListenerCallback.Create(@EventHandler);
  43. fList := TObservableIntList.Create(true);
  44. fList.RegisterEventListener(fEventListener);
  45. end;
  46. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. procedure TutlObservableListTests.TearDown;
  48. begin
  49. FreeAndNil(fList);
  50. FreeAndNil(fEventArgs);
  51. fEventListener := nil;
  52. inherited TearDown;
  53. end;
  54. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55. procedure TutlObservableListTests.Add;
  56. var
  57. ea: TObservableIntList.TItemEventArgs;
  58. begin
  59. fCaptureEvents := true;
  60. fList.Add(5);
  61. AssertEquals(1, fEventArgs.Count);
  62. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TItemEventArgs, ea));
  63. AssertTrue (oetAdd = ea.EventType);
  64. AssertEquals(0, ea.Index);
  65. AssertEquals(5, ea.Item);
  66. end;
  67. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. procedure TutlObservableListTests.Delete;
  69. var
  70. ea: TObservableIntList.TItemEventArgs;
  71. begin
  72. fList.Add(5);
  73. fList.Add(10);
  74. fList.Add(15);
  75. fCaptureEvents := true;
  76. fList.Delete(1);
  77. AssertEquals(1, fEventArgs.Count);
  78. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TItemEventArgs, ea));
  79. AssertTrue (oetRemove = ea.EventType);
  80. AssertEquals(1, ea.Index);
  81. AssertEquals(10, ea.Item);
  82. end;
  83. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84. procedure TutlObservableListTests.ReplaceItem;
  85. var
  86. ea: TObservableIntList.TReplaceEventArgs;
  87. begin
  88. fList.Add(5);
  89. fList.Add(10);
  90. fList.Add(15);
  91. fCaptureEvents := true;
  92. fList[1] := 99;
  93. AssertEquals(1, fEventArgs.Count);
  94. AssertTrue (Supports(fEventArgs[0], TObservableIntList.TReplaceEventArgs, ea));
  95. AssertTrue (oetReplace = ea.EventType);
  96. AssertEquals(1, ea.Index);
  97. AssertEquals(10, ea.OldItem);
  98. AssertEquals(99, ea.NewItem);
  99. end;
  100. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  101. procedure TutlObservableListTests.Clear;
  102. var
  103. ea: TutlObservableEventArgs;
  104. begin
  105. fList.Add(5);
  106. fList.Add(10);
  107. fList.Add(15);
  108. fCaptureEvents := true;
  109. fList.Clear;
  110. AssertEquals(1, fEventArgs.Count);
  111. AssertTrue (Supports(fEventArgs[0], TutlObservableEventArgs, ea));
  112. AssertTrue (oetClear = ea.EventType);
  113. end;
  114. initialization
  115. RegisterTest(TutlObservableListTests.Suite);
  116. end.