Skip to content

Commit

Permalink
Adding logic to skip tests.
Browse files Browse the repository at this point in the history
The TS_SKIP() macro supports test skipping.
  • Loading branch information
whart222 committed Feb 27, 2013
1 parent 2ba342e commit 0c764fb
Show file tree
Hide file tree
Showing 12 changed files with 108 additions and 13 deletions.
22 changes: 18 additions & 4 deletions cxxtest/ErrorFormatter.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,12 @@ class ErrorFormatter : public TestListener {
}

void leaveTest(const TestDescription &) {
if (!tracker().testFailed()) {
if (tracker().testSkipped()) {
(*_o) << "s";
_o->flush();
fflush(stdout);
_dotting = true;
} else if (!tracker().testFailed()) {
(*_o) << ".";
_o->flush();
fflush(stdout);
Expand All @@ -95,9 +100,13 @@ class ErrorFormatter : public TestListener {
return;
}
newLine();
(*_o) << "Failed " << tracker().failedTests() << " of " << totalTests << endl;
unsigned numPassed = desc.numTotalTests() - tracker().failedTests();
(*_o) << "Success rate: " << (numPassed * 100 / desc.numTotalTests()) << "%" << endl;
(*_o) << "Failed " << tracker().failedTests() << " and Skipped " << tracker().skippedTests() << " of " << totalTests << endl;
unsigned numPassed = desc.numTotalTests() - tracker().failedTests() - tracker().skippedTests();
unsigned numTotal = desc.numTotalTests() - tracker().skippedTests();
if (numTotal == 0)
(*_o) << "Success rate: 100%" << endl;
else
(*_o) << "Success rate: " << (numPassed * 100.0 / numTotal) << "%" << endl;
}

void trace(const char *file, int line, const char *expression) {
Expand All @@ -110,6 +119,11 @@ class ErrorFormatter : public TestListener {
expression << endl;
}

void skippedTest(const char *file, int line, const char *expression) {
stop(file, line) << _warningString << ": Test skipped: " <<
expression << endl;
}

void failedTest(const char *file, int line, const char *expression) {
stop(file, line) << _errorString << ": Test failed: " <<
expression << endl;
Expand Down
4 changes: 4 additions & 0 deletions cxxtest/Gui.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ class GuiListener : public TestListener {
yellowBarSafe();
}

void skippedTest(const char * /*file*/, int /*line*/, const char * /*expression*/) {
yellowBarSafe();
}

void failedTest(const char * /*file*/, int /*line*/, const char * /*expression*/) {
redBarSafe();
}
Expand Down
9 changes: 6 additions & 3 deletions cxxtest/RealDescriptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,11 @@ bool RealTestDescription::setUp() {

_TS_TRY {
bool ok = false;
_TSM_ASSERT_THROWS_NOTHING(file(), line(), "Exception thrown from setUp()", suite()->setUp(); ok = true);
_TSM_ASSERT_THROWS_NOTHING(file(), line(), "Exception thrown from setUp()", suite()->setUp(); ok=true);
if (ok == false) { return ok; }
}
_TS_CATCH_ABORT( { return false; });
_TS_CATCH_ABORT( { return false; })
_TS_CATCH_SKIPPED( { return false; });

return true;
}
Expand All @@ -74,7 +75,8 @@ bool RealTestDescription::tearDown() {
_TS_TRY {
_TSM_ASSERT_THROWS_NOTHING(file(), line(), "Exception thrown from tearDown()", suite()->tearDown());
}
_TS_CATCH_ABORT( { return false; });
_TS_CATCH_ABORT( { return false; })
_TS_CATCH_SKIPPED( { return false; });

for (GlobalFixture *gf = GlobalFixture::lastGlobalFixture(); gf != 0; gf = gf->prevGlobalFixture()) {
bool ok;
Expand Down Expand Up @@ -103,6 +105,7 @@ TestSuite *RealTestDescription::suite() const { return _suite->suite(); }
void RealTestDescription::run() {
_TS_TRY { runTest(); }
_TS_CATCH_ABORT( {})
_TS_CATCH_SKIPPED( {})
___TSM_CATCH(file(), line(), "Exception thrown from test");
}

Expand Down
6 changes: 4 additions & 2 deletions cxxtest/RealDescriptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,8 @@ bool DynamicSuiteDescription<S>::setUp() {
_TSM_ASSERT_THROWS_NOTHING(file(), _createLine, "Exception thrown from createSuite()", createSuite());
_TSM_ASSERT(file(), _createLine, "createSuite() failed", suite() != 0);
}
_TS_CATCH_ABORT( { return false; });
_TS_CATCH_ABORT( { return false; })
_TS_CATCH_SKIPPED( { return false; });

return (suite() != 0);
}
Expand All @@ -193,7 +194,8 @@ bool DynamicSuiteDescription<S>::tearDown() {
_TS_TRY {
_TSM_ASSERT_THROWS_NOTHING(file(), _destroyLine, "destroySuite() failed", destroySuite());
}
_TS_CATCH_ABORT( { return false; });
_TS_CATCH_ABORT( { return false; })
_TS_CATCH_SKIPPED( { return false; });

return true;
}
Expand Down
5 changes: 5 additions & 0 deletions cxxtest/TeeListener.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ class TeeListener : public TestListener {
_second->warning(file, line, expression);
}

void skippedTest(const char *file, int line, const char *expression) {
_first->skippedTest(file, line, expression);
_second->skippedTest(file, line, expression);
}

void failedTest(const char *file, int line, const char *expression) {
_first->failedTest(file, line, expression);
_second->failedTest(file, line, expression);
Expand Down
2 changes: 2 additions & 0 deletions cxxtest/TestListener.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class TestListener {
const char * /*expression*/) {}
virtual void warning(const char * /*file*/, int /*line*/,
const char * /*expression*/) {}
virtual void skippedTest(const char * /*file*/, int /*line*/,
const char * /*expression*/) {}
virtual void failedTest(const char * /*file*/, int /*line*/,
const char * /*expression*/) {}
virtual void failedAssert(const char * /*file*/, int /*line*/,
Expand Down
10 changes: 10 additions & 0 deletions cxxtest/TestSuite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ void doWarn(const char *file, int line, const char *message) {
tracker().warning(file, line, message);
}

# if defined(_CXXTEST_HAVE_EH)
void doSkipTest(const char* file, int line, const char* message) {
tracker().skippedTest(file, line, message);
throw SkipTest();
# else
void doSkipTest(const char* file, int line, const char*) {
doWarn(file, line, "Test skipping is not supported without exception handling.");
# endif
}

void doFailTest(const char *file, int line, const char *message) {
tracker().failedTest(file, line, message);
TS_ABORT();
Expand Down
8 changes: 8 additions & 0 deletions cxxtest/TestSuite.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class TestSuite {
};

class AbortTest {};
class SkipTest {};
void doAbortTest();
# define TS_ABORT() CxxTest::doAbortTest()

Expand All @@ -48,6 +49,7 @@ void setMaxDumpSize(unsigned value = CXXTEST_MAX_DUMP_SIZE);

void doTrace(const char *file, int line, const char *message);
void doWarn(const char *file, int line, const char *message);
void doSkipTest(const char *file, int line, const char *message);
void doFailTest(const char *file, int line, const char *message);
void doFailAssert(const char *file, int line, const char *expression, const char *message);

Expand Down Expand Up @@ -226,6 +228,7 @@ void doAssertSameFiles(const char* file, int line,
# define _TS_TRY try
# define _TS_CATCH_TYPE(t, b) catch t b
# define _TS_CATCH_ABORT(b) _TS_CATCH_TYPE( (const CxxTest::AbortTest &), b )
# define _TS_CATCH_SKIPPED(b) _TS_CATCH_TYPE( (const CxxTest::SkipTest &), b )
# define _TS_LAST_CATCH(b) _TS_CATCH_TYPE( (...), b )
# define _TSM_LAST_CATCH(f,l,m) _TS_LAST_CATCH( { (CxxTest::tracker()).failedTest(f,l,m); TS_ABORT(); } )
# ifdef _CXXTEST_HAVE_STD
Expand All @@ -251,6 +254,7 @@ void doAssertSameFiles(const char* file, int line,
# define _TS_LAST_CATCH(b)
# define _TS_CATCH_STD(e,b)
# define _TS_CATCH_ABORT(b)
# define _TS_CATCH_SKIPPED(b)
# endif // _CXXTEST_HAVE_EH

// TS_TRACE
Expand All @@ -261,6 +265,10 @@ void doAssertSameFiles(const char* file, int line,
# define _TS_WARN(f,l,e) CxxTest::doWarn( (f), (l), TS_AS_STRING(e) )
# define TS_WARN(e) _TS_WARN( __FILE__, __LINE__, e )

// TS_SKIP
# define _TS_SKIP(f,l,e) CxxTest::doSkipTest( (f), (l), TS_AS_STRING(e) )
# define TS_SKIP(e) _TS_SKIP( __FILE__, __LINE__, e )

// TS_FAIL
# define _TS_FAIL(f,l,e) CxxTest::doFailTest( (f), (l), TS_AS_STRING(e) )
# define TS_FAIL(e) _TS_FAIL( __FILE__, __LINE__, e )
Expand Down
17 changes: 16 additions & 1 deletion cxxtest/TestTracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ TestTracker & TestTracker::tracker() {

void TestTracker::initialize() {
_warnings = 0;
_skippedTests = 0;
_testSkipped = false;
_failedTests = 0;
_testFailedAsserts = 0;
_suiteFailedTests = 0;
Expand Down Expand Up @@ -75,19 +77,22 @@ void TestTracker::setListener(TestListener *l) {

void TestTracker::enterWorld(const WorldDescription &wd) {
setWorld(&wd);
_warnings = _failedTests = _testFailedAsserts = _suiteFailedTests = _failedSuites = 0;
_warnings = _skippedTests = _failedTests = _testFailedAsserts = _suiteFailedTests = _failedSuites = 0;
_testSkipped = false;
_l->enterWorld(wd);
}

void TestTracker::enterSuite(const SuiteDescription &sd) {
setSuite(&sd);
_testFailedAsserts = _suiteFailedTests = 0;
_testSkipped = false;
_l->enterSuite(sd);
}

void TestTracker::enterTest(const TestDescription &td) {
setTest(&td);
_testFailedAsserts = false;
_testSkipped = false;
_l->enterTest(td);
}

Expand Down Expand Up @@ -115,6 +120,12 @@ void TestTracker::warning(const char *file, int line, const char *expression) {
_l->warning(file, line, expression);
}

void TestTracker::skippedTest(const char *file, int line, const char *expression) {
countSkipped();
_testSkipped = true;
_l->skippedTest(file, line, expression);
}

void TestTracker::failedTest(const char *file, int line, const char *expression) {
countFailure();
_l->failedTest(file, line, expression);
Expand Down Expand Up @@ -216,6 +227,10 @@ void TestTracker::countWarning() {
++ _warnings;
}

void TestTracker::countSkipped() {
++ _skippedTests;
}

void TestTracker::countFailure() {
if (++ _testFailedAsserts == 1) {
++ _failedTests;
Expand Down
7 changes: 6 additions & 1 deletion cxxtest/TestTracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@ class TestTracker : public TestListener {
const SuiteDescription &suite() const { return *_suite; }
const WorldDescription &world() const { return *_world; }

bool testSkipped() const { return _testSkipped; }
bool testFailed() const { return (testFailedAsserts() > 0); }
bool suiteFailed() const { return (suiteFailedTests() > 0); }
bool worldFailed() const { return (failedSuites() > 0); }

unsigned warnings() const { return _warnings; }
unsigned skippedTests() const { return _skippedTests; }
unsigned failedTests() const { return _failedTests; }
unsigned testFailedAsserts() const { return _testFailedAsserts; }
unsigned suiteFailedTests() const { return _suiteFailedTests; }
Expand All @@ -57,6 +59,7 @@ class TestTracker : public TestListener {
void leaveWorld(const WorldDescription &wd);
void trace(const char *file, int line, const char *expression);
void warning(const char *file, int line, const char *expression);
void skippedTest(const char *file, int line, const char *expression);
void failedTest(const char *file, int line, const char *expression);
void failedAssert(const char *file, int line, const char *expression);
void failedAssertEquals(const char *file, int line,
Expand Down Expand Up @@ -98,7 +101,8 @@ class TestTracker : public TestListener {
static bool _created;
TestListener _dummyListener;
DummyWorldDescription _dummyWorld;
unsigned _warnings, _failedTests, _testFailedAsserts, _suiteFailedTests, _failedSuites;
bool _testSkipped;
unsigned _warnings, _skippedTests, _failedTests, _testFailedAsserts, _suiteFailedTests, _failedSuites;
TestListener *_l;
const WorldDescription *_world;
const SuiteDescription *_suite;
Expand All @@ -113,6 +117,7 @@ class TestTracker : public TestListener {
void setTest(const TestDescription *t);
void countWarning();
void countFailure();
void countSkipped();

friend class TestRunner;

Expand Down
17 changes: 17 additions & 0 deletions cxxtest/XmlFormatter.h
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,10 @@ class XmlFormatter : public TestListener {
elt->value << expression;
}

void skippedTest(const char* file, int line, const char* expression) {
testSkipped(file, line, "skipped") << "Test skipped: " << expression;
}

void failedTest(const char* file, int line, const char* expression) {
testFailure(file, line, "failure") << "Test failed: " << expression;
}
Expand Down Expand Up @@ -490,6 +494,19 @@ class XmlFormatter : public TestListener {
//failedTest(file,line,message.c_str());
}

std::stringstream& testSkipped(const char* file, int line, const char *failureType) {
//testcase->fail = true;
element_t elt = testcase->update_element("skipped");
if (elt->value.str().empty()) {
elt->add("type", failureType);
elt->add("line", line);
elt->add("file", file);
} else {
elt->value << CXXTEST_STD(endl);
}
return elt->value;
}

#if 0
void attributeBinary(const char* name, const void *value, unsigned size) {
(*_o) << name;
Expand Down
14 changes: 12 additions & 2 deletions cxxtest/unix.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,12 @@ namespace CxxTest
{
if ( tracker().failedTests() ) {
(*_o) << "Failed " << tracker().failedTests() << " of " << totalTests << endl;
unsigned numPassed = desc.numTotalTests() - tracker().failedTests();
(*_o) << "Success rate: " << (numPassed * 100 / desc.numTotalTests()) << "%" << endl;
unsigned numPassed = desc.numTotalTests() - tracker().failedTests() - tracer().skippedTests();
unsigned numTotal = desc.numTotalTests() - tracker().skippedTests();
if (numTotal == 0)
(*_o) << "Success rate: 100%" << endl;
else
(*_o) << "Success rate: " << (numPassed * 100.0 / numTotal) << "%" << endl;
}
}

Expand All @@ -65,6 +69,12 @@ namespace CxxTest
expression << endl;
}

void skippedTest( const char *file, int line, const char *expression )
{
stop( file, line ) << "Warning: Test skipped: " <<
expression << endl;
}

void failedTest( const char *file, int line, const char *expression )
{
stop( file, line ) << "Error: Test failed: " <<
Expand Down

0 comments on commit 0c764fb

Please sign in to comment.