Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

164 строки
5.5 KiB

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