mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-25 23:06:10 +01:00
Specialize XML reporter's --list output
This commit is contained in:
parent
85b129c741
commit
be44cfa63b
@ -29,13 +29,6 @@ method will be removed.
|
|||||||
|
|
||||||
## Planned changes
|
## Planned changes
|
||||||
|
|
||||||
### Output format of `--list-*` command line parameters
|
|
||||||
|
|
||||||
The various list operations will be piped through reporters. This means
|
|
||||||
that e.g. XML reporter will write the output as machine-parseable XML,
|
|
||||||
while the Console reporter will keep the current, human-oriented output.
|
|
||||||
|
|
||||||
|
|
||||||
### `CHECKED_IF` and `CHECKED_ELSE`
|
### `CHECKED_IF` and `CHECKED_ELSE`
|
||||||
|
|
||||||
To make the `CHECKED_IF` and `CHECKED_ELSE` macros more useful, they will
|
To make the `CHECKED_IF` and `CHECKED_ELSE` macros more useful, they will
|
||||||
|
@ -37,6 +37,9 @@
|
|||||||
* `--list*` commands no longer have non-zero return code (#1410)
|
* `--list*` commands no longer have non-zero return code (#1410)
|
||||||
* `--list-test-names-only` has been removed (#1190)
|
* `--list-test-names-only` has been removed (#1190)
|
||||||
* You should use verbosity-modifiers for `--list-tests` instead
|
* You should use verbosity-modifiers for `--list-tests` instead
|
||||||
|
* `--list*` commands are now piped through the reporters
|
||||||
|
* The top-level reporter interface provides default implementation that works just as the old one
|
||||||
|
* XmlReporter outputs a machine-parseable XML
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
* The `INFO` macro no longer contains superfluous semicolon (#1456)
|
* The `INFO` macro no longer contains superfluous semicolon (#1456)
|
||||||
|
@ -261,6 +261,11 @@ namespace Catch {
|
|||||||
|
|
||||||
void assertionStarting(AssertionInfo const&) override;
|
void assertionStarting(AssertionInfo const&) override;
|
||||||
bool assertionEnded(AssertionStats const&) override;
|
bool assertionEnded(AssertionStats const&) override;
|
||||||
|
|
||||||
|
// Event listeners should not use the default listing impl
|
||||||
|
void listReporters(std::vector<ReporterDescription> const&, Config const&) override {}
|
||||||
|
void listTests(std::vector<TestCase> const&, Config const&) override {}
|
||||||
|
void listTags(std::vector<TagInfo> const&, Config const&) override {}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
@ -156,4 +156,25 @@ namespace Catch {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListeningReporter::listReporters(std::vector<ReporterDescription> const& descriptions, Config const& config) {
|
||||||
|
for (auto const& listener : m_listeners) {
|
||||||
|
listener->listReporters(descriptions, config);
|
||||||
|
}
|
||||||
|
m_reporter->listReporters(descriptions, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListeningReporter::listTests(std::vector<TestCase> const& tests, Config const& config) {
|
||||||
|
for (auto const& listener : m_listeners) {
|
||||||
|
listener->listTests(tests, config);
|
||||||
|
}
|
||||||
|
m_reporter->listTests(tests, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListeningReporter::listTags(std::vector<TagInfo> const& tags, Config const& config) {
|
||||||
|
for (auto const& listener : m_listeners) {
|
||||||
|
listener->listTags(tags, config);
|
||||||
|
}
|
||||||
|
m_reporter->listTags(tags, config);
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
@ -54,6 +54,11 @@ namespace Catch {
|
|||||||
void skipTest( TestCaseInfo const& testInfo ) override;
|
void skipTest( TestCaseInfo const& testInfo ) override;
|
||||||
bool isMulti() const override;
|
bool isMulti() const override;
|
||||||
|
|
||||||
|
void listReporters(std::vector<ReporterDescription> const& descriptions, Config const& config) override;
|
||||||
|
void listTests(std::vector<TestCase> const& tests, Config const& config) override;
|
||||||
|
void listTags(std::vector<TagInfo> const& tags, Config const& config) override;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "../internal/catch_capture.hpp"
|
#include "../internal/catch_capture.hpp"
|
||||||
#include "../internal/catch_reporter_registrars.hpp"
|
#include "../internal/catch_reporter_registrars.hpp"
|
||||||
|
#include "../internal/catch_list.h"
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
@ -264,6 +265,64 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
|
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
|
||||||
|
|
||||||
|
void XmlReporter::listReporters(std::vector<ReporterDescription> const& descriptions, Config const&) {
|
||||||
|
auto outerTag = m_xml.scopedElement("AvailableReporters");
|
||||||
|
for (auto const& reporter : descriptions) {
|
||||||
|
auto inner = m_xml.scopedElement("Reporter");
|
||||||
|
m_xml.startElement("Name", XmlFormatting::Indent)
|
||||||
|
.writeText(reporter.name, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
m_xml.startElement("Description", XmlFormatting::Indent)
|
||||||
|
.writeText(reporter.description, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XmlReporter::listTests(std::vector<TestCase> const& tests, Config const&) {
|
||||||
|
auto outerTag = m_xml.scopedElement("MatchingTests");
|
||||||
|
for (auto const& test : tests) {
|
||||||
|
auto innerTag = m_xml.scopedElement("TestCase");
|
||||||
|
auto const& testInfo = test.getTestCaseInfo();
|
||||||
|
m_xml.startElement("Name", XmlFormatting::Indent)
|
||||||
|
.writeText(testInfo.name, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
m_xml.startElement("ClassName", XmlFormatting::Indent)
|
||||||
|
.writeText(testInfo.className, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
m_xml.startElement("Description", XmlFormatting::Indent)
|
||||||
|
.writeText(testInfo.description, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
m_xml.startElement("Tags", XmlFormatting::Indent)
|
||||||
|
.writeText(testInfo.tagsAsString(), XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
|
||||||
|
auto sourceTag = m_xml.scopedElement("SourceInfo");
|
||||||
|
m_xml.startElement("File", XmlFormatting::Indent)
|
||||||
|
.writeText(testInfo.lineInfo.file, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
m_xml.startElement("Line", XmlFormatting::Indent)
|
||||||
|
.writeText(std::to_string(testInfo.lineInfo.line), XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XmlReporter::listTags(std::vector<TagInfo> const& tags, Config const&) {
|
||||||
|
auto outerTag = m_xml.scopedElement("TagsFromMatchingTests");
|
||||||
|
for (auto const& tag : tags) {
|
||||||
|
auto innerTag = m_xml.scopedElement("Tag");
|
||||||
|
m_xml.startElement("Count", XmlFormatting::Indent)
|
||||||
|
.writeText(std::to_string(tag.count), XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
auto aliasTag = m_xml.scopedElement("Aliases");
|
||||||
|
for (auto const& alias : tag.spellings) {
|
||||||
|
m_xml.startElement("Alias", XmlFormatting::Indent)
|
||||||
|
.writeText(alias, XmlFormatting::None)
|
||||||
|
.endElement(XmlFormatting::Newline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CATCH_REGISTER_REPORTER( "xml", XmlReporter )
|
CATCH_REGISTER_REPORTER( "xml", XmlReporter )
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
@ -57,6 +57,10 @@ namespace Catch {
|
|||||||
void benchmarkFailed(std::string const&) override;
|
void benchmarkFailed(std::string const&) override;
|
||||||
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
|
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
|
||||||
|
|
||||||
|
void listReporters(std::vector<ReporterDescription> const& descriptions, Config const& config) override;
|
||||||
|
void listTests(std::vector<TestCase> const& tests, Config const& config) override;
|
||||||
|
void listTags(std::vector<TagInfo> const& tags, Config const& config) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Timer m_testCaseTimer;
|
Timer m_testCaseTimer;
|
||||||
XmlWriter m_xml;
|
XmlWriter m_xml;
|
||||||
|
@ -385,16 +385,32 @@ set_tests_properties(List::Tests::Output PROPERTIES
|
|||||||
FAIL_REGULAR_EXPRESSION "Hidden Test"
|
FAIL_REGULAR_EXPRESSION "Hidden Test"
|
||||||
)
|
)
|
||||||
add_test(NAME List::Tests::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high)
|
add_test(NAME List::Tests::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high)
|
||||||
|
add_test(NAME List::Tests::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high -r xml)
|
||||||
|
set_tests_properties(List::Tests::XmlOutput PROPERTIES
|
||||||
|
PASS_REGULAR_EXPRESSION "<Line>[0-9]+</Line>"
|
||||||
|
FAIL_REGULAR_EXPRESSION "[0-9]+ test cases"
|
||||||
|
)
|
||||||
|
|
||||||
add_test(NAME List::Tags::Output COMMAND $<TARGET_FILE:SelfTest> --list-tags)
|
add_test(NAME List::Tags::Output COMMAND $<TARGET_FILE:SelfTest> --list-tags)
|
||||||
set_tests_properties(List::Tags::Output PROPERTIES
|
set_tests_properties(List::Tags::Output PROPERTIES
|
||||||
PASS_REGULAR_EXPRESSION "[0-9]+ tags"
|
PASS_REGULAR_EXPRESSION "[0-9]+ tags"
|
||||||
FAIL_REGULAR_EXPRESSION "\\[\\.\\]")
|
FAIL_REGULAR_EXPRESSION "\\[\\.\\]")
|
||||||
add_test(NAME List::Tags::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tags)
|
add_test(NAME List::Tags::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tags)
|
||||||
|
add_test(NAME List::Tags::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-tags -r xml)
|
||||||
|
set_tests_properties(List::Tags::XmlOutput PROPERTIES
|
||||||
|
PASS_REGULAR_EXPRESSION "<Count>18</Count>"
|
||||||
|
FAIL_REGULAR_EXPRESSION "[0-9]+ tags"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
add_test(NAME List::Reporters::Output COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
add_test(NAME List::Reporters::Output COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
||||||
set_tests_properties(List::Reporters::Output PROPERTIES PASS_REGULAR_EXPRESSION "Available reporters:")
|
set_tests_properties(List::Reporters::Output PROPERTIES PASS_REGULAR_EXPRESSION "Available reporters:")
|
||||||
add_test(NAME List::Reporters::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
add_test(NAME List::Reporters::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
|
||||||
|
add_test(NAME List::Reporters::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-reporters -r xml)
|
||||||
|
set_tests_properties(List::Reporters::XmlOutput PROPERTIES
|
||||||
|
PASS_REGULAR_EXPRESSION "<Name>compact</Name>"
|
||||||
|
FAIL_REGULAR_EXPRESSION "Available reporters:"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user