From 5ecb72b9bb65cd8fed2aec4da23a3bc21bbccd74 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 26 Nov 2013 20:57:45 +0000 Subject: [PATCH] Build 14 --- README.md | 2 +- include/internal/catch_version.hpp | 2 +- single_include/catch.hpp | 83 ++++++++++++++++++++++++------ 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 3579e112..4d5f7507 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![catch logo](catch-logo-small.png) -*v1.0 build 13 (master branch)* +*v1.0 build 14 (master branch)* Build status (on Travis CI) [![Build Status](https://travis-ci.org/philsquared/Catch.png)](https://travis-ci.org/philsquared/Catch) diff --git a/include/internal/catch_version.hpp b/include/internal/catch_version.hpp index 89b4e04f..466a9a43 100644 --- a/include/internal/catch_version.hpp +++ b/include/internal/catch_version.hpp @@ -13,7 +13,7 @@ namespace Catch { // These numbers are maintained by a script - Version libraryVersion( 1, 0, 13, "master" ); + Version libraryVersion( 1, 0, 14, "master" ); } #endif // TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED diff --git a/single_include/catch.hpp b/single_include/catch.hpp index 2fc6b728..b326de06 100644 --- a/single_include/catch.hpp +++ b/single_include/catch.hpp @@ -1,6 +1,6 @@ /* - * CATCH v1.0 build 13 (master branch) - * Generated: 2013-11-13 08:10:05.836093 + * CATCH v1.0 build 14 (master branch) + * Generated: 2013-11-26 20:54:38.067005 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. @@ -2125,6 +2125,7 @@ namespace Catch { : listTests( false ), listTags( false ), listReporters( false ), + listTestNamesOnly( false ), showSuccessfulTests( false ), shouldDebugBreak( false ), noThrow( false ), @@ -2138,6 +2139,7 @@ namespace Catch { bool listTests; bool listTags; bool listReporters; + bool listTestNamesOnly; bool showSuccessfulTests; bool shouldDebugBreak; @@ -2206,6 +2208,7 @@ namespace Catch { } bool listTests() const { return m_data.listTests; } + bool listTestNamesOnly() const { return m_data.listTestNamesOnly; } bool listTags() const { return m_data.listTags; } bool listReporters() const { return m_data.listReporters; } @@ -4128,6 +4131,13 @@ namespace Clara { int position; }; + // NOTE: std::auto_ptr is deprecated in c++11/c++0x +#if defined(__cplusplus) && __cplusplus > 199711L + typedef std::unique_ptr ArgAutoPtr; +#else + typedef std::auto_ptr ArgAutoPtr; +#endif + class ArgBinder { public: template @@ -4152,7 +4162,7 @@ namespace Clara { else if( m_arg.isAnyPositional() ) { if( m_cl->m_arg.get() ) throw std::logic_error( "Only one unpositional argument can be added" ); - m_cl->m_arg = std::auto_ptr( new Arg( m_arg ) ); + m_cl->m_arg = ArgAutoPtr( new Arg( m_arg ) ); } else m_cl->m_options.push_back( m_arg ); @@ -4196,7 +4206,7 @@ namespace Clara { m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ) { if( other.m_arg.get() ) - m_arg = std::auto_ptr( new Arg( *other.m_arg ) ); + m_arg = ArgAutoPtr( new Arg( *other.m_arg ) ); } template @@ -4366,12 +4376,14 @@ namespace Clara { Detail::BoundArgFunction m_boundProcessName; std::vector m_options; std::map m_positionalArgs; - std::auto_ptr m_arg; + ArgAutoPtr m_arg; int m_highestSpecifiedArgPosition; }; } // end namespace Clara +#include + namespace Catch { inline void abortAfterFirst( ConfigData& config ) { config.abortAfter = 1; } @@ -4398,6 +4410,18 @@ namespace Catch { ? ShowDurations::Always : ShowDurations::Never; } + inline void loadTestNamesFromFile( ConfigData& config, std::string const& _filename ) { + std::ifstream f( _filename.c_str() ); + if( !f.is_open() ) + throw std::domain_error( "Unable to load input file: " + _filename ); + + std::string line; + while( std::getline( f, line ) ) { + line = trim(line); + if( !line.empty() && !startsWith( line, "#" ) ) + addTestOrTags( config, line ); + } + } inline Clara::CommandLine makeCommandLineParser() { @@ -4412,19 +4436,15 @@ namespace Catch { .longOpt( "help" ); cli.bind( &ConfigData::listTests ) - .describe( "list all (or matching) test cases" ) + .describe( "list all/matching test cases" ) .shortOpt( "l") .longOpt( "list-tests" ); cli.bind( &ConfigData::listTags ) - .describe( "list all (or matching) tags" ) + .describe( "list all/matching tags" ) .shortOpt( "t") .longOpt( "list-tags" ); - cli.bind( &ConfigData::listReporters ) - .describe( "list all reporters" ) - .longOpt( "list-reporters" ); - cli.bind( &ConfigData::showSuccessfulTests ) .describe( "include successful tests in output" ) .shortOpt( "s") @@ -4447,7 +4467,7 @@ namespace Catch { .hint( "filename" ); cli.bind( &ConfigData::reporterName ) - .describe( "reporter to use - defaults to console" ) + .describe( "reporter to use (defaults to console)" ) .shortOpt( "r") .longOpt( "reporter" ) // .hint( "name[:filename]" ); @@ -4492,6 +4512,21 @@ namespace Catch { .longOpt( "durations" ) .hint( "yes/no" ); + cli.bind( &loadTestNamesFromFile ) + .describe( "load test names to run from a file" ) + .shortOpt( "f") + .longOpt( "input-file" ) + .hint( "filename" ); + + // Less common commands which don't have a short form + cli.bind( &ConfigData::listTestNamesOnly ) + .describe( "list all/matching test cases names only" ) + .longOpt( "list-test-names-only" ); + + cli.bind( &ConfigData::listReporters ) + .describe( "list all reporters" ) + .longOpt( "list-reporters" ); + return cli; } @@ -4604,6 +4639,20 @@ namespace Catch { return matchedTests; } + inline std::size_t listTestsNamesOnly( Config const& config ) { + std::size_t matchedTests = 0; + std::vector const& allTests = getRegistryHub().getTestCaseRegistry().getAllTests(); + for( std::vector::const_iterator it = allTests.begin(), itEnd = allTests.end(); + it != itEnd; + ++it ) + if( matchesFilters( config.filters(), *it ) ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + std::cout << testCaseInfo.name << std::endl; + } + return matchedTests; + } + inline std::size_t listTags( Config const& config ) { if( config.filters().empty() ) std::cout << "All available tags:\n"; @@ -4675,6 +4724,8 @@ namespace Catch { Option listedCount; if( config.listTests() ) listedCount = listedCount.valueOr(0) + listTests( config ); + if( config.listTestNamesOnly() ) + listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); if( config.listTags() ) listedCount = listedCount.valueOr(0) + listTags( config ); if( config.listReporters() ) @@ -5423,8 +5474,8 @@ namespace Catch { else { TestCase const& prev = *m_functions.find( testCase ); std::cerr << "error: TEST_CASE( \"" << name << "\" ) already defined.\n" - << "\tFirst seen at " << SourceLineInfo( prev.getTestCaseInfo().lineInfo ) << "\n" - << "\tRedefined at " << SourceLineInfo( testCase.getTestCaseInfo().lineInfo ) << std::endl; + << "\tFirst seen at " << prev.getTestCaseInfo().lineInfo << "\n" + << "\tRedefined at " << testCase.getTestCaseInfo().lineInfo << std::endl; exit(1); } } @@ -6209,7 +6260,7 @@ namespace Catch { SourceLineInfo const& _lineInfo ) { std::string desc = _descOrTags; - bool isHidden( startsWith( _name, "./" ) ); + bool isHidden( startsWith( _name, "./" ) ); // Legacy support std::set tags; TagExtracter( tags ).parse( desc ); if( tags.find( "hide" ) != tags.end() || tags.find( "." ) != tags.end() ) @@ -6317,7 +6368,7 @@ namespace Catch { namespace Catch { // These numbers are maintained by a script - Version libraryVersion( 1, 0, 13, "master" ); + Version libraryVersion( 1, 0, 14, "master" ); } // #included from: catch_text.hpp