mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-22 21:36:11 +01:00
Added libidentify support, including option for waiting for keypress on exit (and/ or start)
This commit is contained in:
parent
f06ed856d8
commit
917a51da6b
@ -22,6 +22,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
@ -121,6 +122,13 @@ namespace Catch {
|
|||||||
<< m_cli << std::endl
|
<< m_cli << std::endl
|
||||||
<< "For more detailed usage please see the project docs\n" << std::endl;
|
<< "For more detailed usage please see the project docs\n" << std::endl;
|
||||||
}
|
}
|
||||||
|
void libIdentify() {
|
||||||
|
Catch::cout()
|
||||||
|
<< std::left << std::setw(16) << "description: " << "A Catch test executable\n"
|
||||||
|
<< std::left << std::setw(16) << "category: " << "testframework\n"
|
||||||
|
<< std::left << std::setw(16) << "framework: " << "Catch Test\n"
|
||||||
|
<< std::left << std::setw(16) << "version: " << libraryVersion() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
int applyCommandLine( int argc, char* argv[] ) {
|
int applyCommandLine( int argc, char* argv[] ) {
|
||||||
auto result = m_cli.parse( clara::Args( argc, argv ) );
|
auto result = m_cli.parse( clara::Args( argc, argv ) );
|
||||||
@ -137,6 +145,8 @@ namespace Catch {
|
|||||||
|
|
||||||
if( m_configData.showHelp )
|
if( m_configData.showHelp )
|
||||||
showHelp();
|
showHelp();
|
||||||
|
if( m_configData.libIdentify )
|
||||||
|
libIdentify();
|
||||||
m_config.reset();
|
m_config.reset();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -189,9 +199,36 @@ namespace Catch {
|
|||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int run() {
|
int run() {
|
||||||
if( m_configData.showHelp )
|
if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) {
|
||||||
|
Catch::cout() << "...waiting for enter/ return before starting" << std::endl;
|
||||||
|
std::getchar();
|
||||||
|
}
|
||||||
|
int exitCode = runInternal();
|
||||||
|
if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) {
|
||||||
|
Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl;
|
||||||
|
std::getchar();
|
||||||
|
}
|
||||||
|
return exitCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
clara::Parser const& cli() const {
|
||||||
|
return m_cli;
|
||||||
|
}
|
||||||
|
void cli( clara::Parser const& newParser ) {
|
||||||
|
m_cli = newParser;
|
||||||
|
}
|
||||||
|
ConfigData& configData() {
|
||||||
|
return m_configData;
|
||||||
|
}
|
||||||
|
Config& config() {
|
||||||
|
if( !m_config )
|
||||||
|
m_config = std::make_shared<Config>( m_configData );
|
||||||
|
return *m_config;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
int runInternal() {
|
||||||
|
if( m_configData.showHelp || m_configData.libIdentify )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -215,21 +252,6 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clara::Parser const& cli() const {
|
|
||||||
return m_cli;
|
|
||||||
}
|
|
||||||
void cli( clara::Parser const& newParser ) {
|
|
||||||
m_cli = newParser;
|
|
||||||
}
|
|
||||||
ConfigData& configData() {
|
|
||||||
return m_configData;
|
|
||||||
}
|
|
||||||
Config& config() {
|
|
||||||
if( !m_config )
|
|
||||||
m_config = std::make_shared<Config>( m_configData );
|
|
||||||
return *m_config;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
clara::Parser m_cli;
|
clara::Parser m_cli;
|
||||||
ConfigData m_configData;
|
ConfigData m_configData;
|
||||||
std::shared_ptr<Config> m_config;
|
std::shared_ptr<Config> m_config;
|
||||||
|
@ -71,6 +71,18 @@ namespace Catch {
|
|||||||
return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" );
|
return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" );
|
||||||
return ParserResult::ok( ParseResultType::Matched );
|
return ParserResult::ok( ParseResultType::Matched );
|
||||||
};
|
};
|
||||||
|
auto const setWaitForKeypress = [&]( std::string const& keypress ) {
|
||||||
|
auto keypressLc = toLower( keypress );
|
||||||
|
if( keypressLc == "start" )
|
||||||
|
config.waitForKeypress = WaitForKeypress::BeforeStart;
|
||||||
|
else if( keypressLc == "exit" )
|
||||||
|
config.waitForKeypress = WaitForKeypress::BeforeExit;
|
||||||
|
else if( keypressLc == "both" )
|
||||||
|
config.waitForKeypress = WaitForKeypress::BeforeStartAndExit;
|
||||||
|
else
|
||||||
|
return ParserResult::runtimeError( "keypress argument must be one of: start, exit or both. '" + keypress + "' not recognised" );
|
||||||
|
return ParserResult::ok( ParseResultType::Matched );
|
||||||
|
};
|
||||||
auto const setVerbosity = [&]( std::string const& verbosity ) {
|
auto const setVerbosity = [&]( std::string const& verbosity ) {
|
||||||
auto lcVerbosity = toLower( verbosity );
|
auto lcVerbosity = toLower( verbosity );
|
||||||
if( lcVerbosity == "quiet" )
|
if( lcVerbosity == "quiet" )
|
||||||
@ -153,6 +165,12 @@ namespace Catch {
|
|||||||
+ Opt( setColourUsage, "yes|no" )
|
+ Opt( setColourUsage, "yes|no" )
|
||||||
["--use-colour"]
|
["--use-colour"]
|
||||||
( "should output be colourised" )
|
( "should output be colourised" )
|
||||||
|
+ Opt( config.libIdentify )
|
||||||
|
["--libidentify"]
|
||||||
|
( "report name and version according to libidentify standard" )
|
||||||
|
+ Opt( setWaitForKeypress, "start|exit|both" )
|
||||||
|
["--wait-for-keypress"]
|
||||||
|
( "waits for a keypress before exiting" )
|
||||||
+ Opt( config.benchmarkResolutionMultiple, "multiplier" )
|
+ Opt( config.benchmarkResolutionMultiple, "multiplier" )
|
||||||
["--benchmark-resolution-multiple"]
|
["--benchmark-resolution-multiple"]
|
||||||
( "multiple of clock resolution to run benchmarks" )
|
( "multiple of clock resolution to run benchmarks" )
|
||||||
|
@ -35,6 +35,7 @@ namespace Catch {
|
|||||||
bool showHelp = false;
|
bool showHelp = false;
|
||||||
bool showInvisibles = false;
|
bool showInvisibles = false;
|
||||||
bool filenamesAsTags = false;
|
bool filenamesAsTags = false;
|
||||||
|
bool libIdentify = false;
|
||||||
|
|
||||||
int abortAfter = -1;
|
int abortAfter = -1;
|
||||||
unsigned int rngSeed = 0;
|
unsigned int rngSeed = 0;
|
||||||
@ -45,6 +46,7 @@ namespace Catch {
|
|||||||
ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
|
ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
|
||||||
RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
|
RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
|
||||||
UseColour::YesOrNo useColour = UseColour::Auto;
|
UseColour::YesOrNo useColour = UseColour::Auto;
|
||||||
|
WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
|
||||||
|
|
||||||
std::string outputFilename;
|
std::string outputFilename;
|
||||||
std::string name;
|
std::string name;
|
||||||
|
@ -43,6 +43,12 @@ namespace Catch {
|
|||||||
Yes,
|
Yes,
|
||||||
No
|
No
|
||||||
}; };
|
}; };
|
||||||
|
struct WaitForKeypress { enum When {
|
||||||
|
Never,
|
||||||
|
BeforeStart = 1,
|
||||||
|
BeforeExit = 2,
|
||||||
|
BeforeStartAndExit = BeforeStart | BeforeExit
|
||||||
|
}; };
|
||||||
|
|
||||||
class TestSpec;
|
class TestSpec;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user