CCUnitTestResult* result)
{
CCUnitTestFailure* runFailure = NULL;
+ _ccunit_testFailure = NULL;
if (setUp && setUp->runTest)
{
if (setjmp (_ccunit_runTest_env) == 0)
else
{
_ccunit_testFailure->testCase = setUp;
- return _ccunit_testFailure;
+ ccunit_addFailure (result, _ccunit_testFailure);
}
}
- if (setjmp (_ccunit_runTest_env) == 0)
+ if (_ccunit_testFailure)
+ ;
+ else if (setjmp (_ccunit_runTest_env) == 0)
{
result->runCount ++;
testCase->runTest ();
{
runFailure = _ccunit_testFailure;
runFailure->testCase = testCase;
+ _ccunit_testFailure = NULL;
}
if (tearDown && tearDown->runTest)
{
CCUnitListIterator itor;
CCUnitTestCase* testCase;
assert (test->type == ccunitTypeFixture);
- ccunit_initListIterator (&fixture->testCases, &itor);
- while ((testCase = ccunit_nextListIterator (&itor)) != NULL)
+ _ccunit_testFailure = NULL;
+ if (fixture->setup_setUp && fixture->setup_setUp->runTest)
{
- CCUnitTestFailure* failure = NULL;
- _ccunit_startTest (result, testCase);
- failure = runTest (testCase, fixture->setUp, fixture->tearDown, result);
- if (failure)
- ccunit_addFailure (result, failure);
- _ccunit_endTest (result, testCase);
+ if (setjmp (_ccunit_runTest_env) == 0)
+ fixture->setup_setUp->runTest ();
+ else
+ {
+ _ccunit_testFailure->testCase = fixture->setup_setUp;
+ ccunit_addFailure (result, _ccunit_testFailure);
+ }
+ }
+ if (!_ccunit_testFailure)
+ {
+ ccunit_initListIterator (&fixture->testCases, &itor);
+ while ((testCase = ccunit_nextListIterator (&itor)) != NULL)
+ {
+ CCUnitTestFailure* failure;
+ _ccunit_startTest (result, testCase);
+ failure = runTest (testCase, fixture->setUp, fixture->tearDown, result);
+ if (failure)
+ ccunit_addFailure (result, failure);
+ _ccunit_endTest (result, testCase);
+ }
+ }
+ if (fixture->setup_tearDown && fixture->setup_tearDown->runTest)
+ {
+ if (setjmp (_ccunit_runTest_env) == 0)
+ fixture->setup_tearDown->runTest ();
+ else
+ {
+ _ccunit_testFailure->testCase = fixture->setup_tearDown;
+ ccunit_addFailure (result, _ccunit_testFailure);
+ }
}
}
return fixture;
}
+inline void ccunit_setTestFixtureSetup (CCUnitTestFixture* fixture,
+ CCUnitTestFunc* setup_setUp,
+ CCUnitTestFunc* setup_tearDown)
+{
+ if (!fixture)
+ return;
+ if (fixture->setup_setUp)
+ ccunit_deleteTestCase (fixture->setup_setUp);
+ fixture->setup_setUp = setup_setUp;
+ if (fixture->setup_tearDown)
+ ccunit_deleteTestCase (fixture->setup_tearDown);
+ fixture->setup_tearDown = setup_tearDown;
+}
+
inline struct CCUnitTestResult* ccunit_runTestFixture (CCUnitTestFixture* f)
{
CCUnitTestResult* result;