diff --git a/googletest/src/gtest-internal-inl.h b/googletest/src/gtest-internal-inl.h index cc6f00488f..7e093d33f6 100644 --- a/googletest/src/gtest-internal-inl.h +++ b/googletest/src/gtest-internal-inl.h @@ -1199,7 +1199,8 @@ class StreamingListener : public EmptyTestEventListener { void OnTestPartResult(const TestPartResult& test_part_result) override { const char* file_name = test_part_result.file_name(); if (file_name == nullptr) file_name = ""; - SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + + SendLn("event=TestPartResult&type=" + FormatType(test_part_result.type()) + + "&file=" + UrlEncode(file_name) + "&line=" + StreamableToString(test_part_result.line_number()) + "&message=" + UrlEncode(test_part_result.message())); } @@ -1214,6 +1215,20 @@ class StreamingListener : public EmptyTestEventListener { std::string FormatBool(bool value) { return value ? "1" : "0"; } + std::string FormatType(TestPartResult::Type value) { + switch (value) { + case TestPartResult::kSkip: + return "skip"; + case TestPartResult::kSuccess: + return "success"; + case TestPartResult::kNonFatalFailure: + case TestPartResult::kFatalFailure: + return "failure"; + default: + return "unknown"; + } + } + const std::unique_ptr socket_writer_; StreamingListener(const StreamingListener&) = delete; diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index 5d7cfb092c..b9a2bd12f5 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -161,7 +161,47 @@ TEST_F(StreamingListenerTest, OnTestPartResult) { // Meta characters in the failure message should be properly escaped. EXPECT_EQ( - "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", + "event=TestPartResult&type=failure&file=foo.cc&line=42&message=failed%3D%0A%26%25\n", + *output()); +} + +TEST_F(StreamingListenerTest, OnTestPartResultSkip) { + *output() = ""; + streamer_.OnTestPartResult(TestPartResult(TestPartResult::kSkip, + "foo.cc", 42, "Skipped")); + + EXPECT_EQ( + "event=TestPartResult&type=skip&file=foo.cc&line=42&message=Skipped\n", + *output()); +} + +TEST_F(StreamingListenerTest, OnTestPartResultSuccess) { + *output() = ""; + streamer_.OnTestPartResult(TestPartResult(TestPartResult::kSuccess, + "foo.cc", 42, "Succeeded")); + + EXPECT_EQ( + "event=TestPartResult&type=success&file=foo.cc&line=42&message=Succeeded\n", + *output()); +} + +TEST_F(StreamingListenerTest, OnTestPartResultNonFatalFailure) { + *output() = ""; + streamer_.OnTestPartResult(TestPartResult(TestPartResult::kNonFatalFailure, + "foo.cc", 42, "Failed")); + + EXPECT_EQ( + "event=TestPartResult&type=failure&file=foo.cc&line=42&message=Failed\n", + *output()); +} + +TEST_F(StreamingListenerTest, OnTestPartResultUnknown) { + *output() = ""; + streamer_.OnTestPartResult(TestPartResult((TestPartResult::Type)-1, + "foo.cc", 42, "Other")); + + EXPECT_EQ( + "event=TestPartResult&type=unknown&file=foo.cc&line=42&message=Other\n", *output()); }