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

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2/internal
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-08-01 16:52:08 +0200
committerMartin Hořeňovský2026-08-07 20:57:42 +0200
commita0eba50e9d56c743aff1de7a50d02a6e01e73cdc (patch)
treefd87a006c59acd9295ec3c2856e29ee6d31ba30e /src/catch2/internal
parent8b08d4d79514f45f7e4ce2a607ac9c94e920d1bb (diff)
downloadcatch3-a0eba50e9d56c743aff1de7a50d02a6e01e73cdc.tar.gz
Make verbosity per-reporter
Diffstat (limited to 'src/catch2/internal')
-rw-r--r--src/catch2/internal/catch_reporter_spec_parser.cpp23
-rw-r--r--src/catch2/internal/catch_reporter_spec_parser.hpp7
2 files changed, 29 insertions, 1 deletions
diff --git a/src/catch2/internal/catch_reporter_spec_parser.cpp b/src/catch2/internal/catch_reporter_spec_parser.cpp
index 2b08758a..3347c082 100644
--- a/src/catch2/internal/catch_reporter_spec_parser.cpp
+++ b/src/catch2/internal/catch_reporter_spec_parser.cpp
@@ -93,6 +93,18 @@ namespace Catch {
return {};
}
}
+
+ Optional<Verbosity> stringToVerbosity( StringRef verbosity ) {
+ if (verbosity == "quiet") { return Verbosity::Quiet;
+ } else if ( verbosity == "normal" ) {
+ return Verbosity::Normal;
+ } else if ( verbosity == "high" ) {
+ return Verbosity::High;
+ } else {
+ return {};
+ }
+ }
+
} // namespace Detail
@@ -100,6 +112,7 @@ namespace Catch {
return lhs.m_name == rhs.m_name &&
lhs.m_outputFileName == rhs.m_outputFileName &&
lhs.m_colourMode == rhs.m_colourMode &&
+ lhs.m_verbosity == rhs.m_verbosity &&
lhs.m_customOptions == rhs.m_customOptions;
}
@@ -111,6 +124,7 @@ namespace Catch {
std::map<std::string, std::string> kvPairs;
Optional<std::string> outputFileName;
Optional<ColourMode> colourMode;
+ Optional<Verbosity> verbosity;
// First part is always reporter name, so we skip it
for ( size_t i = 1; i < parts.size(); ++i ) {
@@ -148,6 +162,12 @@ namespace Catch {
if ( !colourMode ) {
return {};
}
+ } else if ( key == "verbosity" ) {
+ // Duplicated key
+ if ( verbosity ) { return {}; }
+ verbosity = Detail::stringToVerbosity( value );
+ // Parsing failed
+ if ( !verbosity ) { return {}; }
} else {
// Unrecognized option
return {};
@@ -157,6 +177,7 @@ namespace Catch {
return ReporterSpec{ CATCH_MOVE( parts[0] ),
CATCH_MOVE( outputFileName ),
CATCH_MOVE( colourMode ),
+ CATCH_MOVE( verbosity),
CATCH_MOVE( kvPairs ) };
}
@@ -164,10 +185,12 @@ ReporterSpec::ReporterSpec(
std::string name,
Optional<std::string> outputFileName,
Optional<ColourMode> colourMode,
+ Optional<Verbosity> verbosity,
std::map<std::string, std::string> customOptions ):
m_name( CATCH_MOVE( name ) ),
m_outputFileName( CATCH_MOVE( outputFileName ) ),
m_colourMode( CATCH_MOVE( colourMode ) ),
+ m_verbosity( CATCH_MOVE( verbosity ) ),
m_customOptions( CATCH_MOVE( customOptions ) ) {}
} // namespace Catch
diff --git a/src/catch2/internal/catch_reporter_spec_parser.hpp b/src/catch2/internal/catch_reporter_spec_parser.hpp
index 9f447ee2..41102c2c 100644
--- a/src/catch2/internal/catch_reporter_spec_parser.hpp
+++ b/src/catch2/internal/catch_reporter_spec_parser.hpp
@@ -25,6 +25,7 @@ namespace Catch {
std::vector<std::string> splitReporterSpec( StringRef reporterSpec );
Optional<ColourMode> stringToColourMode( StringRef colourMode );
+ Optional<Verbosity> stringToVerbosity( StringRef verbosity );
}
/**
@@ -39,6 +40,7 @@ namespace Catch {
std::string m_name;
Optional<std::string> m_outputFileName;
Optional<ColourMode> m_colourMode;
+ Optional<Verbosity> m_verbosity;
std::map<std::string, std::string> m_customOptions;
friend bool operator==( ReporterSpec const& lhs,
@@ -53,6 +55,7 @@ namespace Catch {
std::string name,
Optional<std::string> outputFileName,
Optional<ColourMode> colourMode,
+ Optional<Verbosity> verbosity,
std::map<std::string, std::string> customOptions );
std::string const& name() const { return m_name; }
@@ -63,13 +66,15 @@ namespace Catch {
Optional<ColourMode> const& colourMode() const { return m_colourMode; }
+ Optional<Verbosity> const& verbosity() const { return m_verbosity; }
+
std::map<std::string, std::string> const& customOptions() const {
return m_customOptions;
}
};
/**
- * Parses provided reporter spec string into
+ * Parses provided reporter spec string into actual `ReporterSpec`
*
* Returns empty optional on errors, e.g.
* * field that is not first and not a key+value pair