fpcunittests.pp 17 KB

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