mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Refactor colour handling to prepare for per-reporter colour modes
This includes always compiling the ANSI and None colour implementations, as they don't need to touch any platform specific APIs, and removing their respective compile-time configuration options. Because the Win32 colour implementation requires Win32-specific APIs, it is still hidden behind a compile-time toggle, `CATCH_CONFIG_COLOUR_WIN32` (renamed from `..._COLOUR_WINDOWS`). The commandline options for colours were also changed. The option now uses different name, and allows to select between different implementations, rather than changing whether the compiled-in colour implementation is used through "yes/no/default" options.
This commit is contained in:
		| @@ -15,6 +15,8 @@ | ||||
| #include <catch2/catch_test_case_info.hpp> | ||||
| #include <catch2/internal/catch_commandline.hpp> | ||||
| #include <catch2/generators/catch_generators.hpp> | ||||
| #include <catch2/internal/catch_compiler_capabilities.hpp> | ||||
|  | ||||
|  | ||||
| namespace { | ||||
|     auto fakeTestCase(const char* name, const char* desc = "") { return Catch::makeTestCaseInfo("", { name, desc }, CATCH_INTERNAL_LINEINFO); } | ||||
| @@ -556,34 +558,34 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" | ||||
|  | ||||
|     SECTION( "use-colour") { | ||||
|  | ||||
|         using Catch::UseColour; | ||||
|         using Catch::ColourMode; | ||||
|  | ||||
|         SECTION( "without option" ) { | ||||
|             CHECK(cli.parse({"test"})); | ||||
|  | ||||
|             REQUIRE( config.useColour == UseColour::Auto ); | ||||
|             REQUIRE( config.colourMode == ColourMode::PlatformDefault ); | ||||
|         } | ||||
|  | ||||
|         SECTION( "auto" ) { | ||||
|             CHECK(cli.parse({"test", "--use-colour", "auto"})); | ||||
|             CHECK( cli.parse( { "test", "--colour-mode", "default" } ) ); | ||||
|  | ||||
|             REQUIRE( config.useColour == UseColour::Auto ); | ||||
|             REQUIRE( config.colourMode == ColourMode::PlatformDefault ); | ||||
|         } | ||||
|  | ||||
|         SECTION( "yes" ) { | ||||
|             CHECK(cli.parse({"test", "--use-colour", "yes"})); | ||||
|             CHECK(cli.parse({"test", "--colour-mode", "ansi"})); | ||||
|  | ||||
|             REQUIRE( config.useColour == UseColour::Yes ); | ||||
|             REQUIRE( config.colourMode == ColourMode::ANSI ); | ||||
|         } | ||||
|  | ||||
|         SECTION( "no" ) { | ||||
|             CHECK(cli.parse({"test", "--use-colour", "no"})); | ||||
|             CHECK(cli.parse({"test", "--colour-mode", "none"})); | ||||
|  | ||||
|             REQUIRE( config.useColour == UseColour::No ); | ||||
|             REQUIRE( config.colourMode == ColourMode::None ); | ||||
|         } | ||||
|  | ||||
|         SECTION( "error" ) { | ||||
|             auto result = cli.parse({"test", "--use-colour", "wrong"}); | ||||
|             auto result = cli.parse({"test", "--colour-mode", "wrong"}); | ||||
|             CHECK( !result ); | ||||
|             CHECK_THAT( result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) ); | ||||
|         } | ||||
| @@ -712,3 +714,17 @@ TEST_CASE("Various suspicious reporter specs are rejected", | ||||
|     auto result = cli.parse( { "test", "--reporter", spec } ); | ||||
|     REQUIRE_FALSE( result ); | ||||
| } | ||||
|  | ||||
| TEST_CASE("Win32 colour implementation is compile-time optional", | ||||
|           "[approvals][cli][colours]") { | ||||
|     Catch::ConfigData config; | ||||
|     auto cli = Catch::makeCommandLineParser( config ); | ||||
|  | ||||
|     auto result = cli.parse( { "test", "--colour-mode", "win32" } ); | ||||
|  | ||||
| #if defined( CATCH_CONFIG_COLOUR_WIN32 ) | ||||
|     REQUIRE( result ); | ||||
| #else | ||||
|     REQUIRE_FALSE( result ); | ||||
| #endif | ||||
| } | ||||
|   | ||||
| @@ -64,10 +64,7 @@ TEST_CASE( "The default listing implementation write to provided stream", | ||||
|             { "fake test name"_catch_sr, "[fakeTestTag]"_catch_sr }, | ||||
|             { "fake-file.cpp", 123456789 } }; | ||||
|         std::vector<Catch::TestCaseHandle> tests({ {&fakeInfo, nullptr} }); | ||||
|         Catch::ConfigData cd; | ||||
|         cd.useColour = Catch::UseColour::No; | ||||
|         Catch::Config conf(cd); | ||||
|         auto colour = Catch::makeColourImpl( &conf, &sstream); | ||||
|         auto colour = Catch::makeColourImpl( Catch::ColourMode::None, &sstream); | ||||
|         Catch::defaultListTests(sstream.stream(), colour.get(), tests, false, Catch::Verbosity::Normal); | ||||
|  | ||||
|         auto listingString = sstream.str(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský