From e1307016f05dac81f46b202576fc10bab795f29f Mon Sep 17 00:00:00 2001 From: JoeyGrajciar Date: Sat, 13 Oct 2018 19:29:53 +0200 Subject: [PATCH] Session::applyCommandLine overload on wchar_t (#1401) * Session::applyCommandLine overload on wchar_t This allows users on Windows to use Catch::Session::applyCommandLine with wchar_t * arguments of application. With this change Session::run became templated so both char and wchar_t version have the same implementation. --- include/internal/catch_session.cpp | 24 ++++++++---------------- include/internal/catch_session.h | 17 +++++++++++++---- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/include/internal/catch_session.cpp b/include/internal/catch_session.cpp index 5d028ed2..21877c99 100644 --- a/include/internal/catch_session.cpp +++ b/include/internal/catch_session.cpp @@ -185,22 +185,8 @@ namespace Catch { return 0; } - void Session::useConfigData( ConfigData const& configData ) { - m_configData = configData; - m_config.reset(); - } - - int Session::run( int argc, char* argv[] ) { - if( m_startupExceptions ) - return 1; - int returnCode = applyCommandLine( argc, argv ); - if( returnCode == 0 ) - returnCode = run(); - return returnCode; - } - #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) - int Session::run( int argc, wchar_t* const argv[] ) { + int Session::applyCommandLine( int argc, wchar_t const * const * argv ) { char **utf8Argv = new char *[ argc ]; @@ -212,7 +198,7 @@ namespace Catch { WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, NULL, NULL ); } - int returnCode = run( argc, utf8Argv ); + int returnCode = applyCommandLine( argc, utf8Argv ); for ( int i = 0; i < argc; ++i ) delete [] utf8Argv[ i ]; @@ -222,6 +208,12 @@ namespace Catch { return returnCode; } #endif + + void Session::useConfigData( ConfigData const& configData ) { + m_configData = configData; + m_config.reset(); + } + int Session::run() { if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) { Catch::cout() << "...waiting for enter/ return before starting" << std::endl; diff --git a/include/internal/catch_session.h b/include/internal/catch_session.h index eb8013cd..af820da4 100644 --- a/include/internal/catch_session.h +++ b/include/internal/catch_session.h @@ -26,13 +26,22 @@ namespace Catch { void libIdentify(); int applyCommandLine( int argc, char const * const * argv ); + #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) + int applyCommandLine( int argc, wchar_t const * const * argv ); + #endif void useConfigData( ConfigData const& configData ); - int run( int argc, char* argv[] ); - #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) - int run( int argc, wchar_t* const argv[] ); - #endif + template + int run(int argc, CharT const * const argv[]) { + if (m_startupExceptions) + return 1; + int returnCode = applyCommandLine(argc, argv); + if (returnCode == 0) + returnCode = run(); + return returnCode; + } + int run(); clara::Parser const& cli() const;