Prevent duplicate test names from being registered

If a test case with the same name as an already registered test case is registered an error is logged to cerr and the program exits (with error level 1)
This commit is contained in:
Phil Nash 2012-02-09 08:34:01 +00:00
parent fd78e0f6df
commit 3fd7dc0218
3 changed files with 22 additions and 7 deletions

View File

@ -161,7 +161,7 @@ namespace Catch
) )
const const
{ {
return *m_test == *other.m_test && m_name == other.m_name && m_description == other.m_description; return *m_test == *other.m_test && m_name == other.m_name;
} }
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
@ -171,12 +171,7 @@ namespace Catch
) )
const const
{ {
if( m_name < other.m_name ) return m_name < other.m_name;
return true;
if( m_name > other.m_name )
return false;
return *m_test < *other.m_test;
} }
private: private:

View File

@ -48,6 +48,14 @@ namespace Catch
m_functions.insert( testInfo ); m_functions.insert( testInfo );
m_functionsInOrder.push_back( testInfo ); m_functionsInOrder.push_back( testInfo );
} }
else
{
const TestCaseInfo& prev = *m_functions.find( testInfo );
std::cerr << "error: TEST_CASE( \"" << testInfo.getName() << "\" ) already defined.\n"
<< "\tFirst seen at " << prev.getFilename() << ":" << prev.getLine() << "\n"
<< "\tRedefined at " << testInfo.getFilename() << ":" << testInfo.getLine() << std::endl;
exit(1);
}
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@ -281,3 +281,15 @@ TEST_CASE( "./succeeding/unimplemented static bool", "static bools can be evalua
REQUIRE_FALSE( is_true<false>::value ); REQUIRE_FALSE( is_true<false>::value );
} }
} }
// Uncomment these tests to produce an error at test registration time
/*
TEST_CASE( "./sameName", "Tests with the same name are not allowed" )
{
}
TEST_CASE( "./sameName", "Tests with the same name are not allowed" )
{
}
*/