mirror of
https://github.com/google/googletest.git
synced 2024-12-27 10:11:03 +08:00
Improves protobuf print format.
This commit is contained in:
parent
9571b28675
commit
0ea67f88ae
@ -129,14 +129,21 @@ class TypeWithoutFormatter {
|
||||
sizeof(value), os);
|
||||
}
|
||||
};
|
||||
|
||||
// We print a protobuf using its ShortDebugString() when the string
|
||||
// doesn't exceed this many characters; otherwise we print it using
|
||||
// DebugString() for better readability.
|
||||
const size_t kProtobufOneLinerMaxLength = 50;
|
||||
|
||||
template <typename T>
|
||||
class TypeWithoutFormatter<T, true> {
|
||||
public:
|
||||
static void PrintValue(const T& value, ::std::ostream* os) {
|
||||
// Both ProtocolMessage and proto2::Message have the
|
||||
// ShortDebugString() method, so the same implementation works for
|
||||
// both.
|
||||
::std::operator<<(*os, "<" + value.ShortDebugString() + ">");
|
||||
const ::testing::internal::string short_str = value.ShortDebugString();
|
||||
const ::testing::internal::string pretty_str =
|
||||
short_str.length() <= kProtobufOneLinerMaxLength ?
|
||||
short_str : ("\n" + value.DebugString());
|
||||
::std::operator<<(*os, "<" + pretty_str + ">");
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -48,6 +48,12 @@
|
||||
#include <sys/types.h> // For ssize_t. NOLINT
|
||||
#endif
|
||||
|
||||
class ProtocolMessage;
|
||||
|
||||
namespace proto2 {
|
||||
class Message;
|
||||
} // namespace proto2
|
||||
|
||||
namespace testing {
|
||||
namespace internal {
|
||||
|
||||
@ -384,6 +390,7 @@ TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) {
|
||||
// Tests that IsAProtocolMessage<T>::value is true when T is
|
||||
// ProtocolMessage or a sub-class of it.
|
||||
TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) {
|
||||
EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value);
|
||||
EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value);
|
||||
#if GMOCK_HAS_PROTOBUF_
|
||||
EXPECT_TRUE(IsAProtocolMessage<const TestMessage>::value);
|
||||
|
@ -919,12 +919,31 @@ TEST(PrintProtocolMessageTest, PrintsShortDebugString) {
|
||||
EXPECT_EQ("<member:\"yes\">", Print(msg));
|
||||
}
|
||||
|
||||
// Tests printing a proto2 message.
|
||||
TEST(PrintProto2MessageTest, PrintsShortDebugString) {
|
||||
// Tests printing a short proto2 message.
|
||||
TEST(PrintProto2MessageTest, PrintsShortDebugStringWhenItIsShort) {
|
||||
testing::internal::FooMessage msg;
|
||||
msg.set_int_field(2);
|
||||
msg.set_string_field("hello");
|
||||
EXPECT_PRED2(RE::FullMatch, Print(msg),
|
||||
"<int_field:\\s*2\\s*>");
|
||||
"<int_field:\\s*2\\s+string_field:\\s*\"hello\">");
|
||||
}
|
||||
|
||||
// Tests printing a long proto2 message.
|
||||
TEST(PrintProto2MessageTest, PrintsDebugStringWhenItIsLong) {
|
||||
testing::internal::FooMessage msg;
|
||||
msg.set_int_field(2);
|
||||
msg.set_string_field("hello");
|
||||
msg.add_names("peter");
|
||||
msg.add_names("paul");
|
||||
msg.add_names("mary");
|
||||
EXPECT_PRED2(RE::FullMatch, Print(msg),
|
||||
"<\n"
|
||||
"int_field:\\s*2\n"
|
||||
"string_field:\\s*\"hello\"\n"
|
||||
"names:\\s*\"peter\"\n"
|
||||
"names:\\s*\"paul\"\n"
|
||||
"names:\\s*\"mary\"\n"
|
||||
">");
|
||||
}
|
||||
|
||||
#endif // GMOCK_HAS_PROTOBUF_
|
||||
|
Loading…
x
Reference in New Issue
Block a user