mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 04:07:10 +01:00 
			
		
		
		
	Added ability to show “invisibles” in strings (just tabs and newline chars, for now).
This commit is contained in:
		| @@ -84,6 +84,10 @@ namespace Catch { | ||||
|             .describe( "skip exception tests" ) | ||||
|             .bind( &ConfigData::noThrow ); | ||||
|  | ||||
|         cli["-i"]["--invisibles"] | ||||
|             .describe( "show invisibles (tabs, newlines)" ) | ||||
|             .bind( &ConfigData::showInvisibles ); | ||||
|  | ||||
|         cli["-o"]["--out"] | ||||
|             .describe( "output filename" ) | ||||
|             .bind( &ConfigData::outputFilename, "filename" ); | ||||
|   | ||||
| @@ -35,6 +35,7 @@ namespace Catch { | ||||
|             shouldDebugBreak( false ), | ||||
|             noThrow( false ), | ||||
|             showHelp( false ), | ||||
|             showInvisibles( false ), | ||||
|             abortAfter( -1 ), | ||||
|             verbosity( Verbosity::Normal ), | ||||
|             warnings( WarnAbout::Nothing ), | ||||
| @@ -50,6 +51,7 @@ namespace Catch { | ||||
|         bool shouldDebugBreak; | ||||
|         bool noThrow; | ||||
|         bool showHelp; | ||||
|         bool showInvisibles; | ||||
|  | ||||
|         int abortAfter; | ||||
|  | ||||
| @@ -154,6 +156,7 @@ namespace Catch { | ||||
|         } | ||||
|  | ||||
|         bool showHelp() const { return m_data.showHelp; } | ||||
|         bool showInvisibles() const { return m_data.showInvisibles; } | ||||
|  | ||||
|         // IConfig interface | ||||
|         virtual bool allowThrows() const        { return !m_data.noThrow; } | ||||
|   | ||||
| @@ -46,6 +46,7 @@ namespace Catch { | ||||
|         virtual bool shouldDebugBreak() const = 0; | ||||
|         virtual bool warnAboutMissingAssertions() const = 0; | ||||
|         virtual int abortAfter() const = 0; | ||||
|         virtual bool showInvisibles() const = 0; | ||||
|         virtual ShowDurations::OrNot showDurations() const = 0; | ||||
|         virtual std::vector<TestCaseFilters> const& filters() const = 0; | ||||
|     }; | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
|  | ||||
| #include "catch_common.h" | ||||
| #include "catch_sfinae.hpp" | ||||
| #include "catch_interfaces_config.h" | ||||
|  | ||||
| #include <sstream> | ||||
| #include <iomanip> | ||||
| @@ -180,16 +181,31 @@ std::string toString( T const& value ) { | ||||
| // Built in overloads | ||||
|  | ||||
| inline std::string toString( std::string const& value ) { | ||||
|     return "\"" + value + "\""; | ||||
|     std::string s = value; | ||||
|     if( getCurrentContext().getConfig()->showInvisibles() ) { | ||||
|         for(size_t i = 0; i < s.size(); ++i ) { | ||||
|             std::string subs; | ||||
|             switch( s[i] ) { | ||||
|             case '\n': subs = "\\n"; break; | ||||
|             case '\t': subs = "\\t"; break; | ||||
|             default: break; | ||||
|             } | ||||
|             if( !subs.empty() ) { | ||||
|                 s = s.substr( 0, i ) + subs + s.substr( i+1 ); | ||||
|                 ++i; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return "\"" + s + "\""; | ||||
| } | ||||
|  | ||||
| inline std::string toString( std::wstring const& value ) { | ||||
|     std::ostringstream oss; | ||||
|     oss << "\""; | ||||
|  | ||||
|     std::string s; | ||||
|     s.reserve( value.size() ); | ||||
|     for(size_t i = 0; i < value.size(); ++i ) | ||||
|         oss << static_cast<char>( value[i] <= 0xff ? value[i] : '?'); | ||||
|     oss << "\""; | ||||
|     return oss.str(); | ||||
|         s += value[i] <= 0xff ? static_cast<char>( value[i] ) : '?'; | ||||
|     return toString( s ); | ||||
| } | ||||
|  | ||||
| inline std::string toString( const char* const value ) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash