Improved error handling for --abort as per #108

This commit is contained in:
Phil Nash 2012-07-28 20:22:40 +01:00
parent 6f220863cf
commit b084562b3b
3 changed files with 16 additions and 3 deletions

View File

@ -153,7 +153,7 @@ namespace Catch {
cmd.raiseError( "Expected a name" ); cmd.raiseError( "Expected a name" );
config.name = cmd[0]; config.name = cmd[0];
} }
if( Command cmd = parser.find( "-a", "--abort" ) ) { if( Command cmd = parser.find( "-a", "--abort" ) ) {
if( cmd.argsCount() > 1 ) if( cmd.argsCount() > 1 )
cmd.raiseError( "Only accepts 0-1 arguments" ); cmd.raiseError( "Only accepts 0-1 arguments" );
@ -162,6 +162,8 @@ namespace Catch {
std::stringstream ss; std::stringstream ss;
ss << cmd[0]; ss << cmd[0];
ss >> threshold; ss >> threshold;
if( ss.fail() || threshold <= 0 )
cmd.raiseError( "threshold must be a number greater than zero" );
} }
config.cutoff = threshold; config.cutoff = threshold;
} }

View File

@ -68,6 +68,7 @@ template<size_t size>
std::string parseIntoConfigAndReturnError( const char * (&argv)[size], Catch::ConfigData& config ) { std::string parseIntoConfigAndReturnError( const char * (&argv)[size], Catch::ConfigData& config ) {
try { try {
Catch::parseIntoConfig( Catch::CommandParser( size, argv ), config ); Catch::parseIntoConfig( Catch::CommandParser( size, argv ), config );
FAIL( "expected exception" );
} }
catch( std::exception& ex ) { catch( std::exception& ex ) {
return ex.what(); return ex.what();
@ -179,7 +180,15 @@ TEST_CASE( "selftest/parser/2", "ConfigData" ) {
REQUIRE( config.cutoff == 2 ); REQUIRE( config.cutoff == 2 );
} }
SECTION( "-a/error", "cutoff only takes one argument" ) { SECTION( "-a/error/0", "" ) {
const char* argv[] = { "test", "-a", "0" };
REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) );
}
SECTION( "-a/error/non numeric", "" ) {
const char* argv[] = { "test", "-a", "oops" };
REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) );
}
SECTION( "-a/error/two args", "cutoff only takes one argument" ) {
const char* argv[] = { "test", "-a", "1", "2" }; const char* argv[] = { "test", "-a", "1", "2" };
REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "accepts" ) ); REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "accepts" ) );
} }

View File

@ -1,5 +1,5 @@
/* /*
* Generated: 2012-07-23 08:24:23.434402 * Generated: 2012-07-28 20:22:25.519628
* ---------------------------------------------------------- * ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly * This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
@ -3650,6 +3650,8 @@ namespace Catch {
std::stringstream ss; std::stringstream ss;
ss << cmd[0]; ss << cmd[0];
ss >> threshold; ss >> threshold;
if( ss.fail() || threshold <= 0 )
cmd.raiseError( "threshold must be a number greater than zero" );
} }
config.cutoff = threshold; config.cutoff = threshold;
} }