Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

163 rindas
5.2 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. 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 Remove;
  24. procedure ReplaceItem;
  25. procedure Clear;
  26. end;
  27. implementation
  28. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. //TutlObservableHashSetTests////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  31. procedure TutlObservableHashSetTests.EventHandler(aSender: TObject; aEventArgs: IutlEventArgs);
  32. begin
  33. if fCaptureEvents then
  34. fEventArgs.Add(aEventArgs);
  35. end;
  36. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  37. procedure TutlObservableHashSetTests.SetUp;
  38. begin
  39. inherited SetUp;
  40. fCaptureEvents := false;
  41. fEventArgs := TEventArgList.Create(true);
  42. fEventListener := TutlEventListenerCallback.Create(@EventHandler);
  43. fSet := TObservableIntSet.Create(true);
  44. fSet.RegisterEventListener(fEventListener);
  45. end;
  46. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. procedure TutlObservableHashSetTests.TearDown;
  48. begin
  49. FreeAndNil(fSet);
  50. FreeAndNil(fEventArgs);
  51. fEventListener := nil;
  52. inherited TearDown;
  53. end;
  54. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55. procedure TutlObservableHashSetTests.Add;
  56. var
  57. ea: TObservableIntSet.TItemEventArgs;
  58. begin
  59. fCaptureEvents := true;
  60. fSet.Add(5);
  61. fSet.Add(7);
  62. fSet.Add(5);
  63. AssertEquals(2, fEventArgs.Count);
  64. AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TItemEventArgs, ea));
  65. AssertTrue (oetAdd = ea.EventType);
  66. AssertEquals(0, ea.Index);
  67. AssertEquals(5, ea.Item);
  68. AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TItemEventArgs, ea));
  69. AssertTrue (oetAdd = ea.EventType);
  70. AssertEquals(1, ea.Index);
  71. AssertEquals(7, ea.Item);
  72. end;
  73. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  74. procedure TutlObservableHashSetTests.Remove;
  75. var
  76. ea: TObservableIntSet.TItemEventArgs;
  77. begin
  78. fSet.Add(5);
  79. fSet.Add(10);
  80. fSet.Add(15);
  81. fCaptureEvents := true;
  82. fSet.Remove(5);
  83. fSet.Remove(10);
  84. fSet.Remove(5);
  85. AssertEquals(2, fEventArgs.Count);
  86. AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TItemEventArgs, ea));
  87. AssertTrue (oetRemove = ea.EventType);
  88. AssertEquals(0, ea.Index);
  89. AssertEquals(5, ea.Item);
  90. AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TItemEventArgs, ea));
  91. AssertTrue (oetRemove = ea.EventType);
  92. AssertEquals(0, ea.Index);
  93. AssertEquals(10, ea.Item);
  94. end;
  95. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  96. procedure TutlObservableHashSetTests.ReplaceItem;
  97. var
  98. ea: TObservableIntSet.TReplaceEventArgs;
  99. begin
  100. fSet.Add(5);
  101. fSet.Add(10);
  102. fSet.Add(15);
  103. fCaptureEvents := true;
  104. fSet[0] := 5;
  105. fSet[1] := 10;
  106. AssertEquals(2, fEventArgs.Count);
  107. AssertTrue (Supports(fEventArgs[0], TObservableIntSet.TReplaceEventArgs, ea));
  108. AssertTrue (oetReplace = ea.EventType);
  109. AssertEquals(0, ea.Index);
  110. AssertEquals(5, ea.OldItem);
  111. AssertEquals(5, ea.NewItem);
  112. AssertTrue (Supports(fEventArgs[1], TObservableIntSet.TReplaceEventArgs, ea));
  113. AssertTrue (oetReplace = ea.EventType);
  114. AssertEquals(1, ea.Index);
  115. AssertEquals(10, ea.OldItem);
  116. AssertEquals(10, ea.NewItem);
  117. end;
  118. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  119. procedure TutlObservableHashSetTests.Clear;
  120. var
  121. ea: TutlObservableEventArgs;
  122. begin
  123. fSet.Add(5);
  124. fSet.Add(10);
  125. fSet.Add(15);
  126. fCaptureEvents := true;
  127. fSet.Clear;
  128. AssertEquals(1, fEventArgs.Count);
  129. AssertTrue (Supports(fEventArgs[0], TutlObservableEventArgs, ea));
  130. AssertTrue (oetClear = ea.EventType);
  131. end;
  132. initialization
  133. RegisterTest(TutlObservableHashSetTests.Suite);
  134. end.