suitetest.pp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. {$mode objfpc}
  2. {$h+}
  3. {
  4. This file is part of the Free Component Library (FCL)
  5. Copyright (c) 2004 by Dean Zobec
  6. Port to Free Pascal of the JUnit framework.
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. unit suitetest;
  14. interface
  15. uses
  16. fpcunit, testreport, testregistry;
  17. type
  18. TNoTestCases = class(TTestCase)
  19. public
  20. procedure NoTestCase;
  21. end;
  22. {$M+}
  23. TNoTestCaseClass = class(TObject)
  24. published
  25. procedure TestSuccess;
  26. end;
  27. {$M-}
  28. TOneTestCase = class(TTestCase)
  29. public
  30. procedure NoTestCase;
  31. published
  32. procedure OnlyOneTestCase; virtual;
  33. end;
  34. TOverrideTestCase = class(TOneTestCase)
  35. published
  36. procedure OnlyOneTestCase; override;
  37. end;
  38. TInheritedTestCase = class(TOneTestCase)
  39. published
  40. procedure Test2;
  41. end;
  42. TSuiteTest = class(TTestCase)
  43. private
  44. FResult: TTestResult;
  45. protected
  46. procedure Setup; override;
  47. procedure Teardown; override;
  48. public
  49. class function Suite: TTestSuite;
  50. published
  51. procedure testNoTestCaseClass;
  52. procedure testNoTestCases;
  53. procedure testOneTestCase;
  54. procedure testInheritedTests;
  55. procedure testNotExistingTestCase;
  56. procedure testShadowedTests;
  57. procedure testAddTestSuiteFromClass;
  58. procedure testCreateTestSuiteFromArray;
  59. end;
  60. implementation
  61. procedure TNoTestCases.NoTestCase;
  62. begin
  63. end;
  64. procedure TNoTestCaseClass.TestSuccess;
  65. begin
  66. end;
  67. procedure TOneTestCase.NoTestCase;
  68. begin
  69. end;
  70. procedure TOneTestCase.OnlyOneTestCase;
  71. begin
  72. end;
  73. procedure TOverrideTestCase.OnlyOneTestCase;
  74. begin
  75. end;
  76. procedure TInheritedTestCase.Test2;
  77. begin
  78. end;
  79. procedure TSuiteTest.Setup;
  80. begin
  81. FResult := TTestResult.Create;
  82. end;
  83. procedure TSuiteTest.Teardown;
  84. begin
  85. FResult.Free;
  86. end;
  87. class function TSuiteTest.Suite: TTestSuite;
  88. begin
  89. Result := TTestSuite.Create('TSuiteTest');
  90. Result.AddTest(TSuiteTest.CreateWithName('testNoTestCaseClass'));
  91. Result.AddTest(TSuiteTest.CreateWithName('testNoTestCases'));
  92. Result.AddTest(TSuiteTest.CreateWithName('testOneTestCase'));
  93. Result.AddTest(TSuiteTest.CreateWithName('testInheritedTests'));
  94. Result.AddTest(TSuiteTest.CreateWithName('testNotExistingTestCase'));
  95. Result.AddTest(TSuiteTest.CreateWithName('testShadowedTests'));
  96. Result.AddTest(TSuiteTest.CreateWithName('testAddTestSuiteFromClass'));
  97. Result.AddTest(TSuiteTest.CreateWithName('testCreateTestSuiteFromArray'));
  98. end;
  99. procedure TSuiteTest.testNoTestCaseClass;
  100. var
  101. ts: TTestSuite;
  102. begin
  103. ts := TTestSuite.Create(TNoTestCaseClass);
  104. ts.Run(FResult);
  105. ts.Free;
  106. AssertEquals(1, FResult.RunTests);
  107. AssertTrue(not FResult.WasSuccessful);
  108. end;
  109. procedure TSuiteTest.testNoTestCases;
  110. var
  111. ts: TTestSuite;
  112. begin
  113. ts := TTestSuite.Create(TNoTestCases);
  114. ts.Run(FResult);
  115. ts.Free;
  116. AssertTrue(FResult.RunTests = 1);
  117. AssertTrue(FResult.NumberOfFailures = 1);
  118. AssertTrue(not FResult.WasSuccessful);
  119. end;
  120. procedure TSuiteTest.testOneTestCase;
  121. var
  122. ts: TTestSuite;
  123. begin
  124. ts := TTestSuite.Create(TOneTestCase);
  125. ts.Run(FResult);
  126. ts.Free;
  127. AssertTrue(FResult.RunTests = 1);
  128. AssertTrue(FResult.NumberOfFailures = 0);
  129. AssertTrue(FResult.NumberOfErrors = 0);
  130. AssertTrue(FResult.WasSuccessful);
  131. end;
  132. procedure TSuiteTest.testInheritedTests;
  133. var
  134. ts: TTestSuite;
  135. begin
  136. ts := TTestSuite.Create(TInheritedTestCase);
  137. ts.Run(FResult);
  138. ts.Free;
  139. AssertEquals(2, FResult.RunTests);
  140. AssertTrue(FResult.WasSuccessful);
  141. end;
  142. procedure TSuiteTest.testNotExistingTestCase;
  143. var
  144. t: TTestCase;
  145. begin
  146. t := TSuiteTest.CreateWithName('notExistingMethod');
  147. t.Run(FResult);
  148. t.Free;
  149. AssertTrue(FResult.RunTests = 1);
  150. AssertTrue(FResult.NumberOfFailures = 1);
  151. AssertTrue(FResult.NumberOfErrors = 0);
  152. end;
  153. procedure TSuiteTest.testShadowedTests;
  154. var
  155. ts: TTestSuite;
  156. begin
  157. ts := TTestSuite.Create(TOverrideTestCase);
  158. ts.Run(FResult);
  159. ts.Free;
  160. AssertEquals(1, FResult.RunTests);
  161. end;
  162. procedure TSuiteTest.testAddTestSuiteFromClass;
  163. var
  164. ts: TTestSuite;
  165. begin
  166. ts := TTestSuite.Create;
  167. ts.AddTestSuiteFromClass(TOneTestCase);
  168. ts.Run(FResult);
  169. ts.Free;
  170. AssertEquals(1, FResult.RunTests);
  171. end;
  172. procedure TSuiteTest.testCreateTestSuiteFromArray;
  173. var
  174. ts: TTestSuite;
  175. begin
  176. ts := TTestSuite.Create([TOneTestCase, TInheritedTestCase]);
  177. try
  178. AssertEquals(3, ts.CountTestCases);
  179. AssertEquals(2, ts.Tests.Count);
  180. AssertEquals('TOneTestCase', ts[0].TestName);
  181. AssertEquals('TInheritedTestCase', ts[1].TestName);
  182. finally
  183. ts.Free;
  184. end;
  185. end;
  186. initialization
  187. RegisterTests([TSuiteTest]);
  188. end.