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

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorPhil Nash2013-12-20 19:06:26 +0000
committerPhil Nash2013-12-20 19:06:26 +0000
commit91ef5f7d4024ea96b5bb8d0295443475527ea014 (patch)
treec13a085e0d1ae9cce5bab60f56be56b3e570776d
parent886d9d397c33c47109f6e748010c7337b98ebc1f (diff)
downloadcatch3-91ef5f7d4024ea96b5bb8d0295443475527ea014.tar.gz
build 22
-rw-r--r--README.md2
-rw-r--r--include/internal/catch_version.hpp2
-rw-r--r--single_include/catch.hpp62
3 files changed, 39 insertions, 27 deletions
diff --git a/README.md b/README.md
index 6b72eb2f..8852fd7a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
![catch logo](catch-logo-small.png)
-*v1.0 build 21 (master branch)*
+*v1.0 build 22 (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 de3ea90f..8b232e99 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, 21, "master" );
+ Version libraryVersion( 1, 0, 22, "master" );
}
#endif // TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED
diff --git a/single_include/catch.hpp b/single_include/catch.hpp
index e9b5374b..1acc3beb 100644
--- a/single_include/catch.hpp
+++ b/single_include/catch.hpp
@@ -1,6 +1,6 @@
/*
- * CATCH v1.0 build 21 (master branch)
- * Generated: 2013-12-19 18:42:03.734896
+ * CATCH v1.0 build 22 (master branch)
+ * Generated: 2013-12-20 19:06:10.591489
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
@@ -3389,18 +3389,25 @@ namespace Clara {
CommandLine()
: m_boundProcessName( new Detail::NullBinder<ConfigT>() ),
- m_highestSpecifiedArgPosition( 0 )
+ m_highestSpecifiedArgPosition( 0 ),
+ m_throwOnUnrecognisedTokens( false )
{}
CommandLine( CommandLine const& other )
: m_boundProcessName( other.m_boundProcessName ),
m_options ( other.m_options ),
m_positionalArgs( other.m_positionalArgs ),
- m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition )
+ m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ),
+ m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens )
{
if( other.m_arg.get() )
m_arg = ArgAutoPtr( new Arg( *other.m_arg ) );
}
+ CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) {
+ m_throwOnUnrecognisedTokens = shouldThrow;
+ return *this;
+ }
+
template<typename F>
ArgBinder bind( F f ) {
ArgBinder binder( this, f );
@@ -3506,6 +3513,7 @@ namespace Clara {
std::vector<Parser::Token> populateOptions( std::vector<Parser::Token> const& tokens, ConfigT& config ) const {
std::vector<Parser::Token> unusedTokens;
+ std::vector<std::string> errors;
for( std::size_t i = 0; i < tokens.size(); ++i ) {
Parser::Token const& token = tokens[i];
typename std::vector<Arg>::const_iterator it = m_options.begin(), itEnd = m_options.end();
@@ -3517,8 +3525,9 @@ namespace Clara {
( token.type == Parser::Token::LongOpt && arg.hasLongName( token.data ) ) ) {
if( arg.takesArg() ) {
if( i == tokens.size()-1 || tokens[i+1].type != Parser::Token::Positional )
- throw std::domain_error( "Expected argument to option " + token.data );
- arg.boundField.set( config, tokens[++i].data );
+ errors.push_back( "Expected argument to option: " + token.data );
+ else
+ arg.boundField.set( config, tokens[++i].data );
}
else {
arg.boundField.setFlag( config );
@@ -3527,11 +3536,26 @@ namespace Clara {
}
}
catch( std::exception& ex ) {
- throw std::runtime_error( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" );
+ errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" );
}
}
- if( it == itEnd )
- unusedTokens.push_back( token );
+ if( it == itEnd ) {
+ if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens )
+ unusedTokens.push_back( token );
+ else if( m_throwOnUnrecognisedTokens )
+ errors.push_back( "unrecognised option: " + token.data );
+ }
+ }
+ if( !errors.empty() ) {
+ std::ostringstream oss;
+ for( std::vector<std::string>::const_iterator it = errors.begin(), itEnd = errors.end();
+ it != itEnd;
+ ++it ) {
+ if( it != errors.begin() )
+ oss << "\n";
+ oss << *it;
+ }
+ throw std::runtime_error( oss.str() );
}
return unusedTokens;
}
@@ -3570,6 +3594,7 @@ namespace Clara {
std::map<int, Arg> m_positionalArgs;
ArgAutoPtr m_arg;
int m_highestSpecifiedArgPosition;
+ bool m_throwOnUnrecognisedTokens;
};
} // end namespace Clara
@@ -4812,9 +4837,8 @@ namespace Catch {
int applyCommandLine( int argc, char* const argv[], OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) {
try {
+ m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail );
m_unusedTokens = m_cli.parseInto( argc, argv, m_configData );
- if( unusedOptionBehaviour == OnUnusedOptions::Fail )
- enforceNoUsedTokens();
if( m_configData.showHelp )
showHelp( m_configData.processName );
m_config.reset();
@@ -4822,7 +4846,7 @@ namespace Catch {
catch( std::exception& ex ) {
{
Colour colourGuard( Colour::Red );
- std::cerr << "\nError in input:\n"
+ std::cerr << "\nError(s) in input:\n"
<< Text( ex.what(), TextAttributes().setIndent(2) )
<< "\n\n";
}
@@ -4837,18 +4861,6 @@ namespace Catch {
m_config.reset();
}
- void enforceNoUsedTokens() const {
- if( !m_unusedTokens.empty() ) {
- std::vector<Clara::Parser::Token>::const_iterator
- it = m_unusedTokens.begin(),
- itEnd = m_unusedTokens.end();
- std::string msg;
- for(; it != itEnd; ++it )
- msg += " unrecognised option: " + it->data + "\n";
- throw std::runtime_error( msg.substr( 0, msg.size()-1 ) );
- }
- }
-
int run( int argc, char* const argv[] ) {
int returnCode = applyCommandLine( argc, argv );
@@ -6166,7 +6178,7 @@ namespace Catch {
namespace Catch {
// These numbers are maintained by a script
- Version libraryVersion( 1, 0, 21, "master" );
+ Version libraryVersion( 1, 0, 22, "master" );
}
// #included from: catch_text.hpp