Allow enums that have AbslStringify to be logged as text
When an enum has AbslStringify, we log the text coming from stringifying it, not the numeric value. Drive by changes, 1. Changed the tests to use string matchers rather than std::string::find. 2. Fixed test includes. 3. Fix spelling. Bug: webrtc:381502973 Change-Id: I6bab0afda1b20d72c02629e80ff2ac567650183a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/369861 Auto-Submit: Evan Shrubsole <eshr@google.com> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43471}
This commit is contained in:
parent
a79c709ed3
commit
23438deabb
@ -318,6 +318,7 @@ inline Val<LogArgType::kLogMetadataErr, LogMetadataErr> MakeVal(
|
|||||||
// The enum class types are not implicitly convertible to arithmetic types.
|
// The enum class types are not implicitly convertible to arithmetic types.
|
||||||
template <typename T,
|
template <typename T,
|
||||||
absl::enable_if_t<std::is_enum<T>::value &&
|
absl::enable_if_t<std::is_enum<T>::value &&
|
||||||
|
!absl::HasAbslStringify<T>::value &&
|
||||||
!std::is_arithmetic<T>::value>* = nullptr>
|
!std::is_arithmetic<T>::value>* = nullptr>
|
||||||
inline decltype(MakeVal(std::declval<absl::underlying_type_t<T>>())) MakeVal(
|
inline decltype(MakeVal(std::declval<absl::underlying_type_t<T>>())) MakeVal(
|
||||||
T x) {
|
T x) {
|
||||||
|
|||||||
@ -12,14 +12,11 @@
|
|||||||
|
|
||||||
#if RTC_LOG_ENABLED()
|
#if RTC_LOG_ENABLED()
|
||||||
|
|
||||||
#include <string.h>
|
#include <string>
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "rtc_base/arraysize.h"
|
#include "rtc_base/arraysize.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/event.h"
|
|
||||||
#include "rtc_base/platform_thread.h"
|
#include "rtc_base/platform_thread.h"
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
#include "test/gmock.h"
|
#include "test/gmock.h"
|
||||||
@ -97,8 +94,8 @@ TEST(LogTest, SingleStream) {
|
|||||||
|
|
||||||
RTC_LOG(LS_INFO) << "INFO";
|
RTC_LOG(LS_INFO) << "INFO";
|
||||||
RTC_LOG(LS_VERBOSE) << "VERBOSE";
|
RTC_LOG(LS_VERBOSE) << "VERBOSE";
|
||||||
EXPECT_NE(std::string::npos, str.find("INFO"));
|
EXPECT_THAT(str, HasSubstr("INFO"));
|
||||||
EXPECT_EQ(std::string::npos, str.find("VERBOSE"));
|
EXPECT_THAT(str, Not(HasSubstr("VERBOSE")));
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
long l = 2l;
|
long l = 2l;
|
||||||
@ -114,32 +111,32 @@ TEST(LogTest, SingleStream) {
|
|||||||
const char* null_string = nullptr;
|
const char* null_string = nullptr;
|
||||||
void* p = reinterpret_cast<void*>(0xabcd);
|
void* p = reinterpret_cast<void*>(0xabcd);
|
||||||
|
|
||||||
// Log all suported types(except doubles/floats) as a sanity-check.
|
// Log all supported types(except doubles/floats) as a sanity-check.
|
||||||
RTC_LOG(LS_INFO) << "|" << i << "|" << l << "|" << ll << "|" << u << "|" << ul
|
RTC_LOG(LS_INFO) << "|" << i << "|" << l << "|" << ll << "|" << u << "|" << ul
|
||||||
<< "|" << ull << "|" << s1.c_str() << "|" << s2 << "|"
|
<< "|" << ull << "|" << s1.c_str() << "|" << s2 << "|"
|
||||||
<< absl::string_view(s3) << "|" << p << "|" << null_string
|
<< absl::string_view(s3) << "|" << p << "|" << null_string
|
||||||
<< "|";
|
<< "|";
|
||||||
|
|
||||||
// Signed integers
|
// Signed integers
|
||||||
EXPECT_NE(std::string::npos, str.find("|1|"));
|
EXPECT_THAT(str, HasSubstr("|1|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|2|"));
|
EXPECT_THAT(str, HasSubstr("|2|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|3|"));
|
EXPECT_THAT(str, HasSubstr("|3|"));
|
||||||
|
|
||||||
// Unsigned integers
|
// Unsigned integers
|
||||||
EXPECT_NE(std::string::npos, str.find("|4|"));
|
EXPECT_THAT(str, HasSubstr("|4|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|5|"));
|
EXPECT_THAT(str, HasSubstr("|5|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|6|"));
|
EXPECT_THAT(str, HasSubstr("|6|"));
|
||||||
|
|
||||||
// Strings
|
// Strings
|
||||||
EXPECT_NE(std::string::npos, str.find("|char*|"));
|
EXPECT_THAT(str, HasSubstr("|char*|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|std::string|"));
|
EXPECT_THAT(str, HasSubstr("|std::string|"));
|
||||||
EXPECT_NE(std::string::npos, str.find("|absl::stringview|"));
|
EXPECT_THAT(str, HasSubstr("|absl::stringview|"));
|
||||||
|
|
||||||
// void*
|
// void*
|
||||||
EXPECT_NE(std::string::npos, str.find("|abcd|"));
|
EXPECT_THAT(str, HasSubstr("|abcd|"));
|
||||||
|
|
||||||
// null char*
|
// null char*
|
||||||
EXPECT_NE(std::string::npos, str.find("|(null)|"));
|
EXPECT_THAT(str, HasSubstr("|(null)|"));
|
||||||
|
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
EXPECT_EQ(LS_NONE, LogMessage::GetLogToStream(&stream));
|
EXPECT_EQ(LS_NONE, LogMessage::GetLogToStream(&stream));
|
||||||
@ -152,7 +149,7 @@ TEST(LogTest, LogIfLogIfConditionIsTrue) {
|
|||||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
|
|
||||||
RTC_LOG_IF(LS_INFO, true) << "Hello";
|
RTC_LOG_IF(LS_INFO, true) << "Hello";
|
||||||
EXPECT_NE(std::string::npos, str.find("Hello"));
|
EXPECT_THAT(str, HasSubstr("Hello"));
|
||||||
|
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
@ -163,7 +160,7 @@ TEST(LogTest, LogIfDontLogIfConditionIsFalse) {
|
|||||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
|
|
||||||
RTC_LOG_IF(LS_INFO, false) << "Hello";
|
RTC_LOG_IF(LS_INFO, false) << "Hello";
|
||||||
EXPECT_EQ(std::string::npos, str.find("Hello"));
|
EXPECT_THAT(str, Not(HasSubstr("Hello")));
|
||||||
|
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
@ -174,8 +171,8 @@ TEST(LogTest, LogIfFLogIfConditionIsTrue) {
|
|||||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
|
|
||||||
RTC_LOG_IF_F(LS_INFO, true) << "Hello";
|
RTC_LOG_IF_F(LS_INFO, true) << "Hello";
|
||||||
EXPECT_NE(std::string::npos, str.find(__FUNCTION__));
|
EXPECT_THAT(str, HasSubstr(__FUNCTION__));
|
||||||
EXPECT_NE(std::string::npos, str.find("Hello"));
|
EXPECT_THAT(str, HasSubstr("Hello"));
|
||||||
|
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
@ -186,8 +183,8 @@ TEST(LogTest, LogIfFDontLogIfConditionIsFalse) {
|
|||||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
|
|
||||||
RTC_LOG_IF_F(LS_INFO, false) << "Not";
|
RTC_LOG_IF_F(LS_INFO, false) << "Not";
|
||||||
EXPECT_EQ(std::string::npos, str.find(__FUNCTION__));
|
EXPECT_THAT(str, Not(HasSubstr(__FUNCTION__)));
|
||||||
EXPECT_EQ(std::string::npos, str.find("Not"));
|
EXPECT_THAT(str, Not(HasSubstr("Not")));
|
||||||
|
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
@ -291,9 +288,9 @@ TEST(LogTest, CheckFilePathParsed) {
|
|||||||
|
|
||||||
#if defined(WEBRTC_ANDROID)
|
#if defined(WEBRTC_ANDROID)
|
||||||
EXPECT_NE(nullptr, strstr(tag, "myfile.cc"));
|
EXPECT_NE(nullptr, strstr(tag, "myfile.cc"));
|
||||||
EXPECT_NE(std::string::npos, str.find("100"));
|
EXPECT_THAT(str, HasSubstr("100"));
|
||||||
#else
|
#else
|
||||||
EXPECT_NE(std::string::npos, str.find("(myfile.cc:100)"));
|
EXPECT_THAT(str, HasSubstr("(myfile.cc:100)"));
|
||||||
#endif
|
#endif
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
@ -306,8 +303,8 @@ TEST(LogTest, CheckTagAddedToStringInDefaultOnLogMessageAndroid) {
|
|||||||
EXPECT_EQ(LS_INFO, LogMessage::GetLogToStream(&stream));
|
EXPECT_EQ(LS_INFO, LogMessage::GetLogToStream(&stream));
|
||||||
|
|
||||||
RTC_LOG_TAG(LS_INFO, "my_tag") << "INFO";
|
RTC_LOG_TAG(LS_INFO, "my_tag") << "INFO";
|
||||||
EXPECT_NE(std::string::npos, str.find("INFO"));
|
EXPECT_THAT(str, HasSubstr("INFO"));
|
||||||
EXPECT_NE(std::string::npos, str.find("my_tag"));
|
EXPECT_THAT(str, HasSubstr("my_tag"));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -348,10 +345,10 @@ TEST(LogTest, EnumsAreSupported) {
|
|||||||
LogSinkImpl stream(&str);
|
LogSinkImpl stream(&str);
|
||||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue0 << "]";
|
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue0 << "]";
|
||||||
EXPECT_NE(std::string::npos, str.find("[0]"));
|
EXPECT_THAT(str, HasSubstr("[0]"));
|
||||||
EXPECT_EQ(std::string::npos, str.find("[1]"));
|
EXPECT_THAT(str, Not(HasSubstr("[1]")));
|
||||||
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue1 << "]";
|
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue1 << "]";
|
||||||
EXPECT_NE(std::string::npos, str.find("[1]"));
|
EXPECT_THAT(str, HasSubstr("[1]"));
|
||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,5 +386,31 @@ TEST(LogTest, UseAbslStringForCustomTypes) {
|
|||||||
LogMessage::RemoveLogToStream(&stream);
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class TestEnumStringify { kValue0 = 0, kValue1 = 1 };
|
||||||
|
|
||||||
|
template <typename Sink>
|
||||||
|
void AbslStringify(Sink& sink, TestEnumStringify value) {
|
||||||
|
switch (value) {
|
||||||
|
case TestEnumStringify::kValue0:
|
||||||
|
sink.Append("kValue0");
|
||||||
|
break;
|
||||||
|
case TestEnumStringify::kValue1:
|
||||||
|
sink.Append("kValue1");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(LogTest, EnumSupportsAbslStringify) {
|
||||||
|
std::string str;
|
||||||
|
LogSinkImpl stream(&str);
|
||||||
|
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||||
|
RTC_LOG(LS_INFO) << "[" << TestEnumStringify::kValue0 << "]";
|
||||||
|
EXPECT_THAT(str, HasSubstr("[kValue0]"));
|
||||||
|
EXPECT_THAT(str, Not(HasSubstr("[kValue1]")));
|
||||||
|
RTC_LOG(LS_INFO) << "[" << TestEnumStringify::kValue1 << "]";
|
||||||
|
EXPECT_THAT(str, HasSubstr("[kValue1]"));
|
||||||
|
LogMessage::RemoveLogToStream(&stream);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace rtc
|
} // namespace rtc
|
||||||
#endif // RTC_LOG_ENABLED()
|
#endif // RTC_LOG_ENABLED()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user