fpcunittests.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  1. {$mode objfpc}
  2. {$h+}
  3. {
  4. This file is part of the Free Component Library (FCL)
  5. Copyright (c) 2004 by Dean Zobec, Michael Van Canneyt
  6. unit tests of the FPCUnit 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 fpcunittests;
  14. interface
  15. uses
  16. SysUtils, Classes, fpcunit, testutils, testregistry, testdecorator;
  17. type
  18. EMyException = class(Exception);
  19. TTestCaseTest = class(TTestCase)
  20. private
  21. FFlag: integer;
  22. protected
  23. procedure SetUp; override;
  24. procedure TearDown; override;
  25. published
  26. procedure TestSetUp;
  27. procedure TestAsString;
  28. end;
  29. TTestSuiteTest = class(TTestCase)
  30. private
  31. FSuite: TTestSuite;
  32. protected
  33. procedure SetUp; override;
  34. procedure TearDown; override;
  35. published
  36. procedure CheckCountTestCases;
  37. procedure TestExtractMethods;
  38. end;
  39. { TAssertTest }
  40. TAssertTest = class(TTestCase)
  41. private
  42. Fa,
  43. Fb: TObject;
  44. procedure FailEqualsInt;
  45. procedure FailEqualsInt64;
  46. procedure FailEqualsCurrency;
  47. procedure FailEqualsDouble;
  48. procedure FailEqualsBoolean;
  49. procedure FailEqualsChar;
  50. procedure FailEqualsTClass;
  51. procedure FailEqualsTObject;
  52. procedure FailAssertNull;
  53. procedure FailAssertNullInterface;
  54. procedure FailAssertNotNull;
  55. procedure FailAssertNotNullInterface;
  56. procedure RaiseMyException;
  57. procedure InterceptFailure(AMethod: TRunMethod; const ExpectedMessage: string);
  58. published
  59. procedure TestEqualsInt;
  60. procedure TestEqualsInt64;
  61. procedure TestEqualsCurrency;
  62. procedure TestEqualsDouble;
  63. procedure TestEqualsBoolean;
  64. procedure TestEqualsChar;
  65. procedure TestEqualsTClass;
  66. procedure TestEqualsTObject;
  67. procedure TestNull;
  68. procedure TestNullInterface;
  69. procedure TestNotNull;
  70. procedure TestNotNullWithInterface;
  71. procedure TestNotNullInterface;
  72. procedure TestFailEqualsInt;
  73. procedure TestFailEqualsInt64;
  74. procedure TestFailEqualsCurrency;
  75. procedure TestFailEqualsDouble;
  76. procedure TestFailEqualsBoolean;
  77. procedure TestFailEqualsChar;
  78. procedure TestFailEqualsTClass;
  79. procedure TestFailEqualsTObject;
  80. procedure TestFailNull;
  81. procedure TestFailNullInterface;
  82. procedure TestFailNotNull;
  83. procedure TestFailNotNullInterface;
  84. procedure TestAssertException;
  85. procedure TestComparisonMsg;
  86. end;
  87. TMockListener = class(TNoRefCountObject, ITestListener)
  88. private
  89. FList: TStringList;
  90. FFailureList: TStringList;
  91. FErrorList: TStringList;
  92. FExpectedList: TStringList;
  93. public
  94. constructor Create; virtual;
  95. destructor Destroy; override;
  96. procedure AddFailure(ATest: TTest; AFailure: TTestFailure);
  97. procedure AddError(ATest: TTest; AError: TTestFailure);
  98. procedure StartTest(ATest: TTest);
  99. procedure EndTest(ATest: TTest);
  100. procedure AddExpectedLine(ALine: string);
  101. procedure Verify(ActualList: TStrings);
  102. end;
  103. TExampleTest = class(TTestCase)
  104. published
  105. procedure TestOne;
  106. procedure TestWithError;
  107. procedure TestWithFailure;
  108. end;
  109. TExampleStepTest = class(TTestCase)
  110. private
  111. FWhenException: TTestStep;
  112. procedure SetWhenException(const Value: TTestStep);
  113. protected
  114. procedure SetUp; override;
  115. procedure TearDown; override;
  116. public
  117. constructor Create; override;
  118. property WhenException: TTestStep read FWhenException write SetWhenException;
  119. published
  120. procedure TestException;
  121. end;
  122. TListenerTest = class(TTestCase)
  123. private
  124. FMockListener: TMockListener;
  125. FResult: TTestResult;
  126. protected
  127. procedure SetUp; override;
  128. procedure TearDown; override;
  129. published
  130. procedure TestStartAndEndTest;
  131. procedure TestAddError;
  132. procedure TestAddFailure;
  133. procedure TestSetUpTearDown;
  134. procedure TestSetUpException;
  135. procedure TestTearDownException;
  136. end;
  137. IMyIntf = interface
  138. procedure SayGoodbye;
  139. end;
  140. TMyIntfObj = class(TInterfacedObject, IMyIntf)
  141. procedure SayGoodbye;
  142. end;
  143. { TEncapsulatedTestCase }
  144. TEncapsulatedTestCase = class(TTestCase)
  145. published
  146. procedure TestOne;
  147. procedure TestTwo;
  148. end;
  149. { TMyTestSetup }
  150. TMyTestSetup = class(TTestSetup)
  151. protected
  152. procedure OneTimeSetup; override;
  153. procedure OneTimeTearDown; override;
  154. end;
  155. { TTestDecoratorTest }
  156. TTestDecoratorTest=class(TTestCase)
  157. private
  158. res: TTestResult;
  159. protected
  160. procedure SetUp; override;
  161. procedure TearDown; override;
  162. published
  163. procedure TestRun;
  164. procedure TestOneTimeSetup;
  165. end;
  166. var
  167. CountSetup: integer;
  168. implementation
  169. procedure TMyIntfObj.SayGoodbye;
  170. begin
  171. writeln('Ciao');
  172. end;
  173. procedure TTestCaseTest.SetUp;
  174. begin
  175. FFlag := 1
  176. end;
  177. procedure TTestCaseTest.TearDown;
  178. begin
  179. FFlag := 0;
  180. end;
  181. procedure TTestCaseTest.TestSetUp;
  182. begin
  183. AssertTrue( 'TTestCaseTest: wrong SetUp', FFlag = 1);
  184. end;
  185. procedure TTestCaseTest.TestAsString;
  186. begin
  187. AssertEquals( 'TTestCaseTest: wrong AsString output', 'TestAsString(TTestCaseTest)', AsString);
  188. end;
  189. procedure TTestSuiteTest.SetUp;
  190. begin
  191. FSuite := TTestSuite.Create(TTestSuiteTest);
  192. end;
  193. procedure TTestSuiteTest.TearDown;
  194. begin
  195. FSuite.Free;
  196. end;
  197. procedure TTestSuiteTest.CheckCountTestCases;
  198. begin
  199. AssertTrue(FSuite.CountTestCases = 2);
  200. end;
  201. procedure TTestSuiteTest.TestExtractMethods;
  202. var
  203. i: integer;
  204. s: string;
  205. begin
  206. s := '';
  207. for i := 0 to FSuite.CountTestCases - 1 do
  208. s := s + UpperCase(FSuite[i].TestName) + ' ';
  209. AssertEquals('Failure in extracting methods:', 'CHECKCOUNTTESTCASES TESTEXTRACTMETHODS ', s );
  210. end;
  211. procedure TAssertTest.TestEqualsInt;
  212. var
  213. i, j: integer;
  214. begin
  215. AssertEquals(33,33);
  216. i := 33;
  217. j := 33;
  218. AssertEquals(i, j);
  219. end;
  220. procedure TAssertTest.TestEqualsInt64;
  221. var
  222. i, j: int64;
  223. begin
  224. AssertEquals(1234567891234,1234567891234);
  225. i := 1234567891234;
  226. j := 1234567891234;
  227. AssertEquals(i, j);
  228. end;
  229. procedure TAssertTest.TestEqualsCurrency;
  230. var
  231. i, j: currency;
  232. begin
  233. AssertEquals(12345678912345.6789, 12345678912345.6789);
  234. i := 12345678912345.6789;
  235. j := 12345678912345.6789;
  236. AssertEquals(i, j);
  237. end;
  238. procedure TAssertTest.TestEqualsDouble;
  239. var
  240. i, j, delta: double;
  241. begin
  242. i := 0.123456;
  243. j := 0.123456;
  244. delta := 0.0000001;
  245. AssertEquals(i,j, delta);
  246. end;
  247. procedure TAssertTest.TestEqualsBoolean;
  248. var
  249. a, b: boolean;
  250. begin
  251. a := true;
  252. b := true;
  253. AssertEquals(a, b);
  254. end;
  255. procedure TAssertTest.TestEqualsChar;
  256. var
  257. a, b: char;
  258. begin
  259. a := 'a';
  260. b := 'a';
  261. AssertEquals(a, b);
  262. end;
  263. procedure TAssertTest.TestEqualsTClass;
  264. var
  265. a, b: TClass;
  266. begin
  267. a := TAssertTest;
  268. b := TAssertTest;
  269. AssertEquals(a, b);
  270. end;
  271. procedure TAssertTest.TestEqualsTObject;
  272. var
  273. a, b: TObject;
  274. begin
  275. a := TMockListener.Create;
  276. b := a;
  277. AssertSame(a, b);
  278. a.Free;
  279. end;
  280. procedure TAssertTest.TestNull;
  281. begin
  282. AssertNull(nil);
  283. end;
  284. procedure TAssertTest.TestNullInterface;
  285. var
  286. myintf: IMyIntf;
  287. begin
  288. myintf := nil;
  289. AssertNull(myintf);
  290. end;
  291. procedure TAssertTest.TestNotNull;
  292. var
  293. obj: TTestCase;
  294. begin
  295. obj := TTestCase.Create;
  296. AssertNotNull(obj);
  297. obj.Free;
  298. end;
  299. procedure TAssertTest.TestNotNullWithInterface;
  300. var
  301. obj: TMyIntfObj;
  302. begin
  303. obj := TMyIntfObj.Create;
  304. AssertNotNull(obj);
  305. obj.Free;
  306. end;
  307. procedure TAssertTest.TestNotNullInterface;
  308. var
  309. myintf: IMyIntf;
  310. begin
  311. myintf := TMyIntfObj.Create;
  312. AssertNotNull(myintf);
  313. end;
  314. procedure TAssertTest.InterceptFailure(AMethod: TRunMethod; const ExpectedMessage: string);
  315. var
  316. failureIntercepted: boolean;
  317. begin
  318. failureIntercepted := False;
  319. try
  320. AMethod;
  321. except
  322. on E: EAssertionFailedError do
  323. begin
  324. failureIntercepted := True;
  325. if (E.Message <> ExpectedMessage) then
  326. raise EAssertionFailedError.Create('Wrong failure message: expected <'+ ExpectedMessage + '>'
  327. + 'but was <' + E.Message +'>');
  328. end
  329. else
  330. raise;
  331. end;
  332. if not failureIntercepted then
  333. raise EAssertionFailedError.Create('Expected an EAssertionFailedError');
  334. end;
  335. procedure TAssertTest.FailEqualsInt;
  336. var
  337. i, j: integer;
  338. begin
  339. i := 33;
  340. j := 34;
  341. AssertEquals(i, j);
  342. end;
  343. procedure TAssertTest.FailEqualsInt64;
  344. var
  345. i, j: int64;
  346. begin
  347. i := 33;
  348. j := 34;
  349. AssertEquals(i,j);
  350. end;
  351. procedure TAssertTest.FailEqualsCurrency;
  352. var
  353. i, j: Currency;
  354. begin
  355. i := 12345678912.6789;
  356. j := 12345678912.6788;
  357. AssertEquals(i,j);
  358. end;
  359. procedure TAssertTest.FailEqualsDouble;
  360. var
  361. i, j, delta: double;
  362. begin
  363. i := 33.00;
  364. j := 34.00;
  365. delta := 0.0000001;
  366. AssertEquals(i, j, delta);
  367. end;
  368. procedure TAssertTest.FailEqualsBoolean;
  369. var
  370. a, b: boolean;
  371. begin
  372. a := true;
  373. b := false;
  374. AssertEquals(a, b);
  375. end;
  376. procedure TAssertTest.FailEqualsChar;
  377. var
  378. a, b: char;
  379. begin
  380. a := 'a';
  381. b := 'b';
  382. AssertEquals(a, b);
  383. end;
  384. procedure TAssertTest.FailEqualsTClass;
  385. var
  386. a, b: TClass;
  387. begin
  388. a := TAssertTest;
  389. b := TTestSuiteTest;
  390. AssertEquals(a, b);
  391. end;
  392. procedure TAssertTest.FailEqualsTObject;
  393. begin
  394. AssertSame(Fa,Fb);
  395. FA.Free;
  396. FB.Free;
  397. end;
  398. procedure TAssertTest.FailAssertNull;
  399. var
  400. obj: TTestCase;
  401. begin
  402. obj := TTestCase.Create;
  403. try
  404. AssertNull(obj);
  405. finally
  406. obj.Free;
  407. end;
  408. end;
  409. procedure TAssertTest.FailAssertNullInterface;
  410. var
  411. myintf: IMyIntf;
  412. begin
  413. myintf := TMyIntfObj.Create;
  414. try
  415. AssertNull(myIntf);
  416. finally
  417. myintf := nil;
  418. end;
  419. end;
  420. procedure TAssertTest.FailAssertNotNull;
  421. var
  422. obj: TObject;
  423. begin
  424. obj := nil;
  425. AssertNotNull(obj);
  426. end;
  427. procedure TAssertTest.FailAssertNotNullInterface;
  428. var
  429. myintf: IMyIntf;
  430. begin
  431. myintf := nil;
  432. AssertNotNull(myintf);
  433. end;
  434. procedure TAssertTest.TestFailEqualsInt;
  435. begin
  436. InterceptFailure(@FailEqualsInt, ' expected: <33> but was: <34>');
  437. end;
  438. procedure TAssertTest.TestFailEqualsInt64;
  439. begin
  440. InterceptFailure(@FailEqualsInt64, ' expected: <33> but was: <34>');
  441. end;
  442. procedure TAssertTest.TestFailEqualsCurrency;
  443. begin
  444. InterceptFailure(@FailEqualsCurrency, ' expected: <'+FloatToStr(12345678912.6789)+'> but was: <'+FloatToStr(12345678912.6788)+'>');
  445. end;
  446. procedure TAssertTest.TestFailEqualsDouble;
  447. begin
  448. InterceptFailure(@FailEqualsDouble, ' expected: <33> but was: <34>')
  449. end;
  450. procedure TAssertTest.TestFailEqualsBoolean;
  451. begin
  452. InterceptFailure(@FailEqualsBoolean, ' expected: <TRUE> but was: <FALSE>');
  453. end;
  454. procedure TAssertTest.TestFailEqualsChar;
  455. begin
  456. InterceptFailure(@FailEqualsChar, ' expected: <a> but was: <b>');
  457. end;
  458. procedure TAssertTest.TestFailEqualsTClass;
  459. begin
  460. InterceptFailure(@FailEqualsTClass, ' expected: <TAssertTest> but was: <TTestSuiteTest>');
  461. end;
  462. procedure TAssertTest.TestFailEqualsTObject;
  463. begin
  464. FA := TAssertTest.Create;
  465. FB := TAssertTest.Create;
  466. InterceptFailure(@FailEqualsTObject, ' expected: <'+ IntToStr(PtrInt(FA)) +
  467. '> but was: <' + IntToStr(PtrInt(FB))+ '>');
  468. FA.Free;
  469. FB.Free;
  470. end;
  471. procedure TAssertTest.TestFailNull;
  472. begin
  473. InterceptFailure(@FailAssertNull, '');
  474. end;
  475. procedure TAssertTest.TestFailNullInterface;
  476. begin
  477. InterceptFailure(@FailAssertNullInterface, '');
  478. end;
  479. procedure TAssertTest.TestFailNotNull;
  480. begin
  481. InterceptFailure(@FailAssertNotNull, '');
  482. end;
  483. procedure TAssertTest.TestFailNotNullInterface;
  484. begin
  485. InterceptFailure(@FailAssertNotNullInterface, '');
  486. end;
  487. procedure TAssertTest.RaiseMyException;
  488. begin
  489. raise EMyException.Create('EMyException raised');
  490. end;
  491. procedure TAssertTest.TestAssertException;
  492. begin
  493. AssertException(EMyException, @RaiseMyException);
  494. end;
  495. procedure TAssertTest.TestComparisonMsg;
  496. begin
  497. AssertEquals(' expected: <expectedstring> but was: <actualstring>',
  498. ComparisonMsg('expectedstring', 'actualstring'));
  499. end;
  500. constructor TMockListener.Create;
  501. begin
  502. FList := TStringList.Create;
  503. FFailureList := TStringList.Create;
  504. FErrorList := TStringList.Create;
  505. FExpectedList := TStringList.Create;
  506. end;
  507. destructor TMockListener.Destroy;
  508. begin
  509. FList.Free;
  510. FFailureList.Free;
  511. FErrorList.Free;
  512. FExpectedList.Free;
  513. end;
  514. procedure TMockListener.AddFailure(ATest: TTest; AFailure: TTestFailure);
  515. begin
  516. FFailureList.Add(ATest.TestName + ': ' + AFailure.ExceptionMessage);
  517. end;
  518. procedure TMockListener.AddError(ATest: TTest; AError: TTestFailure);
  519. begin
  520. FErrorList.Add(ATest.TestName + ': ' + AError.ExceptionMessage);
  521. end;
  522. procedure TMockListener.StartTest(ATest: TTest);
  523. begin
  524. FList.Add('Started: ' + ATest.TestName)
  525. end;
  526. procedure TMockListener.EndTest(ATest: TTest);
  527. begin
  528. FList.Add('Ended: ' + ATest.TestName)
  529. end;
  530. procedure TMockListener.AddExpectedLine(ALine: string);
  531. begin
  532. FExpectedList.Add(ALine)
  533. end;
  534. procedure TMockListener.Verify(ActualList: TStrings);
  535. begin
  536. TAssert.AssertEquals('Error in comparing text', FExpectedList.Text, ActualList.Text);
  537. end;
  538. procedure TExampleTest.TestOne;
  539. var
  540. i: integer;
  541. begin
  542. i := 1;
  543. AssertEquals(1, i);
  544. end;
  545. procedure TExampleTest.TestWithError;
  546. begin
  547. raise Exception.Create('Error Raised');
  548. end;
  549. procedure TExampleTest.TestWithFailure;
  550. begin
  551. Fail('Failure Raised');
  552. end;
  553. procedure TListenerTest.SetUp;
  554. begin
  555. FMockListener := TMockListener.Create;
  556. FResult := TTestResult.Create;
  557. FResult.AddListener(FMockListener);
  558. end;
  559. procedure TListenerTest.TearDown;
  560. begin
  561. FMockListener.Free;
  562. FResult.Free;
  563. end;
  564. procedure TListenerTest.TestStartAndEndTest;
  565. var
  566. t: TTestCase;
  567. begin
  568. t := TExampleTest.CreateWith('TestOne','TExampleTest');
  569. try
  570. t.Run(FResult);
  571. FMockListener.AddExpectedLine('Started: TestOne');
  572. FMockListener.AddExpectedLine('Ended: TestOne');
  573. FMockListener.Verify(FMockListener.FList);
  574. finally
  575. t.Free;
  576. end;
  577. end;
  578. procedure TListenerTest.TestAddError;
  579. var
  580. t: TTestCase;
  581. begin
  582. t := TExampleTest.CreateWith('TestWithError', 'TExampleTest');
  583. try
  584. t.Run(FResult);
  585. FMockListener.AddExpectedLine('TestWithError: Error Raised');
  586. FMockListener.Verify(FMockListener.FErrorList);
  587. finally
  588. t.Free;
  589. end;
  590. end;
  591. procedure TListenerTest.TestAddFailure;
  592. var
  593. t: TTestCase;
  594. begin
  595. t := TExampleTest.CreateWith('TestWithFailure', 'TExampleTest');
  596. try
  597. t.Run(FResult);
  598. FMockListener.AddExpectedLine('TestWithFailure: Failure Raised');
  599. FMockListener.Verify(FMockListener.FFailureList);
  600. finally
  601. t.Free;
  602. end;
  603. end;
  604. procedure TListenerTest.TestSetUpException;
  605. var
  606. t: TExampleStepTest;
  607. begin
  608. t := TExampleStepTest.CreateWith('TestException', 'TExampleStepTest');
  609. try
  610. t.WhenException := stSetUp;
  611. t.Run(FResult);
  612. FMockListener.AddExpectedLine('TestException: [SETUP] Error Raised');
  613. FMockListener.Verify(FMockListener.FErrorList);
  614. finally
  615. t.Free;
  616. end;
  617. end;
  618. procedure TListenerTest.TestTearDownException;
  619. var
  620. t: TExampleStepTest;
  621. begin
  622. t := TExampleStepTest.CreateWith('TestException', 'TExampleStepTest');
  623. try
  624. t.WhenException := stTearDown;
  625. t.Run(FResult);
  626. FMockListener.AddExpectedLine('TestException: [TEARDOWN] Error Raised');
  627. FMockListener.Verify(FMockListener.FErrorList);
  628. finally
  629. t.Free;
  630. end;
  631. end;
  632. procedure TListenerTest.TestSetUpTearDown;
  633. var
  634. t: TExampleStepTest;
  635. begin
  636. t := TExampleStepTest.CreateWith('TestException', 'TExampleStepTest');
  637. try
  638. t.WhenException := stNothing;
  639. t.Run(FResult);
  640. FMockListener.Verify(FMockListener.FErrorList);
  641. FMockListener.Verify(FMockListener.FFailureList);
  642. finally
  643. t.Free;
  644. end;
  645. end;
  646. { TExampleStepTest }
  647. constructor TExampleStepTest.Create;
  648. begin
  649. inherited;
  650. FWhenException := stNothing;
  651. end;
  652. procedure TExampleStepTest.SetUp;
  653. begin
  654. AssertTrue(stSetUp = LastStep);
  655. if FWhenException = stSetUp then
  656. raise exception.Create('Error Raised');
  657. inherited;
  658. end;
  659. procedure TExampleStepTest.SetWhenException(const Value: TTestStep);
  660. begin
  661. FWhenException := Value;
  662. end;
  663. procedure TExampleStepTest.TearDown;
  664. begin
  665. AssertTrue(stTearDown = LastStep);
  666. if FWhenException = stTearDown then
  667. raise exception.Create('Error Raised');
  668. inherited;
  669. end;
  670. procedure TExampleStepTest.TestException;
  671. begin
  672. AssertTrue(True);
  673. end;
  674. procedure TTestDecoratorTest.SetUp;
  675. begin
  676. res := TTestResult.Create;
  677. end;
  678. procedure TTestDecoratorTest.TearDown;
  679. begin
  680. FreeAndNil(res);
  681. end;
  682. procedure TTestDecoratorTest.TestRun;
  683. var
  684. suite: TTestSuite;
  685. decorator: TTestDecorator;
  686. begin
  687. suite := TTestSuite.Create(TEncapsulatedTestCase);
  688. decorator := TTestDecorator.Create(suite);
  689. decorator.Run(res);
  690. AssertEquals('wrong number of executed tests', 2, res.RunTests);
  691. AssertEquals('wrong number of failures', 1, res.Failures.Count);
  692. decorator.Free;
  693. end;
  694. procedure TTestDecoratorTest.TestOneTimeSetup;
  695. var
  696. suite: TTestSuite;
  697. setupDecorator: TTestSetup;
  698. begin
  699. CountSetup := 0;
  700. suite := TTestSuite.Create(TEncapsulatedTestCase);
  701. setupDecorator := TMyTestSetup.Create(suite);
  702. setupDecorator.Run(res);
  703. AssertEquals('wrong number of executed tests', 2, res.RunTests);
  704. AssertEquals('wrong number of failures', 1, res.Failures.Count);
  705. AssertEquals('One-time Setup not executed', 1, CountSetup);
  706. setupDecorator.Free;
  707. end;
  708. { TEncapsulatedTestCase }
  709. procedure TEncapsulatedTestCase.TestOne;
  710. begin
  711. AssertTrue(True);
  712. end;
  713. procedure TEncapsulatedTestCase.TestTwo;
  714. begin
  715. AssertTrue(False);
  716. end;
  717. { TMyTestSetup }
  718. procedure TMyTestSetup.OneTimeSetup;
  719. begin
  720. Inc(CountSetup)
  721. end;
  722. procedure TMyTestSetup.OneTimeTearDown;
  723. begin
  724. end;
  725. initialization
  726. RegisterTests([TTestCaseTest, TTestSuiteTest, TAssertTest, TListenerTest, TTestDecoratorTest]);
  727. end.