25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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