Skip to content

Commit

Permalink
Allow CATCH_CONFIG_DEFAULT_REPORTER to be arbitrary reporter spec
Browse files Browse the repository at this point in the history
Previously it could be just plain reporter name, e.g. `xml`, but
it could not specify other reporter options. This change is not
particularly useful for the built-in reporters, as it mostly comes
in handy for combining specific custom reporter with custom arguments,
and the built-in reporters do not have those.
  • Loading branch information
horenmar committed Mar 26, 2024
1 parent c0dfe13 commit ad37211
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
12 changes: 7 additions & 5 deletions src/catch2/catch_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,16 @@ namespace Catch {

// Insert the default reporter if user hasn't asked for a specific one
if ( m_data.reporterSpecifications.empty() ) {
m_data.reporterSpecifications.push_back( {
#if defined( CATCH_CONFIG_DEFAULT_REPORTER )
CATCH_CONFIG_DEFAULT_REPORTER,
const auto default_spec = CATCH_CONFIG_DEFAULT_REPORTER;
#else
"console",
const auto default_spec = "console";
#endif
{}, {}, {}
} );
auto parsed = parseReporterSpec(default_spec);
CATCH_ENFORCE( parsed,
"Cannot parse the provided default reporter spec: '"
<< default_spec << '\'' );
m_data.reporterSpecifications.push_back( std::move( *parsed ) );
}

if ( enableBazelEnvSupport() ) {
Expand Down
16 changes: 11 additions & 5 deletions tests/TestScripts/testConfigureDefaultReporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,20 @@
catch2_source_path = os.path.abspath(sys.argv[1])
build_dir_path = os.path.join(os.path.abspath(sys.argv[2]), 'CMakeConfigTests', 'DefaultReporter')

# TODO: incorporate build_dir_path in the output filename
output_file = f"{build_dir_path}/foo.xml"
configure_and_build(catch2_source_path,
build_dir_path,
[("CATCH_CONFIG_DEFAULT_REPORTER", "xml")])
[("CATCH_CONFIG_DEFAULT_REPORTER", f"xml::out={output_file}")])

stdout, _ = run_and_return_output(os.path.join(build_dir_path, 'tests'), 'SelfTest', ['[approx][custom]'])

xml_tag = '</Catch2TestRun>'
if xml_tag not in stdout:
print("Could not find '{}' in the stdout".format(xml_tag))
print('stdout: "{}"'.format(stdout))
if not os.path.exists(output_file):
print(f'Did not find the {output_file} file')
exit(2)

xml_tag = '</Catch2TestRun>'
with open(output_file, 'r', encoding='utf-8') as file:
if xml_tag not in file.read():
print(f"Could not find '{xml_tag}' in the file")
exit(3)

0 comments on commit ad37211

Please sign in to comment.