ccunit_initList (&fixture->testCases);
fixture->setUp = setUp;
fixture->tearDown = tearDown;
+ fixture->ctor = ctor;
+ fixture->dtor = dtor;
return fixture;
}
*
* @param testFixture test fixture to run.
* @param runTest test run function.
+ * @param result test result.
* @throws _ccunit_runResult_env by longjmp.
*/
-void _ccunit_runBare (CCUnitTestFixture* fixture, void (*runTest) ())
+void _ccunit_runBare (CCUnitTestFixture* fixture,
+ void (*runTest) (),
+ CCUnitTestResult* result)
{
- int failure;
+ int failure = 0;
+ int runFailure = 0;
assert (fixture->test.type == ccunitTypeFixture);
if (fixture->setUp)
- fixture->setUp ();
- if ((failure = setjmp (_ccunit_runTest_env)) == 0)
{
- runTest ();
+ if ((failure = setjmp (_ccunit_runTest_env)) == 0)
+ fixture->setUp ();
+ else
+ ccunit_addFailure (result, (CCUnitTestFailure*)failure);
+ }
+ if (!failure)
+ {
+ if ((runFailure = setjmp (_ccunit_runTest_env)) == 0)
+ {
+ runTest ();
+ }
}
if (fixture->tearDown)
- fixture->tearDown ();
- if (failure != 0)
- longjmp (_ccunit_run_env, failure);
+ {
+ if ((failure = setjmp (_ccunit_runTest_env)) == 0)
+ fixture->tearDown ();
+ else
+ ccunit_addFailure (result, (CCUnitTestFailure*)failure);
+ }
+ if (runFailure)
+ longjmp (_ccunit_run_env, runFailure);
}
*/
extern jmp_buf _ccunit_run_env;
-extern void _ccunit_runBare (CCUnitTestFixture* testFixture, void (*runTest)());
+extern jmp_buf _ccunit_runTest_env;
+extern void _ccunit_runBare (CCUnitTestFixture* testFixture,
+ void (*runTest)(),
+ CCUnitTestResult* result);
/**
* Informs the result that a test will be started.
*/
void _ccunit_runTestCase (CCUnitTestResult* result, CCUnitTestFixture* fixture)
{
- int failure;
- CCUnitListIterator itor;
- CCUnitTestCase* testCase;
- ccunit_initListIterator (&fixture->testCases, &itor);
- while ((testCase = ccunit_nextListIterator (&itor)) != NULL)
+ int failure = 0;
+ if (fixture->ctor)
{
- startTest (result, testCase);
- if ((failure = setjmp (_ccunit_run_env)) == 0)
- _ccunit_runBare (fixture, testCase->runTest);
+ if ((failure = setjmp (_ccunit_runTest_env)) == 0)
+ fixture->ctor ();
else
+ ccunit_addFailure (result, (CCUnitTestFailure*)failure);
+ }
+ if (!failure)
+ {
+ CCUnitListIterator itor;
+ CCUnitTestCase* testCase;
+ ccunit_initListIterator (&fixture->testCases, &itor);
+ while ((testCase = ccunit_nextListIterator (&itor)) != NULL)
{
- CCUnitTestFailure* f = (CCUnitTestFailure*)failure;
- f->testCase = testCase;
- ccunit_addFailure (result, f);
+ startTest (result, testCase);
+ if ((failure = setjmp (_ccunit_run_env)) == 0)
+ _ccunit_runBare (fixture, testCase->runTest, result);
+ else
+ {
+ CCUnitTestFailure* f = (CCUnitTestFailure*)failure;
+ f->testCase = testCase;
+ ccunit_addFailure (result, f);
+ }
+ endTest (result, testCase);
}
- endTest (result, testCase);
+ }
+ if (fixture->dtor)
+ {
+ if ((failure = setjmp (_ccunit_runTest_env)) == 0)
+ fixture->dtor ();
+ else
+ ccunit_addFailure (result, (CCUnitTestFailure*)failure);
}
}