utcimagelist.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. unit utcImagelist;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testutils, testregistry, system.imagelist;
  6. type
  7. { TMyImageList }
  8. TMyImageList = class(TBaseImageList)
  9. private
  10. FDidChange: Boolean;
  11. protected
  12. procedure DoChange; override;
  13. function GetCount: Integer; override;
  14. Property DidChange : Boolean Read FDidChange;
  15. property LinkCount;
  16. property Links;
  17. end;
  18. { TestBaseImageList }
  19. TestBaseImageList= class(TTestCase)
  20. private
  21. FLink1: TImageLink;
  22. FLink2: TImageLink;
  23. FList1: TBaseImageList;
  24. FList2: TBaseImageList;
  25. FLink1Change : TObject;
  26. procedure FreeLink1;
  27. procedure FreeLink2;
  28. procedure Link1Changed(Sender: TObject);
  29. protected
  30. procedure SetUp; override;
  31. procedure TearDown; override;
  32. Property List1 : TBaseImageList Read FList1;
  33. Property List2 : TBaseImageList Read FList2;
  34. Property Link1 : TImageLink Read FLink1;
  35. Property Link2 : TImageLink Read FLink2;
  36. published
  37. procedure TestHookUp;
  38. procedure TestSetLink;
  39. procedure TestChangeLink;
  40. procedure TestSetLinkIgnoreChange;
  41. procedure TestFreeList;
  42. procedure TestFreeLink;
  43. procedure TestSetImageIndex;
  44. end;
  45. implementation
  46. { TMyImageList }
  47. procedure TMyImageList.DoChange;
  48. begin
  49. FDidchange:=True;
  50. end;
  51. function TMyImageList.GetCount: Integer;
  52. begin
  53. Result:=0;
  54. end;
  55. procedure TestBaseImageList.TestHookUp;
  56. begin
  57. AssertNull('No change in link 1',FLink1Change);
  58. AssertNotNull('Link 1',Link1);
  59. AssertNotNull('Link 2',Link2);
  60. AssertNotNull('List 1',List1);
  61. AssertNotNull('List 2',List1);
  62. end;
  63. procedure TestBaseImageList.TestSetLink;
  64. begin
  65. Link1.Images:=List1;
  66. AssertSame('Assigned link 1', List1,Link1.Images);
  67. AssertEquals('Count list 1', 1, TMyImageList(List1).LinkCount);
  68. AssertFalse('changed list 1', TMyImageList(List1).DidChange);
  69. AssertSame('Link 1 changed',List1,FLink1Change);
  70. Link2.Images:=List2;
  71. AssertSame('Assigned link 2', List2,Link2.Images);
  72. AssertEquals('Count list 2', 1, TMyImageList(List2).LinkCount);
  73. AssertFalse('changed list 2', TMyImageList(List2).DidChange);
  74. end;
  75. procedure TestBaseImageList.TestChangeLink;
  76. begin
  77. Link1.Images:=List1;
  78. AssertSame('Assigned link 1', List1,Link1.Images);
  79. AssertEquals('Count list 1', 1, TMyImageList(List1).LinkCount);
  80. AssertFalse('changed list 1', TMyImageList(List1).DidChange);
  81. Link2.Images:=List2;
  82. AssertSame('Assigned link 2', List2,Link2.Images);
  83. AssertEquals('Count list 2', 1, TMyImageList(List2).LinkCount);
  84. AssertFalse('changed list 2', TMyImageList(List2).DidChange);
  85. Link2.Images:=List1;
  86. AssertSame('Assigned link 1', List1,Link1.Images);
  87. AssertEquals('Count list 1', 2, TMyImageList(List1).LinkCount);
  88. AssertFalse('changed list 1', TMyImageList(List1).DidChange);
  89. AssertEquals('Count list 2', 0, TMyImageList(List2).LinkCount);
  90. AssertFalse('changed list 2', TMyImageList(List2).DidChange);
  91. end;
  92. procedure TestBaseImageList.TestSetLinkIgnoreChange;
  93. begin
  94. Link1.IgnoreImages:=True;
  95. Link1.Images:=List1;
  96. AssertSame('Assigned link 1', List1,Link1.Images);
  97. AssertEquals('Count list 1', 1, TMyImageList(List1).LinkCount);
  98. AssertFalse('changed list 1', TMyImageList(List1).DidChange);
  99. AssertNull('Link 1 not changed',FLink1Change);
  100. end;
  101. procedure TestBaseImageList.TestFreeList;
  102. begin
  103. Link1.Images:=List1;
  104. Link2.Images:=List1;
  105. FreeAndNil(Flist1);
  106. AssertNull('Link 1 no images',Link1.Images);
  107. AssertNull('Link 2 no images',Link2.Images);
  108. end;
  109. procedure TestBaseImageList.TestFreeLink;
  110. begin
  111. Link1.Images:=List1;
  112. Link2.Images:=List1;
  113. FreeLink1;
  114. AssertEquals('Link 1 image count',1,TMyImageList(List1).LinkCount);
  115. end;
  116. procedure TestBaseImageList.TestSetImageIndex;
  117. begin
  118. Link1.Images:=List1;
  119. Link1.ImageIndex:=1;
  120. AssertSame('Changed',List1,FLink1Change);
  121. FLink1Change:=Nil;
  122. Link1.ImageIndex:=1;
  123. AssertNull('Not Changed',FLink1Change);
  124. Link1.IgnoreIndex:=True;
  125. Link1.ImageIndex:=2;
  126. AssertNull('Not Changed',FLink1Change);
  127. end;
  128. procedure TestBaseImageList.SetUp;
  129. begin
  130. FList1:=TMyImageList.Create(Nil);
  131. FList2:=TMyImageList.Create(Nil);
  132. FLink1:=TImageLink.Create;
  133. FLink1.OnChange:=@Link1Changed;
  134. FLink2:=TImageLink.Create;
  135. FLink1Change:=Nil;
  136. end;
  137. procedure TestBaseImageList.FreeLink1;
  138. begin
  139. FreeAndNil(FLink1);
  140. end;
  141. procedure TestBaseImageList.FreeLink2;
  142. begin
  143. FreeAndNil(FLink2);
  144. end;
  145. procedure TestBaseImageList.Link1Changed(Sender: TObject);
  146. begin
  147. FLink1Change:=Sender;
  148. end;
  149. procedure TestBaseImageList.TearDown;
  150. begin
  151. FreeLink1;
  152. FreeLink2;
  153. FreeAndNil(FList1);
  154. FreeAndNil(FList2);
  155. inherited TearDown;
  156. end;
  157. initialization
  158. RegisterTest(TestBaseImageList);
  159. end.