mirror of
https://github.com/catchorg/Catch2.git
synced 2025-08-03 05:45:39 +02:00
Make reporter lookup case insensitive, registration case preserving
Previously registration was case preserving, but lookup used lowercased reporter name, so a reporter whose name contained upper case character could not be requested by the user.
This commit is contained in:
@@ -76,8 +76,21 @@ namespace Catch {
|
||||
|
||||
|
||||
#include <catch2/interfaces/catch_interfaces_reporter_registry.hpp>
|
||||
#include <catch2/internal/catch_string_manip.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace Catch {
|
||||
|
||||
IReporterRegistry::~IReporterRegistry() = default;
|
||||
bool IReporterRegistry::CaseInsensitiveCmp::operator()(std::string const& lhs, std::string const& rhs) const {
|
||||
return std::lexicographical_compare(lhs.begin(), lhs.end(),
|
||||
rhs.begin(), rhs.end(),
|
||||
[](char l, char r) {
|
||||
return toLower(l) < toLower(r);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -24,7 +24,11 @@ namespace Catch {
|
||||
using IReporterFactoryPtr = Detail::unique_ptr<IReporterFactory>;
|
||||
|
||||
struct IReporterRegistry {
|
||||
using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
|
||||
struct CaseInsensitiveCmp {
|
||||
bool operator()(std::string const& lhs, std::string const& rhs) const;
|
||||
};
|
||||
|
||||
using FactoryMap = std::map<std::string, IReporterFactoryPtr, CaseInsensitiveCmp>;
|
||||
using Listeners = std::vector<IReporterFactoryPtr>;
|
||||
|
||||
virtual ~IReporterRegistry(); // = default
|
||||
|
@@ -140,11 +140,10 @@ namespace Catch {
|
||||
auto const setReporter = [&]( std::string const& reporter ) {
|
||||
IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
|
||||
|
||||
auto lcReporter = toLower( reporter );
|
||||
auto result = factories.find( lcReporter );
|
||||
auto result = factories.find( reporter );
|
||||
|
||||
if( factories.end() != result )
|
||||
config.reporterName = lcReporter;
|
||||
config.reporterName = reporter;
|
||||
else
|
||||
return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" );
|
||||
return ParserResult::ok( ParseResultType::Matched );
|
||||
|
Reference in New Issue
Block a user