mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Introduce conditional wchar_t (and std::wstring) support
The support is turned on by default but the user might need to be able to turn it off which is now possible by defining CATCH_CONFIG_NO_WCHAR.
This commit is contained in:
		 Tomas Zeman
					Tomas Zeman
				
			
				
					committed by
					
						 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
						parent
						
							865d5f59b4
						
					
				
				
					commit
					352853ed7e
				
			| @@ -130,6 +130,10 @@ | ||||
| #if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) | ||||
| #   define CATCH_CONFIG_POSIX_SIGNALS | ||||
| #endif | ||||
| // This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. | ||||
| #if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) | ||||
| #   define CATCH_CONFIG_WCHAR | ||||
| #endif | ||||
|  | ||||
| #if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) | ||||
| #  define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|  | ||||
| #ifndef __OBJC__ | ||||
|  | ||||
| #if defined(WIN32) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN) | ||||
| #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN) | ||||
| // Standard C/C++ Win32 Unicode wmain entry point | ||||
| extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) { | ||||
| #else | ||||
|   | ||||
| @@ -202,7 +202,7 @@ namespace Catch { | ||||
|         return returnCode; | ||||
|     } | ||||
|  | ||||
| #if defined(WIN32) && defined(UNICODE) | ||||
| #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) | ||||
|     int Session::run( int argc, wchar_t* const argv[] ) { | ||||
|  | ||||
|         char **utf8Argv = new char *[ argc ]; | ||||
|   | ||||
| @@ -30,7 +30,7 @@ namespace Catch { | ||||
|         void useConfigData( ConfigData const& configData ); | ||||
|  | ||||
|         int run( int argc, char* argv[] ); | ||||
|     #if defined(WIN32) && defined(UNICODE) | ||||
|     #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) | ||||
|         int run( int argc, wchar_t* const argv[] ); | ||||
|     #endif | ||||
|         int run(); | ||||
|   | ||||
| @@ -116,6 +116,7 @@ std::string StringMaker<std::string>::convert(const std::string& str) { | ||||
|     return s; | ||||
| } | ||||
|  | ||||
| #ifdef CATCH_CONFIG_WCHAR | ||||
| std::string StringMaker<std::wstring>::convert(const std::wstring& wstr) { | ||||
|     std::string s; | ||||
|     s.reserve(wstr.size()); | ||||
| @@ -124,6 +125,7 @@ std::string StringMaker<std::wstring>::convert(const std::wstring& wstr) { | ||||
|     } | ||||
|     return ::Catch::Detail::stringify(s); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| std::string StringMaker<char const*>::convert(char const* str) { | ||||
|     if (str) { | ||||
| @@ -139,6 +141,7 @@ std::string StringMaker<char*>::convert(char* str) { | ||||
|         return{ "{null string}" }; | ||||
|     } | ||||
| } | ||||
| #ifdef CATCH_CONFIG_WCHAR | ||||
| std::string StringMaker<wchar_t const*>::convert(wchar_t const * str) { | ||||
|     if (str) { | ||||
|         return ::Catch::Detail::stringify(std::wstring{ str }); | ||||
| @@ -153,6 +156,7 @@ std::string StringMaker<wchar_t *>::convert(wchar_t * str) { | ||||
|         return{ "{null string}" }; | ||||
|     } | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| std::string StringMaker<int>::convert(int value) { | ||||
|   | ||||
| @@ -13,6 +13,7 @@ | ||||
| #include <cstddef> | ||||
| #include <type_traits> | ||||
| #include <string> | ||||
| #include "catch_compiler_capabilities.h" | ||||
| #include "catch_stream.h" | ||||
|  | ||||
| #ifdef __OBJC__ | ||||
| @@ -119,10 +120,12 @@ namespace Catch { | ||||
|     struct StringMaker<std::string> { | ||||
|         static std::string convert(const std::string& str); | ||||
|     }; | ||||
| #ifdef CATCH_CONFIG_WCHAR | ||||
|     template<> | ||||
|     struct StringMaker<std::wstring> { | ||||
|         static std::string convert(const std::wstring& wstr); | ||||
|     }; | ||||
| #endif | ||||
|  | ||||
|     template<> | ||||
|     struct StringMaker<char const *> { | ||||
| @@ -132,6 +135,7 @@ namespace Catch { | ||||
|     struct StringMaker<char *> { | ||||
|         static std::string convert(char * str); | ||||
|     }; | ||||
| #ifdef CATCH_CONFIG_WCHAR | ||||
|     template<> | ||||
|     struct StringMaker<wchar_t const *> { | ||||
|         static std::string convert(wchar_t const * str); | ||||
| @@ -140,6 +144,7 @@ namespace Catch { | ||||
|     struct StringMaker<wchar_t *> { | ||||
|         static std::string convert(wchar_t * str); | ||||
|     }; | ||||
| #endif | ||||
|  | ||||
|     template<int SZ> | ||||
|     struct StringMaker<char[SZ]> { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user