1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
// Copyright Catch2 Authors
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at
// https://www.boost.org/LICENSE_1_0.txt)
// SPDX-License-Identifier: BSL-1.0
#include <catch2/catch_test_macros.hpp>
#include <catch2/internal/catch_reporter_spec_parser.hpp>
#include <catch2/matchers/catch_matchers_vector.hpp>
#include <catch2/interfaces/catch_interfaces_config.hpp>
TEST_CASE("Reporter spec splitting", "[reporter-spec][cli][approvals]") {
using Catch::Detail::splitReporterSpec;
using Catch::Matchers::Equals;
using namespace std::string_literals;
SECTION("Various edge cases") {
REQUIRE_THAT( splitReporterSpec( "" ),
Equals( std::vector<std::string>{ ""s } ) );
REQUIRE_THAT( splitReporterSpec( "::" ),
Equals( std::vector<std::string>{ "", "" } ) );
REQUIRE_THAT( splitReporterSpec( "::rep" ),
Equals( std::vector<std::string>{ "", "rep" } ) );
REQUIRE_THAT( splitReporterSpec( "rep::" ),
Equals( std::vector<std::string>{ "rep", "" } ) );
}
SECTION("Validish specs") {
REQUIRE_THAT( splitReporterSpec( "newReporter" ),
Equals( std::vector<std::string>{ "newReporter"s } ) );
REQUIRE_THAT(
splitReporterSpec( "foo-reporter::key1=value1::key2=value with "
"space::key with space=some-value" ),
Equals(
std::vector<std::string>{ "foo-reporter"s,
"key1=value1"s,
"key2=value with space"s,
"key with space=some-value"s } ) );
REQUIRE_THAT(
splitReporterSpec( "spaced reporter name::key:key=value:value" ),
Equals( std::vector<std::string>{ "spaced reporter name"s,
"key:key=value:value"s } ) );
}
}
TEST_CASE( "Parsing colour mode", "[cli][colour][approvals]" ) {
using Catch::Detail::stringToColourMode;
using Catch::ColourMode;
SECTION("Valid strings") {
REQUIRE( stringToColourMode( "none" ) == ColourMode::None );
REQUIRE( stringToColourMode( "ansi" ) == ColourMode::ANSI );
REQUIRE( stringToColourMode( "win32" ) == ColourMode::Win32 );
REQUIRE( stringToColourMode( "default" ) ==
ColourMode::PlatformDefault );
}
SECTION("Wrong strings") {
REQUIRE_FALSE( stringToColourMode( "NONE" ) );
REQUIRE_FALSE( stringToColourMode( "-" ) );
REQUIRE_FALSE( stringToColourMode( "asdbjsdb kasbd" ) );
}
}
TEST_CASE( "Parsing verbosity", "[cli][colour][approvals]" ) {
using Catch::Detail::stringToVerbosity;
using Catch::Verbosity;
SECTION( "Valid strings" ) {
REQUIRE( stringToVerbosity( "quiet" ) == Verbosity::Quiet );
REQUIRE( stringToVerbosity( "normal" ) == Verbosity::Normal );
REQUIRE( stringToVerbosity( "high" ) == Verbosity::High );
}
SECTION( "Wrong strings" ) {
REQUIRE_FALSE( stringToVerbosity( "QUIET" ) );
REQUIRE_FALSE( stringToVerbosity( "medium" ) );
REQUIRE_FALSE( stringToVerbosity( "vvv" ) );
}
}
TEST_CASE("Parsing reporter specs", "[cli][reporter-spec][approvals]") {
using Catch::parseReporterSpec;
using Catch::ReporterSpec;
using namespace std::string_literals;
SECTION( "Correct specs" ) {
REQUIRE( parseReporterSpec( "someReporter" ) ==
ReporterSpec( "someReporter"s, {}, {}, {}, {} ) );
REQUIRE( parseReporterSpec( "otherReporter::Xk=v::out=c:\\blah" ) ==
ReporterSpec(
"otherReporter"s, "c:\\blah"s, {}, {}, { { "Xk"s, "v"s } } ) );
REQUIRE( parseReporterSpec( "diffReporter::Xk1=v1::Xk2==v2" ) ==
ReporterSpec( "diffReporter",
{},
{},
{},
{ { "Xk1"s, "v1"s }, { "Xk2"s, "=v2"s } } ) );
REQUIRE( parseReporterSpec(
"Foo:bar:reporter::colour-mode=ansi::Xk 1=v 1::Xk2=v:3" ) ==
ReporterSpec( "Foo:bar:reporter",
{},
Catch::ColourMode::ANSI,
{},
{ { "Xk 1"s, "v 1"s }, { "Xk2"s, "v:3"s } } ) );
REQUIRE(
parseReporterSpec( "my:reporter::X1=V1::verbosity=high::X2=V2" ) ==
ReporterSpec( "my:reporter",
{},
{},
Catch::Verbosity::High,
{ { "X1"s, "V1"s }, { "X2"s, "V2"s } } ) );
}
SECTION( "Bad specs" ) {
REQUIRE_FALSE( parseReporterSpec( "::" ) );
// Unknown Catch2 arg (should be "out")
REQUIRE_FALSE( parseReporterSpec( "reporter::output=filename" ) );
// Wrong colour spec
REQUIRE_FALSE( parseReporterSpec( "reporter::colour-mode=custom" ) );
// Duplicated colour spec
REQUIRE_FALSE( parseReporterSpec( "reporter::colour-mode=ansi::colour-mode=ansi" ) );
// Duplicated out arg
REQUIRE_FALSE( parseReporterSpec( "reporter::out=f.txt::out=z.txt" ) );
// Duplicated custom arg
REQUIRE_FALSE( parseReporterSpec( "reporter::Xa=foo::Xa=bar" ) );
// Empty key
REQUIRE_FALSE( parseReporterSpec( "reporter::X=foo" ) );
REQUIRE_FALSE( parseReporterSpec( "reporter::=foo" ) );
// Empty value
REQUIRE_FALSE( parseReporterSpec( "reporter::Xa=" ) );
// non-key value later field
REQUIRE_FALSE( parseReporterSpec( "reporter::Xab" ) );
// Invalid verbosity value
REQUIRE_FALSE( parseReporterSpec( "reporter::verbosity=medium" ) );
// Duplicated verbosity
REQUIRE_FALSE( parseReporterSpec( "reporter::verbosity=high::X1=X2::verbosity=high" ) );
}
}
|