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
27 changed files with 292 additions and 203 deletions

View File

@@ -1381,15 +1381,15 @@ CmdLine.tests.cpp:<line number>: passed: config.abortAfter == 1 for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: config.shouldDebugBreak for: true
CmdLine.tests.cpp:<line number>: passed: config.noThrow == true for: true == true
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Auto for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "auto"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Auto for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "yes"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Yes for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "no"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::No for: 2 == 2
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::PlatformDefault for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse( { "test", "--colour-mode", "default" } ) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::PlatformDefault for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--colour-mode", "ansi"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::ANSI for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--colour-mode", "none"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::None for: 3 == 3
CmdLine.tests.cpp:<line number>: passed: !result for: true
CmdLine.tests.cpp:<line number>: passed: result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
CmdLine.tests.cpp:<line number>: passed: result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-samples=200" }) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.benchmarkSamples == 200 for: 200 == 200
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?}

View File

@@ -1379,15 +1379,15 @@ CmdLine.tests.cpp:<line number>: passed: config.abortAfter == 1 for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: config.shouldDebugBreak for: true
CmdLine.tests.cpp:<line number>: passed: config.noThrow == true for: true == true
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Auto for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "auto"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Auto for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "yes"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::Yes for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--use-colour", "no"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.useColour == UseColour::No for: 2 == 2
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::PlatformDefault for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse( { "test", "--colour-mode", "default" } ) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::PlatformDefault for: 0 == 0
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--colour-mode", "ansi"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::ANSI for: 1 == 1
CmdLine.tests.cpp:<line number>: passed: cli.parse({"test", "--colour-mode", "none"}) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.colourMode == ColourMode::None for: 3 == 3
CmdLine.tests.cpp:<line number>: passed: !result for: true
CmdLine.tests.cpp:<line number>: passed: result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
CmdLine.tests.cpp:<line number>: passed: result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-samples=200" }) for: {?}
CmdLine.tests.cpp:<line number>: passed: config.benchmarkSamples == 200 for: 200 == 200
CmdLine.tests.cpp:<line number>: passed: cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?}

View File

@@ -9969,7 +9969,7 @@ with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Auto )
REQUIRE( config.colourMode == ColourMode::PlatformDefault )
with expansion:
0 == 0
@@ -9982,12 +9982,12 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "auto"}) )
CHECK( cli.parse( { "test", "--colour-mode", "default" } ) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Auto )
REQUIRE( config.colourMode == ColourMode::PlatformDefault )
with expansion:
0 == 0
@@ -10000,12 +10000,12 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "yes"}) )
CHECK( cli.parse({"test", "--colour-mode", "ansi"}) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Yes )
REQUIRE( config.colourMode == ColourMode::ANSI )
with expansion:
1 == 1
@@ -10018,14 +10018,14 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "no"}) )
CHECK( cli.parse({"test", "--colour-mode", "none"}) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::No )
REQUIRE( config.colourMode == ColourMode::None )
with expansion:
2 == 2
3 == 3
-------------------------------------------------------------------------------
Process can be configured on command line
@@ -10043,8 +10043,8 @@ with expansion:
CmdLine.tests.cpp:<line number>: PASSED:
CHECK_THAT( result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) )
with expansion:
"colour mode must be one of: auto, yes or no. 'wrong' not recognised"
contains: "colour mode must be one of"
"colour mode must be one of: default, ansi, win32, or none. 'wrong' not
recognised" contains: "colour mode must be one of"
-------------------------------------------------------------------------------
Process can be configured on command line

View File

@@ -9967,7 +9967,7 @@ with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Auto )
REQUIRE( config.colourMode == ColourMode::PlatformDefault )
with expansion:
0 == 0
@@ -9980,12 +9980,12 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "auto"}) )
CHECK( cli.parse( { "test", "--colour-mode", "default" } ) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Auto )
REQUIRE( config.colourMode == ColourMode::PlatformDefault )
with expansion:
0 == 0
@@ -9998,12 +9998,12 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "yes"}) )
CHECK( cli.parse({"test", "--colour-mode", "ansi"}) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::Yes )
REQUIRE( config.colourMode == ColourMode::ANSI )
with expansion:
1 == 1
@@ -10016,14 +10016,14 @@ CmdLine.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
CHECK( cli.parse({"test", "--use-colour", "no"}) )
CHECK( cli.parse({"test", "--colour-mode", "none"}) )
with expansion:
{?}
CmdLine.tests.cpp:<line number>: PASSED:
REQUIRE( config.useColour == UseColour::No )
REQUIRE( config.colourMode == ColourMode::None )
with expansion:
2 == 2
3 == 3
-------------------------------------------------------------------------------
Process can be configured on command line
@@ -10041,8 +10041,8 @@ with expansion:
CmdLine.tests.cpp:<line number>: PASSED:
CHECK_THAT( result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) )
with expansion:
"colour mode must be one of: auto, yes or no. 'wrong' not recognised"
contains: "colour mode must be one of"
"colour mode must be one of: default, ansi, win32, or none. 'wrong' not
recognised" contains: "colour mode must be one of"
-------------------------------------------------------------------------------
Process can be configured on command line

View File

@@ -2601,23 +2601,23 @@ ok {test-number} - config.noThrow == true for: true == true
# Process can be configured on command line
ok {test-number} - cli.parse({"test"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
ok {test-number} - config.colourMode == ColourMode::PlatformDefault for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "auto"}) for: {?}
ok {test-number} - cli.parse( { "test", "--colour-mode", "default" } ) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
ok {test-number} - config.colourMode == ColourMode::PlatformDefault for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "yes"}) for: {?}
ok {test-number} - cli.parse({"test", "--colour-mode", "ansi"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Yes for: 1 == 1
ok {test-number} - config.colourMode == ColourMode::ANSI for: 1 == 1
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "no"}) for: {?}
ok {test-number} - cli.parse({"test", "--colour-mode", "none"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::No for: 2 == 2
ok {test-number} - config.colourMode == ColourMode::None for: 3 == 3
# Process can be configured on command line
ok {test-number} - !result for: true
# Process can be configured on command line
ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
# Process can be configured on command line
ok {test-number} - cli.parse({ "test", "--benchmark-samples=200" }) for: {?}
# Process can be configured on command line

View File

@@ -2599,23 +2599,23 @@ ok {test-number} - config.noThrow == true for: true == true
# Process can be configured on command line
ok {test-number} - cli.parse({"test"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
ok {test-number} - config.colourMode == ColourMode::PlatformDefault for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "auto"}) for: {?}
ok {test-number} - cli.parse( { "test", "--colour-mode", "default" } ) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
ok {test-number} - config.colourMode == ColourMode::PlatformDefault for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "yes"}) for: {?}
ok {test-number} - cli.parse({"test", "--colour-mode", "ansi"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Yes for: 1 == 1
ok {test-number} - config.colourMode == ColourMode::ANSI for: 1 == 1
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "no"}) for: {?}
ok {test-number} - cli.parse({"test", "--colour-mode", "none"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::No for: 2 == 2
ok {test-number} - config.colourMode == ColourMode::None for: 3 == 3
# Process can be configured on command line
ok {test-number} - !result for: true
# Process can be configured on command line
ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
# Process can be configured on command line
ok {test-number} - cli.parse({ "test", "--benchmark-samples=200" }) for: {?}
# Process can be configured on command line

View File

@@ -12165,7 +12165,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Auto
config.colourMode == ColourMode::PlatformDefault
</Original>
<Expanded>
0 == 0
@@ -12179,7 +12179,7 @@ C
<Section name="auto" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "auto"})
cli.parse( { "test", "--colour-mode", "default" } )
</Original>
<Expanded>
{?}
@@ -12187,7 +12187,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Auto
config.colourMode == ColourMode::PlatformDefault
</Original>
<Expanded>
0 == 0
@@ -12201,7 +12201,7 @@ C
<Section name="yes" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "yes"})
cli.parse({"test", "--colour-mode", "ansi"})
</Original>
<Expanded>
{?}
@@ -12209,7 +12209,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Yes
config.colourMode == ColourMode::ANSI
</Original>
<Expanded>
1 == 1
@@ -12223,7 +12223,7 @@ C
<Section name="no" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "no"})
cli.parse({"test", "--colour-mode", "none"})
</Original>
<Expanded>
{?}
@@ -12231,10 +12231,10 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::No
config.colourMode == ColourMode::None
</Original>
<Expanded>
2 == 2
3 == 3
</Expanded>
</Expression>
<OverallResults successes="2" failures="0" expectedFailures="0"/>
@@ -12256,7 +12256,7 @@ C
result.errorMessage(), ContainsSubstring( "colour mode must be one of" )
</Original>
<Expanded>
"colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
"colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
</Expanded>
</Expression>
<OverallResults successes="2" failures="0" expectedFailures="0"/>

View File

@@ -12165,7 +12165,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Auto
config.colourMode == ColourMode::PlatformDefault
</Original>
<Expanded>
0 == 0
@@ -12179,7 +12179,7 @@ C
<Section name="auto" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "auto"})
cli.parse( { "test", "--colour-mode", "default" } )
</Original>
<Expanded>
{?}
@@ -12187,7 +12187,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Auto
config.colourMode == ColourMode::PlatformDefault
</Original>
<Expanded>
0 == 0
@@ -12201,7 +12201,7 @@ C
<Section name="yes" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "yes"})
cli.parse({"test", "--colour-mode", "ansi"})
</Original>
<Expanded>
{?}
@@ -12209,7 +12209,7 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::Yes
config.colourMode == ColourMode::ANSI
</Original>
<Expanded>
1 == 1
@@ -12223,7 +12223,7 @@ C
<Section name="no" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
cli.parse({"test", "--use-colour", "no"})
cli.parse({"test", "--colour-mode", "none"})
</Original>
<Expanded>
{?}
@@ -12231,10 +12231,10 @@ C
</Expression>
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp" >
<Original>
config.useColour == UseColour::No
config.colourMode == ColourMode::None
</Original>
<Expanded>
2 == 2
3 == 3
</Expanded>
</Expression>
<OverallResults successes="2" failures="0" expectedFailures="0"/>
@@ -12256,7 +12256,7 @@ C
result.errorMessage(), ContainsSubstring( "colour mode must be one of" )
</Original>
<Expanded>
"colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
"colour mode must be one of: default, ansi, win32, or none. 'wrong' not recognised" contains: "colour mode must be one of"
</Expanded>
</Expression>
<OverallResults successes="2" failures="0" expectedFailures="0"/>