utcclasslist.pp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. unit utcClassList;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, contnrs, punit;
  6. procedure RegisterTests;
  7. implementation
  8. Function TClassList_TestCreate : TTestString;
  9. var
  10. L: TClassList;
  11. begin
  12. Result:='';
  13. L := TClassList.Create;
  14. try
  15. AssertNotNull('List should be created', L);
  16. AssertEquals('Count should be 0 on creation', 0, L.Count);
  17. finally
  18. L.Free;
  19. end;
  20. end;
  21. Function TClassList_TestAdd : TTestString;
  22. var
  23. L: TClassList;
  24. begin
  25. Result:='';
  26. L := TClassList.Create;
  27. try
  28. L.Add(TObject);
  29. AssertEquals('Count should be 1 after adding one class', 1, L.Count);
  30. AssertEquals('First item should be TObject', TObject, L.Items[0]);
  31. L.Add(TList);
  32. AssertEquals('Count should be 2 after adding a second class', 2, L.Count);
  33. AssertEquals('Second item should be TList', TList, L.Items[1]);
  34. finally
  35. L.Free;
  36. end;
  37. end;
  38. Function TClassList_TestExtract : TTestString;
  39. var
  40. L: TClassList;
  41. Extracted: TClass;
  42. begin
  43. Result:='';
  44. L := TClassList.Create;
  45. try
  46. L.Add(TObject);
  47. L.Add(TList);
  48. Extracted := L.Extract(TObject);
  49. AssertEquals('Extracted class should be TObject', TObject, Extracted);
  50. AssertEquals('Count should be 1 after extracting a class', 1, L.Count);
  51. AssertEquals('First item should now be TList', TList, L.Items[0]);
  52. finally
  53. L.Free;
  54. end;
  55. end;
  56. Function TClassList_TestRemove : TTestString;
  57. var
  58. L: TClassList;
  59. begin
  60. Result:='';
  61. L := TClassList.Create;
  62. try
  63. L.Add(TObject);
  64. L.Add(TList);
  65. L.Remove(TObject);
  66. AssertEquals('Count should be 1 after removing a class', 1, L.Count);
  67. AssertEquals('First item should now be TList', TList, L.Items[0]);
  68. finally
  69. L.Free;
  70. end;
  71. end;
  72. Function TClassList_TestIndexOf : TTestString;
  73. var
  74. L: TClassList;
  75. begin
  76. Result:='';
  77. L := TClassList.Create;
  78. try
  79. L.Add(TObject);
  80. L.Add(TList);
  81. AssertEquals('Index of TObject should be 0', 0, L.IndexOf(TObject));
  82. AssertEquals('Index of TList should be 1', 1, L.IndexOf(TList));
  83. AssertEquals('Index of a non-existent class should be -1', -1, L.IndexOf(TComponent));
  84. finally
  85. L.Free;
  86. end;
  87. end;
  88. Function TClassList_TestInsert : TTestString;
  89. var
  90. L: TClassList;
  91. begin
  92. Result:='';
  93. L := TClassList.Create;
  94. try
  95. L.Add(TObject);
  96. L.Add(TList);
  97. L.Insert(1, TComponent);
  98. AssertEquals('Count should be 3 after inserting a class', 3, L.Count);
  99. AssertEquals('Item at index 1 should be TComponent', TComponent, L.Items[1]);
  100. AssertEquals('Item at index 2 should be TList', TList, L.Items[2]);
  101. finally
  102. L.Free;
  103. end;
  104. end;
  105. Function TClassList_TestFirstLast : TTestString;
  106. var
  107. L: TClassList;
  108. begin
  109. Result:='';
  110. L := TClassList.Create;
  111. try
  112. L.Add(TObject);
  113. L.Add(TList);
  114. AssertEquals('First class should be TObject', TObject, L.First);
  115. AssertEquals('Last class should be TList', TList, L.Last);
  116. finally
  117. L.Free;
  118. end;
  119. end;
  120. procedure RegisterTests;
  121. begin
  122. AddSuite('TClassListTests');
  123. AddTest('TestCreate', @TClassList_TestCreate, 'TClassListTests');
  124. AddTest('TestAdd', @TClassList_TestAdd, 'TClassListTests');
  125. AddTest('TestExtract', @TClassList_TestExtract, 'TClassListTests');
  126. AddTest('TestRemove', @TClassList_TestRemove, 'TClassListTests');
  127. AddTest('TestIndexOf', @TClassList_TestIndexOf, 'TClassListTests');
  128. AddTest('TestInsert', @TClassList_TestInsert, 'TClassListTests');
  129. AddTest('TestFirstLast', @TClassList_TestFirstLast, 'TClassListTests');
  130. end;
  131. end.