suitetest.pp 4.7 KB

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