From 3ba52061e4e8aa330c49e6d1f203a9c8a0e9d826 Mon Sep 17 00:00:00 2001 From: tsutsumi <> Date: Thu, 19 Aug 2010 10:19:46 +0000 Subject: [PATCH] add functions for fixture setUp/tearDown. ASSERT tried in the setUp function in the unsuccessful case as well so that the tearDown function was called. --- src/ccunit/CCUnitTestFixture.c | 62 +++++++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/src/ccunit/CCUnitTestFixture.c b/src/ccunit/CCUnitTestFixture.c index 86abe1f..7239149 100644 --- a/src/ccunit/CCUnitTestFixture.c +++ b/src/ccunit/CCUnitTestFixture.c @@ -78,6 +78,7 @@ static CCUnitTestFailure* runTest (CCUnitTestCase* testCase, CCUnitTestResult* result) { CCUnitTestFailure* runFailure = NULL; + _ccunit_testFailure = NULL; if (setUp && setUp->runTest) { if (setjmp (_ccunit_runTest_env) == 0) @@ -85,10 +86,12 @@ static CCUnitTestFailure* runTest (CCUnitTestCase* testCase, 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 (); @@ -97,6 +100,7 @@ static CCUnitTestFailure* runTest (CCUnitTestCase* testCase, { runFailure = _ccunit_testFailure; runFailure->testCase = testCase; + _ccunit_testFailure = NULL; } if (tearDown && tearDown->runTest) { @@ -122,15 +126,39 @@ static void run (CCUnitTest* test, CCUnitTestResult* result) 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); + } } } @@ -163,6 +191,20 @@ CCUnitTestFixture* ccunit_newTestFixture (const char* name, 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; -- 2.11.0