Add more tests for various less common tag-related cases

This commit is contained in:
Martin Hořeňovský
2021-12-27 10:04:48 +01:00
parent 45577a1f4c
commit f00b6e2019
13 changed files with 437 additions and 10 deletions

View File

@@ -40,7 +40,7 @@ TEST_CASE( "Tag alias can be registered against tag patterns" ) {
}
// Dummy line info for creating dummy test cases below
constexpr Catch::SourceLineInfo dummySourceLineInfo = CATCH_INTERNAL_LINEINFO;
static constexpr Catch::SourceLineInfo dummySourceLineInfo = CATCH_INTERNAL_LINEINFO;
TEST_CASE("shortened hide tags are split apart", "[tags]") {
using Catch::StringRef;
@@ -66,3 +66,36 @@ TEST_CASE( "empty tags are not allowed", "[tags]" ) {
Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo)
);
}
TEST_CASE( "Tags with spaces and non-alphanumerical characters are accepted",
"[tags]" ) {
using Catch::Tag;
using Catch::Matchers::VectorContains;
Catch::TestCaseInfo testCase(
"",
{ "fake test name", "[tag with spaces][I said \"good day\" sir!]" },
dummySourceLineInfo );
REQUIRE( testCase.tags.size() == 2 );
REQUIRE_THAT( testCase.tags,
VectorContains( Tag( "tag with spaces" ) ) &&
VectorContains( Tag( "I said \"good day\" sir!"_catch_sr ) ) );
}
TEST_CASE( "Test case with identical tags keeps just one", "[tags]" ) {
using Catch::Tag;
Catch::TestCaseInfo testCase(
"",
{ "fake test name", "[TaG1][tAg1][TAG1][tag1]" },
dummySourceLineInfo );
REQUIRE( testCase.tags.size() == 1 );
REQUIRE( testCase.tags[0] == Tag( "tag1" ) );
}
TEST_CASE( "Empty tag is not allowed" ) {
REQUIRE_THROWS( Catch::TestCaseInfo(
"", { "fake test name", "[]" }, dummySourceLineInfo ) );
}

View File

@@ -0,0 +1,55 @@
// Copyright Catch2 Authors
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.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/generators/catch_generators.hpp>
#include <catch2/catch_test_case_info.hpp>
#include <catch2/internal/catch_tag_alias_registry.hpp>
#include <catch2/internal/catch_test_spec_parser.hpp>
namespace {
static constexpr Catch::SourceLineInfo dummySourceLineInfo = CATCH_INTERNAL_LINEINFO;
static Catch::TestSpec parseAndCreateSpec(std::string const& str) {
Catch::TagAliasRegistry registry;
Catch::TestSpecParser parser( registry );
parser.parse( str );
auto spec = parser.testSpec();
REQUIRE( spec.hasFilters() );
REQUIRE( spec.getInvalidSpecs().empty());
return spec;
}
}
TEST_CASE( "Parsing tags with non-alphabetical characters is pass-through",
"[test-spec][test-spec-parser]" ) {
auto const& tagString = GENERATE( as<std::string>{},
"[tag with spaces]",
"[I said \"good day\" sir!]" );
CAPTURE(tagString);
auto spec = parseAndCreateSpec( tagString );
Catch::TestCaseInfo testCase(
"", { "fake test name", tagString }, dummySourceLineInfo );
REQUIRE( spec.matches( testCase ) );
}
TEST_CASE("Parsed tags are matched case insensitive",
"[test-spec][test-spec-parser]") {
auto spec = parseAndCreateSpec( "[CASED tag]" );
Catch::TestCaseInfo testCase(
"", { "fake test name", "[cased TAG]" }, dummySourceLineInfo );
REQUIRE( spec.matches( testCase ) );
}