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

160 рядки
5.1 KiB

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