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:
Martin Hořeňovský 2022-03-27 23:35:41 +02:00
parent a4e4e82474
commit 1a8a793178
No known key found for this signature in database
GPG key ID: DE48307B8B0D381A
27 changed files with 292 additions and 203 deletions

View file

@ -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
}