Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/SelfTest/IntrospectiveTests/CmdLineHelpers.tests.cpp
blob: d38679d135c39c51440a2761aa8a708549730988 (plain)
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" ) );
    }
}