Commit 2134e3fd authored by Abseil Team's avatar Abseil Team Committed by Andy Getz
Browse files

Googletest export

Adds ISO8601 timestamps to XML output and RFC3339 timestamps to JSON output.

Adds timestamps to testsuites, testsuite and testcases structured JSON/XML output for better reporting how/where time is spent on tests.

PiperOrigin-RevId: 260039817
parent 373ed74a
...@@ -588,6 +588,10 @@ class GTEST_API_ TestResult { ...@@ -588,6 +588,10 @@ class GTEST_API_ TestResult {
// Returns the elapsed time, in milliseconds. // Returns the elapsed time, in milliseconds.
TimeInMillis elapsed_time() const { return elapsed_time_; } TimeInMillis elapsed_time() const { return elapsed_time_; }
// Gets the time of the test case start, in ms from the start of the
// UNIX epoch.
TimeInMillis start_timestamp() const { return start_timestamp_; }
// Returns the i-th test part result among all the results. i can range from 0 // Returns the i-th test part result among all the results. i can range from 0
// to total_part_count() - 1. If i is not in that range, aborts the program. // to total_part_count() - 1. If i is not in that range, aborts the program.
const TestPartResult& GetTestPartResult(int i) const; const TestPartResult& GetTestPartResult(int i) const;
...@@ -618,6 +622,9 @@ class GTEST_API_ TestResult { ...@@ -618,6 +622,9 @@ class GTEST_API_ TestResult {
return test_properties_; return test_properties_;
} }
// Sets the start time.
void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; }
// Sets the elapsed time. // Sets the elapsed time.
void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
...@@ -661,6 +668,8 @@ class GTEST_API_ TestResult { ...@@ -661,6 +668,8 @@ class GTEST_API_ TestResult {
std::vector<TestProperty> test_properties_; std::vector<TestProperty> test_properties_;
// Running count of death tests. // Running count of death tests.
int death_test_count_; int death_test_count_;
// The start time, in milliseconds since UNIX Epoch.
TimeInMillis start_timestamp_;
// The elapsed time, in milliseconds. // The elapsed time, in milliseconds.
TimeInMillis elapsed_time_; TimeInMillis elapsed_time_;
...@@ -881,6 +890,10 @@ class GTEST_API_ TestSuite { ...@@ -881,6 +890,10 @@ class GTEST_API_ TestSuite {
// Returns the elapsed time, in milliseconds. // Returns the elapsed time, in milliseconds.
TimeInMillis elapsed_time() const { return elapsed_time_; } TimeInMillis elapsed_time() const { return elapsed_time_; }
// Gets the time of the test suite start, in ms from the start of the
// UNIX epoch.
TimeInMillis start_timestamp() const { return start_timestamp_; }
// Returns the i-th test among all the tests. i can range from 0 to // Returns the i-th test among all the tests. i can range from 0 to
// total_test_count() - 1. If i is not in that range, returns NULL. // total_test_count() - 1. If i is not in that range, returns NULL.
const TestInfo* GetTestInfo(int i) const; const TestInfo* GetTestInfo(int i) const;
...@@ -999,6 +1012,8 @@ class GTEST_API_ TestSuite { ...@@ -999,6 +1012,8 @@ class GTEST_API_ TestSuite {
internal::TearDownTestSuiteFunc tear_down_tc_; internal::TearDownTestSuiteFunc tear_down_tc_;
// True iff any test in this test suite should run. // True iff any test in this test suite should run.
bool should_run_; bool should_run_;
// The start time, in milliseconds since UNIX Epoch.
TimeInMillis start_timestamp_;
// Elapsed time, in milliseconds. // Elapsed time, in milliseconds.
TimeInMillis elapsed_time_; TimeInMillis elapsed_time_;
// Holds test properties recorded during execution of SetUpTestSuite and // Holds test properties recorded during execution of SetUpTestSuite and
......
...@@ -2032,9 +2032,7 @@ std::string AppendUserMessage(const std::string& gtest_msg, ...@@ -2032,9 +2032,7 @@ std::string AppendUserMessage(const std::string& gtest_msg,
// Creates an empty TestResult. // Creates an empty TestResult.
TestResult::TestResult() TestResult::TestResult()
: death_test_count_(0), : death_test_count_(0), start_timestamp_(0), elapsed_time_(0) {}
elapsed_time_(0) {
}
// D'tor. // D'tor.
TestResult::~TestResult() { TestResult::~TestResult() {
...@@ -2103,13 +2101,7 @@ static const char* const kReservedTestSuitesAttributes[] = { ...@@ -2103,13 +2101,7 @@ static const char* const kReservedTestSuitesAttributes[] = {
// The list of reserved attributes used in the <testsuite> element of XML // The list of reserved attributes used in the <testsuite> element of XML
// output. // output.
static const char* const kReservedTestSuiteAttributes[] = { static const char* const kReservedTestSuiteAttributes[] = {
"disabled", "disabled", "errors", "failures", "name", "tests", "time", "timestamp"};
"errors",
"failures",
"name",
"tests",
"time"
};
// The list of reserved attributes used in the <testcase> element of XML output. // The list of reserved attributes used in the <testcase> element of XML output.
static const char* const kReservedTestCaseAttributes[] = { static const char* const kReservedTestCaseAttributes[] = {
...@@ -2117,10 +2109,10 @@ static const char* const kReservedTestCaseAttributes[] = { ...@@ -2117,10 +2109,10 @@ static const char* const kReservedTestCaseAttributes[] = {
"value_param", "file", "line"}; "value_param", "file", "line"};
// Use a slightly different set for allowed output to ensure existing tests can // Use a slightly different set for allowed output to ensure existing tests can
// still RecordProperty("result") // still RecordProperty("result") or "RecordProperty(timestamp")
static const char* const kReservedOutputTestCaseAttributes[] = { static const char* const kReservedOutputTestCaseAttributes[] = {
"classname", "name", "status", "time", "type_param", "classname", "name", "status", "time", "type_param",
"value_param", "file", "line", "result"}; "value_param", "file", "line", "result", "timestamp"};
template <int kSize> template <int kSize>
std::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) { std::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) {
...@@ -2705,6 +2697,7 @@ void TestInfo::Run() { ...@@ -2705,6 +2697,7 @@ void TestInfo::Run() {
test, &Test::DeleteSelf_, "the test fixture's destructor"); test, &Test::DeleteSelf_, "the test fixture's destructor");
} }
result_.set_start_timestamp(start);
result_.set_elapsed_time(internal::GetTimeInMillis() - start); result_.set_elapsed_time(internal::GetTimeInMillis() - start);
// Notifies the unit test event listener that a test has just finished. // Notifies the unit test event listener that a test has just finished.
...@@ -2774,6 +2767,7 @@ TestSuite::TestSuite(const char* a_name, const char* a_type_param, ...@@ -2774,6 +2767,7 @@ TestSuite::TestSuite(const char* a_name, const char* a_type_param,
set_up_tc_(set_up_tc), set_up_tc_(set_up_tc),
tear_down_tc_(tear_down_tc), tear_down_tc_(tear_down_tc),
should_run_(false), should_run_(false),
start_timestamp_(0),
elapsed_time_(0) {} elapsed_time_(0) {}
// Destructor of TestSuite. // Destructor of TestSuite.
...@@ -2823,11 +2817,11 @@ void TestSuite::Run() { ...@@ -2823,11 +2817,11 @@ void TestSuite::Run() {
internal::HandleExceptionsInMethodIfSupported( internal::HandleExceptionsInMethodIfSupported(
this, &TestSuite::RunSetUpTestSuite, "SetUpTestSuite()"); this, &TestSuite::RunSetUpTestSuite, "SetUpTestSuite()");
const internal::TimeInMillis start = internal::GetTimeInMillis(); start_timestamp_ = internal::GetTimeInMillis();
for (int i = 0; i < total_test_count(); i++) { for (int i = 0; i < total_test_count(); i++) {
GetMutableTestInfo(i)->Run(); GetMutableTestInfo(i)->Run();
} }
elapsed_time_ = internal::GetTimeInMillis() - start; elapsed_time_ = internal::GetTimeInMillis() - start_timestamp_;
impl->os_stack_trace_getter()->UponLeavingGTest(); impl->os_stack_trace_getter()->UponLeavingGTest();
internal::HandleExceptionsInMethodIfSupported( internal::HandleExceptionsInMethodIfSupported(
...@@ -3788,6 +3782,9 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, ...@@ -3788,6 +3782,9 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
: "suppressed"); : "suppressed");
OutputXmlAttribute(stream, kTestsuite, "time", OutputXmlAttribute(stream, kTestsuite, "time",
FormatTimeInMillisAsSeconds(result.elapsed_time())); FormatTimeInMillisAsSeconds(result.elapsed_time()));
OutputXmlAttribute(
stream, kTestsuite, "timestamp",
FormatEpochTimeInMillisAsIso8601(result.start_timestamp()));
OutputXmlAttribute(stream, kTestsuite, "classname", test_suite_name); OutputXmlAttribute(stream, kTestsuite, "classname", test_suite_name);
int failures = 0; int failures = 0;
...@@ -3838,6 +3835,9 @@ void XmlUnitTestResultPrinter::PrintXmlTestSuite(std::ostream* stream, ...@@ -3838,6 +3835,9 @@ void XmlUnitTestResultPrinter::PrintXmlTestSuite(std::ostream* stream,
OutputXmlAttribute(stream, kTestsuite, "errors", "0"); OutputXmlAttribute(stream, kTestsuite, "errors", "0");
OutputXmlAttribute(stream, kTestsuite, "time", OutputXmlAttribute(stream, kTestsuite, "time",
FormatTimeInMillisAsSeconds(test_suite.elapsed_time())); FormatTimeInMillisAsSeconds(test_suite.elapsed_time()));
OutputXmlAttribute(
stream, kTestsuite, "timestamp",
FormatEpochTimeInMillisAsIso8601(test_suite.start_timestamp()));
*stream << TestPropertiesAsXmlAttributes(test_suite.ad_hoc_test_result()); *stream << TestPropertiesAsXmlAttributes(test_suite.ad_hoc_test_result());
} }
*stream << ">\n"; *stream << ">\n";
...@@ -3864,11 +3864,11 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, ...@@ -3864,11 +3864,11 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream,
stream, kTestsuites, "disabled", stream, kTestsuites, "disabled",
StreamableToString(unit_test.reportable_disabled_test_count())); StreamableToString(unit_test.reportable_disabled_test_count()));
OutputXmlAttribute(stream, kTestsuites, "errors", "0"); OutputXmlAttribute(stream, kTestsuites, "errors", "0");
OutputXmlAttribute(stream, kTestsuites, "time",
FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));
OutputXmlAttribute( OutputXmlAttribute(
stream, kTestsuites, "timestamp", stream, kTestsuites, "timestamp",
FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp()));
OutputXmlAttribute(stream, kTestsuites, "time",
FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));
if (GTEST_FLAG(shuffle)) { if (GTEST_FLAG(shuffle)) {
OutputXmlAttribute(stream, kTestsuites, "random_seed", OutputXmlAttribute(stream, kTestsuites, "random_seed",
...@@ -4156,6 +4156,9 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, ...@@ -4156,6 +4156,9 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream,
? (result.Skipped() ? "SKIPPED" : "COMPLETED") ? (result.Skipped() ? "SKIPPED" : "COMPLETED")
: "SUPPRESSED", : "SUPPRESSED",
kIndent); kIndent);
OutputJsonKey(stream, kTestsuite, "timestamp",
FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()),
kIndent);
OutputJsonKey(stream, kTestsuite, "time", OutputJsonKey(stream, kTestsuite, "time",
FormatTimeInMillisAsDuration(result.elapsed_time()), kIndent); FormatTimeInMillisAsDuration(result.elapsed_time()), kIndent);
OutputJsonKey(stream, kTestsuite, "classname", test_suite_name, kIndent, OutputJsonKey(stream, kTestsuite, "classname", test_suite_name, kIndent,
...@@ -4202,6 +4205,10 @@ void JsonUnitTestResultPrinter::PrintJsonTestSuite( ...@@ -4202,6 +4205,10 @@ void JsonUnitTestResultPrinter::PrintJsonTestSuite(
OutputJsonKey(stream, kTestsuite, "disabled", OutputJsonKey(stream, kTestsuite, "disabled",
test_suite.reportable_disabled_test_count(), kIndent); test_suite.reportable_disabled_test_count(), kIndent);
OutputJsonKey(stream, kTestsuite, "errors", 0, kIndent); OutputJsonKey(stream, kTestsuite, "errors", 0, kIndent);
OutputJsonKey(
stream, kTestsuite, "timestamp",
FormatEpochTimeInMillisAsRFC3339(test_suite.start_timestamp()),
kIndent);
OutputJsonKey(stream, kTestsuite, "time", OutputJsonKey(stream, kTestsuite, "time",
FormatTimeInMillisAsDuration(test_suite.elapsed_time()), FormatTimeInMillisAsDuration(test_suite.elapsed_time()),
kIndent, false); kIndent, false);
......
...@@ -67,11 +67,14 @@ EXPECTED_1 = { ...@@ -67,11 +67,14 @@ EXPECTED_1 = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'TestSomeProperties', u'name': u'TestSomeProperties',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'PropertyOne', u'classname': u'PropertyOne',
u'SetUpProp': u'1', u'SetUpProp': u'1',
u'TestSomeProperty': u'1', u'TestSomeProperty': u'1',
...@@ -108,10 +111,13 @@ EXPECTED_2 = { ...@@ -108,10 +111,13 @@ EXPECTED_2 = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'TestSomeProperties', u'name': u'TestSomeProperties',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'timestamp': u'*',
u'time': u'*', u'time': u'*',
u'classname': u'PropertyTwo', u'classname': u'PropertyTwo',
u'SetUpProp': u'2', u'SetUpProp': u'2',
......
...@@ -73,8 +73,7 @@ EXPECTED_NON_EMPTY = { ...@@ -73,8 +73,7 @@ EXPECTED_NON_EMPTY = {
u'42', u'42',
u'name': u'name':
u'AllTests', u'AllTests',
u'testsuites': [ u'testsuites': [{
{
u'name': u'name':
u'SuccessfulTest', u'SuccessfulTest',
u'tests': u'tests':
...@@ -87,15 +86,17 @@ EXPECTED_NON_EMPTY = { ...@@ -87,15 +86,17 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'Succeeds', u'name': u'Succeeds',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'SuccessfulTest' u'classname': u'SuccessfulTest'
}] }]
}, }, {
{
u'name': u'name':
u'FailedTest', u'FailedTest',
u'tests': u'tests':
...@@ -108,6 +109,8 @@ EXPECTED_NON_EMPTY = { ...@@ -108,6 +109,8 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'name':
u'Fails', u'Fails',
...@@ -117,6 +120,8 @@ EXPECTED_NON_EMPTY = { ...@@ -117,6 +120,8 @@ EXPECTED_NON_EMPTY = {
u'COMPLETED', u'COMPLETED',
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'classname': u'classname':
u'FailedTest', u'FailedTest',
u'failures': [{ u'failures': [{
...@@ -126,8 +131,7 @@ EXPECTED_NON_EMPTY = { ...@@ -126,8 +131,7 @@ EXPECTED_NON_EMPTY = {
u'type': u'' u'type': u''
}] }]
}] }]
}, }, {
{
u'name': u'name':
u'DisabledTest', u'DisabledTest',
u'tests': u'tests':
...@@ -140,15 +144,17 @@ EXPECTED_NON_EMPTY = { ...@@ -140,15 +144,17 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'DISABLED_test_not_run', u'name': u'DISABLED_test_not_run',
u'status': u'NOTRUN', u'status': u'NOTRUN',
u'result': u'SUPPRESSED', u'result': u'SUPPRESSED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'DisabledTest' u'classname': u'DisabledTest'
}] }]
}, }, {
{
u'name': u'name':
u'SkippedTest', u'SkippedTest',
u'tests': u'tests':
...@@ -161,15 +167,17 @@ EXPECTED_NON_EMPTY = { ...@@ -161,15 +167,17 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'Skipped', u'name': u'Skipped',
u'status': u'RUN', u'status': u'RUN',
u'result': u'SKIPPED', u'result': u'SKIPPED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'SkippedTest' u'classname': u'SkippedTest'
}] }]
}, }, {
{
u'name': u'name':
u'MixedResultTest', u'MixedResultTest',
u'tests': u'tests':
...@@ -182,15 +190,16 @@ EXPECTED_NON_EMPTY = { ...@@ -182,15 +190,16 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'testsuite': [ u'timestamp':
{ u'*',
u'testsuite': [{
u'name': u'Succeeds', u'name': u'Succeeds',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'MixedResultTest' u'classname': u'MixedResultTest'
}, }, {
{
u'name': u'name':
u'Fails', u'Fails',
u'status': u'status':
...@@ -199,32 +208,30 @@ EXPECTED_NON_EMPTY = { ...@@ -199,32 +208,30 @@ EXPECTED_NON_EMPTY = {
u'COMPLETED', u'COMPLETED',
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'classname': u'classname':
u'MixedResultTest', u'MixedResultTest',
u'failures': u'failures': [{
[{
u'failure': u'gtest_xml_output_unittest_.cc:*\n' u'failure': u'gtest_xml_output_unittest_.cc:*\n'
u'Expected equality of these values:\n' u'Expected equality of these values:\n'
u' 1\n 2' + STACK_TRACE_TEMPLATE, u' 1\n 2' + STACK_TRACE_TEMPLATE,
u'type': u'' u'type': u''
}, }, {
{
u'failure': u'gtest_xml_output_unittest_.cc:*\n' u'failure': u'gtest_xml_output_unittest_.cc:*\n'
u'Expected equality of these values:\n' u'Expected equality of these values:\n'
u' 2\n 3' + STACK_TRACE_TEMPLATE, u' 2\n 3' + STACK_TRACE_TEMPLATE,
u'type': u'' u'type': u''
}] }]
}, }, {
{
u'name': u'DISABLED_test', u'name': u'DISABLED_test',
u'status': u'NOTRUN', u'status': u'NOTRUN',
u'result': u'SUPPRESSED', u'result': u'SUPPRESSED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'MixedResultTest' u'classname': u'MixedResultTest'
} }]
] }, {
},
{
u'name': u'name':
u'XmlQuotingTest', u'XmlQuotingTest',
u'tests': u'tests':
...@@ -237,6 +244,8 @@ EXPECTED_NON_EMPTY = { ...@@ -237,6 +244,8 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'name':
u'OutputsCData', u'OutputsCData',
...@@ -246,6 +255,8 @@ EXPECTED_NON_EMPTY = { ...@@ -246,6 +255,8 @@ EXPECTED_NON_EMPTY = {
u'COMPLETED', u'COMPLETED',
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'classname': u'classname':
u'XmlQuotingTest', u'XmlQuotingTest',
u'failures': [{ u'failures': [{
...@@ -256,8 +267,7 @@ EXPECTED_NON_EMPTY = { ...@@ -256,8 +267,7 @@ EXPECTED_NON_EMPTY = {
u'type': u'' u'type': u''
}] }]
}] }]
}, }, {
{
u'name': u'name':
u'InvalidCharactersTest', u'InvalidCharactersTest',
u'tests': u'tests':
...@@ -270,6 +280,8 @@ EXPECTED_NON_EMPTY = { ...@@ -270,6 +280,8 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'name':
u'InvalidCharactersInMessage', u'InvalidCharactersInMessage',
...@@ -279,6 +291,8 @@ EXPECTED_NON_EMPTY = { ...@@ -279,6 +291,8 @@ EXPECTED_NON_EMPTY = {
u'COMPLETED', u'COMPLETED',
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'classname': u'classname':
u'InvalidCharactersTest', u'InvalidCharactersTest',
u'failures': [{ u'failures': [{
...@@ -288,8 +302,7 @@ EXPECTED_NON_EMPTY = { ...@@ -288,8 +302,7 @@ EXPECTED_NON_EMPTY = {
u'type': u'' u'type': u''
}] }]
}] }]
}, }, {
{
u'name': u'name':
u'PropertyRecordingTest', u'PropertyRecordingTest',
u'tests': u'tests':
...@@ -302,6 +315,8 @@ EXPECTED_NON_EMPTY = { ...@@ -302,6 +315,8 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'SetUpTestSuite': u'SetUpTestSuite':
u'yes', u'yes',
u'TearDownTestSuite': u'TearDownTestSuite':
...@@ -311,37 +326,37 @@ EXPECTED_NON_EMPTY = { ...@@ -311,37 +326,37 @@ EXPECTED_NON_EMPTY = {
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'PropertyRecordingTest', u'classname': u'PropertyRecordingTest',
u'key_1': u'1' u'key_1': u'1'
}, }, {
{
u'name': u'IntValuedProperty', u'name': u'IntValuedProperty',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'PropertyRecordingTest', u'classname': u'PropertyRecordingTest',
u'key_int': u'1' u'key_int': u'1'
}, }, {
{
u'name': u'ThreeProperties', u'name': u'ThreeProperties',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'PropertyRecordingTest', u'classname': u'PropertyRecordingTest',
u'key_1': u'1', u'key_1': u'1',
u'key_2': u'2', u'key_2': u'2',
u'key_3': u'3' u'key_3': u'3'
}, }, {
{
u'name': u'TwoValuesForOneKeyUsesLastValue', u'name': u'TwoValuesForOneKeyUsesLastValue',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'PropertyRecordingTest', u'classname': u'PropertyRecordingTest',
u'key_1': u'2' u'key_1': u'2'
}] }]
}, }, {
{
u'name': u'name':
u'NoFixtureTest', u'NoFixtureTest',
u'tests': u'tests':
...@@ -354,40 +369,34 @@ EXPECTED_NON_EMPTY = { ...@@ -354,40 +369,34 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'testsuite': [ u'timestamp':
{ u'*',
u'testsuite': [{
u'name': u'RecordProperty', u'name': u'RecordProperty',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'NoFixtureTest', u'classname': u'NoFixtureTest',
u'key': u'1' u'key': u'1'
}, }, {
{
u'name': u'ExternalUtilityThatCallsRecordIntValuedProperty', u'name': u'ExternalUtilityThatCallsRecordIntValuedProperty',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'NoFixtureTest', u'classname': u'NoFixtureTest',
u'key_for_utility_int': u'1' u'key_for_utility_int': u'1'
}, }, {
{ u'name': u'ExternalUtilityThatCallsRecordStringValuedProperty',
u'name': u'status': u'RUN',
u'ExternalUtilityThatCallsRecordStringValuedProperty', u'result': u'COMPLETED',
u'status': u'time': u'*',
u'RUN', u'timestamp': u'*',
u'result': u'classname': u'NoFixtureTest',
u'COMPLETED', u'key_for_utility_string': u'1'
u'time': }]
u'*', }, {
u'classname':
u'NoFixtureTest',
u'key_for_utility_string':
u'1'
}
]
},
{
u'name': u'name':
u'TypedTest/0', u'TypedTest/0',
u'tests': u'tests':
...@@ -400,16 +409,18 @@ EXPECTED_NON_EMPTY = { ...@@ -400,16 +409,18 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'HasTypeParamAttribute', u'name': u'HasTypeParamAttribute',
u'type_param': u'int', u'type_param': u'int',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'TypedTest/0' u'classname': u'TypedTest/0'
}] }]
}, }, {
{
u'name': u'name':
u'TypedTest/1', u'TypedTest/1',
u'tests': u'tests':
...@@ -422,16 +433,18 @@ EXPECTED_NON_EMPTY = { ...@@ -422,16 +433,18 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'HasTypeParamAttribute', u'name': u'HasTypeParamAttribute',
u'type_param': u'long', u'type_param': u'long',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'TypedTest/1' u'classname': u'TypedTest/1'
}] }]
}, }, {
{
u'name': u'name':
u'Single/TypeParameterizedTestSuite/0', u'Single/TypeParameterizedTestSuite/0',
u'tests': u'tests':
...@@ -444,16 +457,18 @@ EXPECTED_NON_EMPTY = { ...@@ -444,16 +457,18 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'HasTypeParamAttribute', u'name': u'HasTypeParamAttribute',
u'type_param': u'int', u'type_param': u'int',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/TypeParameterizedTestSuite/0' u'classname': u'Single/TypeParameterizedTestSuite/0'
}] }]
}, }, {
{
u'name': u'name':
u'Single/TypeParameterizedTestSuite/1', u'Single/TypeParameterizedTestSuite/1',
u'tests': u'tests':
...@@ -466,16 +481,18 @@ EXPECTED_NON_EMPTY = { ...@@ -466,16 +481,18 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'HasTypeParamAttribute', u'name': u'HasTypeParamAttribute',
u'type_param': u'long', u'type_param': u'long',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/TypeParameterizedTestSuite/1' u'classname': u'Single/TypeParameterizedTestSuite/1'
}] }]
}, }, {
{
u'name': u'name':
u'Single/ValueParamTest', u'Single/ValueParamTest',
u'tests': u'tests':
...@@ -488,42 +505,42 @@ EXPECTED_NON_EMPTY = { ...@@ -488,42 +505,42 @@ EXPECTED_NON_EMPTY = {
0, 0,
u'time': u'time':
u'*', u'*',
u'testsuite': [ u'timestamp':
{ u'*',
u'testsuite': [{
u'name': u'HasValueParamAttribute/0', u'name': u'HasValueParamAttribute/0',
u'value_param': u'33', u'value_param': u'33',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/ValueParamTest' u'classname': u'Single/ValueParamTest'
}, }, {
{
u'name': u'HasValueParamAttribute/1', u'name': u'HasValueParamAttribute/1',
u'value_param': u'42', u'value_param': u'42',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/ValueParamTest' u'classname': u'Single/ValueParamTest'
}, }, {
{
u'name': u'AnotherTestThatHasValueParamAttribute/0', u'name': u'AnotherTestThatHasValueParamAttribute/0',
u'value_param': u'33', u'value_param': u'33',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/ValueParamTest' u'classname': u'Single/ValueParamTest'
}, }, {
{
u'name': u'AnotherTestThatHasValueParamAttribute/1', u'name': u'AnotherTestThatHasValueParamAttribute/1',
u'value_param': u'42', u'value_param': u'42',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'Single/ValueParamTest' u'classname': u'Single/ValueParamTest'
} }]
] }]
}
]
} }
EXPECTED_FILTERED = { EXPECTED_FILTERED = {
...@@ -556,11 +573,14 @@ EXPECTED_FILTERED = { ...@@ -556,11 +573,14 @@ EXPECTED_FILTERED = {
0, 0,
u'time': u'time':
u'*', u'*',
u'timestamp':
u'*',
u'testsuite': [{ u'testsuite': [{
u'name': u'Succeeds', u'name': u'Succeeds',
u'status': u'RUN', u'status': u'RUN',
u'result': u'COMPLETED', u'result': u'COMPLETED',
u'time': u'*', u'time': u'*',
u'timestamp': u'*',
u'classname': u'SuccessfulTest', u'classname': u'SuccessfulTest',
}] }]
}], }],
......
...@@ -42,8 +42,8 @@ GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_" ...@@ -42,8 +42,8 @@ GTEST_OUTPUT_2_TEST = "gtest_xml_outfile2_test_"
EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests"> <testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests">
<testsuite name="PropertyOne" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="PropertyOne" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="TestSomeProperties" status="run" result="completed" time="*" classname="PropertyOne"> <testcase name="TestSomeProperties" status="run" result="completed" time="*" timestamp="*" classname="PropertyOne">
<properties> <properties>
<property name="SetUpProp" value="1"/> <property name="SetUpProp" value="1"/>
<property name="TestSomeProperty" value="1"/> <property name="TestSomeProperty" value="1"/>
...@@ -56,8 +56,8 @@ EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?> ...@@ -56,8 +56,8 @@ EXPECTED_XML_1 = """<?xml version="1.0" encoding="UTF-8"?>
EXPECTED_XML_2 = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_XML_2 = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests"> <testsuites tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests">
<testsuite name="PropertyTwo" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="PropertyTwo" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="TestSomeProperties" status="run" result="completed" time="*" classname="PropertyTwo"> <testcase name="TestSomeProperties" status="run" result="completed" time="*" timestamp="*" classname="PropertyTwo">
<properties> <properties>
<property name="SetUpProp" value="2"/> <property name="SetUpProp" value="2"/>
<property name="TestSomeProperty" value="2"/> <property name="TestSomeProperty" value="2"/>
......
...@@ -66,20 +66,20 @@ else: ...@@ -66,20 +66,20 @@ else:
EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="24" failures="4" disabled="2" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42"> <testsuites tests="24" failures="4" disabled="2" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42">
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="Succeeds" status="run" result="completed" time="*" classname="SuccessfulTest"/> <testcase name="Succeeds" status="run" result="completed" time="*" timestamp="*" classname="SuccessfulTest"/>
</testsuite> </testsuite>
<testsuite name="FailedTest" tests="1" failures="1" disabled="0" errors="0" time="*"> <testsuite name="FailedTest" tests="1" failures="1" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="Fails" status="run" result="completed" time="*" classname="FailedTest"> <testcase name="Fails" status="run" result="completed" time="*" timestamp="*" classname="FailedTest">
<failure message="gtest_xml_output_unittest_.cc:*&#x0A;Expected equality of these values:&#x0A; 1&#x0A; 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Expected equality of these values:&#x0A; 1&#x0A; 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Expected equality of these values: Expected equality of these values:
1 1
2%(stack)s]]></failure> 2%(stack)s]]></failure>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*"> <testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*" timestamp="*">
<testcase name="Succeeds" status="run" result="completed" time="*" classname="MixedResultTest"/> <testcase name="Succeeds" status="run" result="completed" time="*" timestamp="*" classname="MixedResultTest"/>
<testcase name="Fails" status="run" result="completed" time="*" classname="MixedResultTest"> <testcase name="Fails" status="run" result="completed" time="*" timestamp="*" classname="MixedResultTest">
<failure message="gtest_xml_output_unittest_.cc:*&#x0A;Expected equality of these values:&#x0A; 1&#x0A; 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Expected equality of these values:&#x0A; 1&#x0A; 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Expected equality of these values: Expected equality of these values:
1 1
...@@ -89,86 +89,86 @@ Expected equality of these values: ...@@ -89,86 +89,86 @@ Expected equality of these values:
2 2
3%(stack)s]]></failure> 3%(stack)s]]></failure>
</testcase> </testcase>
<testcase name="DISABLED_test" status="notrun" result="suppressed" time="*" classname="MixedResultTest"/> <testcase name="DISABLED_test" status="notrun" result="suppressed" time="*" timestamp="*" classname="MixedResultTest"/>
</testsuite> </testsuite>
<testsuite name="XmlQuotingTest" tests="1" failures="1" disabled="0" errors="0" time="*"> <testsuite name="XmlQuotingTest" tests="1" failures="1" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="OutputsCData" status="run" result="completed" time="*" classname="XmlQuotingTest"> <testcase name="OutputsCData" status="run" result="completed" time="*" timestamp="*" classname="XmlQuotingTest">
<failure message="gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;XML output: &lt;?xml encoding=&quot;utf-8&quot;&gt;&lt;top&gt;&lt;![CDATA[cdata text]]&gt;&lt;/top&gt;" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;XML output: &lt;?xml encoding=&quot;utf-8&quot;&gt;&lt;top&gt;&lt;![CDATA[cdata text]]&gt;&lt;/top&gt;" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Failed Failed
XML output: <?xml encoding="utf-8"><top><![CDATA[cdata text]]>]]&gt;<![CDATA[</top>%(stack)s]]></failure> XML output: <?xml encoding="utf-8"><top><![CDATA[cdata text]]>]]&gt;<![CDATA[</top>%(stack)s]]></failure>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="InvalidCharactersTest" tests="1" failures="1" disabled="0" errors="0" time="*"> <testsuite name="InvalidCharactersTest" tests="1" failures="1" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="InvalidCharactersInMessage" status="run" result="completed" time="*" classname="InvalidCharactersTest"> <testcase name="InvalidCharactersInMessage" status="run" result="completed" time="*" timestamp="*" classname="InvalidCharactersTest">
<failure message="gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;Invalid characters in brackets []" type=""><![CDATA[gtest_xml_output_unittest_.cc:* <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Failed&#x0A;Invalid characters in brackets []" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
Failed Failed
Invalid characters in brackets []%(stack)s]]></failure> Invalid characters in brackets []%(stack)s]]></failure>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="DisabledTest" tests="1" failures="0" disabled="1" errors="0" time="*"> <testsuite name="DisabledTest" tests="1" failures="0" disabled="1" errors="0" time="*" timestamp="*">
<testcase name="DISABLED_test_not_run" status="notrun" result="suppressed" time="*" classname="DisabledTest"/> <testcase name="DISABLED_test_not_run" status="notrun" result="suppressed" time="*" timestamp="*" classname="DisabledTest"/>
</testsuite> </testsuite>
<testsuite name="SkippedTest" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="SkippedTest" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="Skipped" status="run" result="skipped" time="*" classname="SkippedTest"/> <testcase name="Skipped" status="run" result="skipped" time="*" timestamp="*" classname="SkippedTest"/>
</testsuite> </testsuite>
<testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*" SetUpTestSuite="yes" TearDownTestSuite="aye"> <testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*" timestamp="*" SetUpTestSuite="yes" TearDownTestSuite="aye">
<testcase name="OneProperty" status="run" result="completed" time="*" classname="PropertyRecordingTest"> <testcase name="OneProperty" status="run" result="completed" time="*" timestamp="*" classname="PropertyRecordingTest">
<properties> <properties>
<property name="key_1" value="1"/> <property name="key_1" value="1"/>
</properties> </properties>
</testcase> </testcase>
<testcase name="IntValuedProperty" status="run" result="completed" time="*" classname="PropertyRecordingTest"> <testcase name="IntValuedProperty" status="run" result="completed" time="*" timestamp="*" classname="PropertyRecordingTest">
<properties> <properties>
<property name="key_int" value="1"/> <property name="key_int" value="1"/>
</properties> </properties>
</testcase> </testcase>
<testcase name="ThreeProperties" status="run" result="completed" time="*" classname="PropertyRecordingTest"> <testcase name="ThreeProperties" status="run" result="completed" time="*" timestamp="*" classname="PropertyRecordingTest">
<properties> <properties>
<property name="key_1" value="1"/> <property name="key_1" value="1"/>
<property name="key_2" value="2"/> <property name="key_2" value="2"/>
<property name="key_3" value="3"/> <property name="key_3" value="3"/>
</properties> </properties>
</testcase> </testcase>
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" result="completed" time="*" classname="PropertyRecordingTest"> <testcase name="TwoValuesForOneKeyUsesLastValue" status="run" result="completed" time="*" timestamp="*" classname="PropertyRecordingTest">
<properties> <properties>
<property name="key_1" value="2"/> <property name="key_1" value="2"/>
</properties> </properties>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="NoFixtureTest" tests="3" failures="0" disabled="0" errors="0" time="*"> <testsuite name="NoFixtureTest" tests="3" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="RecordProperty" status="run" result="completed" time="*" classname="NoFixtureTest"> <testcase name="RecordProperty" status="run" result="completed" time="*" timestamp="*" classname="NoFixtureTest">
<properties> <properties>
<property name="key" value="1"/> <property name="key" value="1"/>
</properties> </properties>
</testcase> </testcase>
<testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" result="completed" time="*" classname="NoFixtureTest"> <testcase name="ExternalUtilityThatCallsRecordIntValuedProperty" status="run" result="completed" time="*" timestamp="*" classname="NoFixtureTest">
<properties> <properties>
<property name="key_for_utility_int" value="1"/> <property name="key_for_utility_int" value="1"/>
</properties> </properties>
</testcase> </testcase>
<testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" result="completed" time="*" classname="NoFixtureTest"> <testcase name="ExternalUtilityThatCallsRecordStringValuedProperty" status="run" result="completed" time="*" timestamp="*" classname="NoFixtureTest">
<properties> <properties>
<property name="key_for_utility_string" value="1"/> <property name="key_for_utility_string" value="1"/>
</properties> </properties>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="Single/ValueParamTest" tests="4" failures="0" disabled="0" errors="0" time="*"> <testsuite name="Single/ValueParamTest" tests="4" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="HasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" classname="Single/ValueParamTest" /> <testcase name="HasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" timestamp="*" classname="Single/ValueParamTest" />
<testcase name="HasValueParamAttribute/1" value_param="42" status="run" result="completed" time="*" classname="Single/ValueParamTest" /> <testcase name="HasValueParamAttribute/1" value_param="42" status="run" result="completed" time="*" timestamp="*" classname="Single/ValueParamTest" />
<testcase name="AnotherTestThatHasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" classname="Single/ValueParamTest" /> <testcase name="AnotherTestThatHasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" timestamp="*" classname="Single/ValueParamTest" />
<testcase name="AnotherTestThatHasValueParamAttribute/1" value_param="42" status="run" result="completed" time="*" classname="Single/ValueParamTest" /> <testcase name="AnotherTestThatHasValueParamAttribute/1" value_param="42" status="run" result="completed" time="*" timestamp="*" classname="Single/ValueParamTest" />
</testsuite> </testsuite>
<testsuite name="TypedTest/0" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="TypedTest/0" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" classname="TypedTest/0" /> <testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" timestamp="*" classname="TypedTest/0" />
</testsuite> </testsuite>
<testsuite name="TypedTest/1" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="TypedTest/1" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" classname="TypedTest/1" /> <testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" timestamp="*" classname="TypedTest/1" />
</testsuite> </testsuite>
<testsuite name="Single/TypeParameterizedTestSuite/0" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="Single/TypeParameterizedTestSuite/0" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" classname="Single/TypeParameterizedTestSuite/0" /> <testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" timestamp="*" classname="Single/TypeParameterizedTestSuite/0" />
</testsuite> </testsuite>
<testsuite name="Single/TypeParameterizedTestSuite/1" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="Single/TypeParameterizedTestSuite/1" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" classname="Single/TypeParameterizedTestSuite/1" /> <testcase name="HasTypeParamAttribute" type_param="*" status="run" result="completed" time="*" timestamp="*" classname="Single/TypeParameterizedTestSuite/1" />
</testsuite> </testsuite>
</testsuites>""" % { </testsuites>""" % {
'stack': STACK_TRACE_TEMPLATE 'stack': STACK_TRACE_TEMPLATE
...@@ -178,25 +178,25 @@ EXPECTED_FILTERED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?> ...@@ -178,25 +178,25 @@ EXPECTED_FILTERED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="*" <testsuites tests="1" failures="0" disabled="0" errors="0" time="*"
timestamp="*" name="AllTests" ad_hoc_property="42"> timestamp="*" name="AllTests" ad_hoc_property="42">
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" <testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0"
errors="0" time="*"> errors="0" time="*" timestamp="*">
<testcase name="Succeeds" status="run" result="completed" time="*" classname="SuccessfulTest"/> <testcase name="Succeeds" status="run" result="completed" time="*" timestamp="*" classname="SuccessfulTest"/>
</testsuite> </testsuite>
</testsuites>""" </testsuites>"""
EXPECTED_SHARDED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?> EXPECTED_SHARDED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="3" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42"> <testsuites tests="3" failures="0" disabled="0" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42">
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="Succeeds" status="run" result="completed" time="*" classname="SuccessfulTest"/> <testcase name="Succeeds" status="run" result="completed" time="*" timestamp="*" classname="SuccessfulTest"/>
</testsuite> </testsuite>
<testsuite name="PropertyRecordingTest" tests="1" failures="0" disabled="0" errors="0" time="*" SetUpTestSuite="yes" TearDownTestSuite="aye"> <testsuite name="PropertyRecordingTest" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*" SetUpTestSuite="yes" TearDownTestSuite="aye">
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" result="completed" time="*" classname="PropertyRecordingTest"> <testcase name="TwoValuesForOneKeyUsesLastValue" status="run" result="completed" time="*" timestamp="*" classname="PropertyRecordingTest">
<properties> <properties>
<property name="key_1" value="2"/> <property name="key_1" value="2"/>
</properties> </properties>
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="Single/ValueParamTest" tests="1" failures="0" disabled="0" errors="0" time="*"> <testsuite name="Single/ValueParamTest" tests="1" failures="0" disabled="0" errors="0" time="*" timestamp="*">
<testcase name="AnotherTestThatHasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" classname="Single/ValueParamTest" /> <testcase name="AnotherTestThatHasValueParamAttribute/0" value_param="33" status="run" result="completed" time="*" timestamp="*" classname="Single/ValueParamTest" />
</testsuite> </testsuite>
</testsuites>""" </testsuites>"""
......
...@@ -169,7 +169,7 @@ class GTestXMLTestCase(gtest_test_utils.TestCase): ...@@ -169,7 +169,7 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
* The stack traces are removed. * The stack traces are removed.
""" """
if element.tagName == 'testsuites': if element.tagName in ('testsuites', 'testsuite', 'testcase'):
timestamp = element.getAttributeNode('timestamp') timestamp = element.getAttributeNode('timestamp')
timestamp.value = re.sub(r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d$', timestamp.value = re.sub(r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d$',
'*', timestamp.value) '*', timestamp.value)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment