Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorPhil Nash2013-11-12 18:59:34 +0000
committerPhil Nash2013-11-12 18:59:34 +0000
commitecb94327634e82ba06d1455dfd713681efd186b5 (patch)
tree9363a5b60cfaf31f834381964d2fdc971e145135 /include
parent5320518dbc3f22909b24f182ce2e463e6fc80abc (diff)
downloadcatch3-ecb94327634e82ba06d1455dfd713681efd186b5.tar.gz
Simplified and tidied test case and tag listing
Diffstat (limited to 'include')
-rw-r--r--include/internal/catch_list.hpp118
1 files changed, 31 insertions, 87 deletions
diff --git a/include/internal/catch_list.hpp b/include/internal/catch_list.hpp
index 45807edd..a0b0ac4e 100644
--- a/include/internal/catch_list.hpp
+++ b/include/internal/catch_list.hpp
@@ -30,76 +30,29 @@ namespace Catch {
std::cout << "All available test cases:\n";
else
std::cout << "Matching test cases:\n";
- std::vector<TestCase> const& allTests = getRegistryHub().getTestCaseRegistry().getAllTests();
- std::vector<TestCase>::const_iterator it = allTests.begin(), itEnd = allTests.end();
-
- // First pass - get max tags
- std::size_t maxTagLen = 0;
- std::size_t maxNameLen = 0;
- for(; it != itEnd; ++it ) {
- if( matchesFilters( config.filters(), *it ) ) {
- maxTagLen = (std::max)( it->getTestCaseInfo().tagsAsString.size(), maxTagLen );
- maxNameLen = (std::max)( it->getTestCaseInfo().name.size(), maxNameLen );
- }
- }
-
- // Try to fit everything in. If not shrink tag column first, down to 30
- // then shrink name column until it all fits (strings will be wrapped within column)
- while( maxTagLen + maxNameLen > CATCH_CONFIG_CONSOLE_WIDTH-5 ) {
- if( maxTagLen > 30 )
- --maxTagLen;
- else
- --maxNameLen;
- }
std::size_t matchedTests = 0;
- for( it = allTests.begin(); it != itEnd; ++it ) {
+ TextAttributes nameAttr, tagsAttr;
+ nameAttr.setInitialIndent( 2 ).setIndent( 4 );
+ tagsAttr.setIndent( 6 );
+
+ std::vector<TestCase> const& allTests = getRegistryHub().getTestCaseRegistry().getAllTests();
+ for( std::vector<TestCase>::const_iterator it = allTests.begin(), itEnd = allTests.end();
+ it != itEnd;
+ ++it )
if( matchesFilters( config.filters(), *it ) ) {
matchedTests++;
- Text nameWrapper( it->getTestCaseInfo().name,
- TextAttributes()
- .setWidth( maxNameLen+2 )
- .setInitialIndent(2)
- .setIndent(4) );
-
- Text tagsWrapper( it->getTestCaseInfo().tagsAsString,
- TextAttributes()
- .setWidth( maxTagLen )
- .setInitialIndent(0)
- .setIndent( 2 ) );
-
- for( std::size_t i = 0; i < (std::max)( nameWrapper.size(), tagsWrapper.size() ); ++i ) {
- Colour::Code colour = Colour::None;
- if( it->getTestCaseInfo().isHidden )
- colour = Colour::SecondaryText;
- std::string nameCol;
- if( i < nameWrapper.size() ) {
- nameCol = nameWrapper[i];
- }
- else {
- nameCol = " ...";
- colour = Colour::SecondaryText;
- }
-
- {
- Colour colourGuard( colour );
- std::cout << nameCol;
- }
- if( i < tagsWrapper.size() && !tagsWrapper[i].empty() ) {
- size_t padLen( maxNameLen > nameCol.size() ? maxNameLen - nameCol.size() : 0 );
- if( i == 0 ) {
- Colour colourGuard( Colour::SecondaryText );
- std::cout << " " << std::string( padLen, '.' ) << " ";
- }
- else {
- std::cout << std::string( padLen, ' ' ) << " ";
- }
- std::cout << tagsWrapper[i];
- }
- std::cout << "\n";
- }
+ TestCaseInfo const& testCaseInfo = it->getTestCaseInfo();
+ Colour::Code colour = testCaseInfo.isHidden
+ ? Colour::SecondaryText
+ : Colour::None;
+ Colour colourGuard( colour );
+
+ std::cout << Text( testCaseInfo.name, nameAttr ) << std::endl;
+ if( !testCaseInfo.tags.empty() )
+ std::cout << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
}
- }
+
if( config.filters().empty() )
std::cout << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
else
@@ -112,21 +65,20 @@ namespace Catch {
std::cout << "All available tags:\n";
else
std::cout << "Matching tags:\n";
- std::vector<TestCase> const& allTests = getRegistryHub().getTestCaseRegistry().getAllTests();
- std::vector<TestCase>::const_iterator it = allTests.begin(), itEnd = allTests.end();
std::map<std::string, int> tagCounts;
- std::size_t maxTagLen = 0;
-
- for(; it != itEnd; ++it ) {
+ std::vector<TestCase> const& allTests = getRegistryHub().getTestCaseRegistry().getAllTests();
+ for( std::vector<TestCase>::const_iterator it = allTests.begin(),
+ itEnd = allTests.end();
+ it != itEnd;
+ ++it ) {
if( matchesFilters( config.filters(), *it ) ) {
for( std::set<std::string>::const_iterator tagIt = it->getTestCaseInfo().tags.begin(),
tagItEnd = it->getTestCaseInfo().tags.end();
tagIt != tagItEnd;
++tagIt ) {
std::string tagName = *tagIt;
- maxTagLen = (std::max)( maxTagLen, tagName.size() );
std::map<std::string, int>::iterator countIt = tagCounts.find( tagName );
if( countIt == tagCounts.end() )
tagCounts.insert( std::make_pair( tagName, 1 ) );
@@ -135,26 +87,18 @@ namespace Catch {
}
}
}
- maxTagLen +=4;
- if( maxTagLen > CATCH_CONFIG_CONSOLE_WIDTH-10 )
- maxTagLen = CATCH_CONFIG_CONSOLE_WIDTH-10;
- for( std::map<std::string, int>::const_iterator countIt = tagCounts.begin(), countItEnd = tagCounts.end();
+ for( std::map<std::string, int>::const_iterator countIt = tagCounts.begin(),
+ countItEnd = tagCounts.end();
countIt != countItEnd;
++countIt ) {
+ std::ostringstream oss;
+ oss << " " << countIt->second << " ";
Text wrapper( "[" + countIt->first + "]", TextAttributes()
- .setIndent(2)
- .setWidth( maxTagLen ) );
- std::cout << wrapper;
- std::size_t dots = 2;
- if( maxTagLen > wrapper.last().size() )
- dots += maxTagLen - wrapper.last().size();
- {
- Colour colourGuard( Colour::SecondaryText );
- std::cout << std::string( dots, '.' );
- }
- std::cout << countIt->second
- << "\n";
+ .setInitialIndent( 0 )
+ .setIndent( oss.str().size() )
+ .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) );
+ std::cout << oss.str() << wrapper << "\n";
}
std::cout << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl;
return tagCounts.size();