In logging tests that write expectations against `ScopedMockLog::Send`, suppress the default behavior that forwards to `ScopedMockLog::Log` so that unexpected logs are printed with full metadata. Many of these tests are poking at those metadata, and a failure message that doesn't include them is unhelpful.
Also, add a GoogleTest debug `PrintTo` routine for `LogEntry`, so that unexpected calls to `ScopedMockLog::Send` print metadata legibly.
PiperOrigin-RevId: 790735226
Change-Id: If21821812a9b7ecfaefef9ea5085f161f9331cf4
diff --git a/CMake/AbseilDll.cmake b/CMake/AbseilDll.cmake
index 96fb5c6..38d0936 100644
--- a/CMake/AbseilDll.cmake
+++ b/CMake/AbseilDll.cmake
@@ -201,6 +201,7 @@
"log/initialize.cc"
"log/initialize.h"
"log/log.h"
+ "log/log_entry.cc"
"log/log_entry.h"
"log/log_sink.cc"
"log/log_sink.h"
diff --git a/absl/log/BUILD.bazel b/absl/log/BUILD.bazel
index d4b3730..3e965ab 100644
--- a/absl/log/BUILD.bazel
+++ b/absl/log/BUILD.bazel
@@ -154,6 +154,7 @@
cc_library(
name = "log_entry",
+ srcs = ["log_entry.cc"],
hdrs = ["log_entry.h"],
copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
@@ -162,6 +163,7 @@
"//absl/base:core_headers",
"//absl/base:log_severity",
"//absl/log/internal:config",
+ "//absl/log/internal:proto",
"//absl/strings",
"//absl/time",
"//absl/types:span",
diff --git a/absl/log/CMakeLists.txt b/absl/log/CMakeLists.txt
index 130897f..eb19bec 100644
--- a/absl/log/CMakeLists.txt
+++ b/absl/log/CMakeLists.txt
@@ -560,6 +560,8 @@
absl_cc_library(
NAME
log_entry
+ SRCS
+ "log_entry.cc"
HDRS
"log_entry.h"
COPTS
@@ -570,6 +572,7 @@
absl::config
absl::core_headers
absl::log_internal_config
+ absl::log_internal_proto
absl::log_severity
absl::span
absl::strings
diff --git a/absl/log/flags_test.cc b/absl/log/flags_test.cc
index 1080ea1..f5a2b51 100644
--- a/absl/log/flags_test.cc
+++ b/absl/log/flags_test.cc
@@ -93,6 +93,7 @@
TEST_F(LogFlagsTest, EmptyBacktraceAtFlag) {
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -104,6 +105,7 @@
TEST_F(LogFlagsTest, BacktraceAtNonsense) {
absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -117,6 +119,7 @@
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO) << "hello world"; };
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -131,6 +134,7 @@
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO) << "hello world"; };
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -145,6 +149,7 @@
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO) << "hello world"; };
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -158,6 +163,7 @@
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO) << "hello world"; };
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
@@ -172,6 +178,7 @@
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO) << "hello world"; };
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
testing::InSequence seq;
EXPECT_CALL(test_sink, Send(TextMessage(HasSubstr("(stacktrace:"))));
diff --git a/absl/log/log_basic_test_impl.inc b/absl/log/log_basic_test_impl.inc
index c4b4e24..3f007dc 100644
--- a/absl/log/log_basic_test_impl.inc
+++ b/absl/log/log_basic_test_impl.inc
@@ -94,6 +94,7 @@
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { ABSL_TEST_LOG(INFO) << "hello world"; };
@@ -125,6 +126,7 @@
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { ABSL_TEST_LOG(WARNING) << "hello world"; };
@@ -156,6 +158,7 @@
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { ABSL_TEST_LOG(ERROR) << "hello world"; };
@@ -187,6 +190,7 @@
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { ABSL_TEST_LOG(DO_NOT_SUBMIT) << "hello world"; };
@@ -233,6 +237,7 @@
{
absl::ScopedMockLog test_sink(
absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -299,6 +304,7 @@
{
absl::ScopedMockLog test_sink(
absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -336,6 +342,7 @@
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { ABSL_TEST_LOG(DFATAL) << "hello world"; };
@@ -375,6 +382,7 @@
{
absl::ScopedMockLog test_sink(
absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -456,6 +464,7 @@
for (auto severity : {absl::LogSeverity::kInfo, absl::LogSeverity::kWarning,
absl::LogSeverity::kError}) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 2;
auto do_log = [severity] {
@@ -506,6 +515,7 @@
{
absl::ScopedMockLog test_sink(
absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -567,6 +577,7 @@
}
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(LogSeverity(Eq(absl::LogSeverity::kInfo))));
@@ -583,6 +594,7 @@
}
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(LogSeverity(Eq(absl::LogSeverity::kError))));
diff --git a/absl/log/log_entry.cc b/absl/log/log_entry.cc
new file mode 100644
index 0000000..358b8f5
--- /dev/null
+++ b/absl/log/log_entry.cc
@@ -0,0 +1,263 @@
+// Copyright 2025 The Abseil Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "absl/log/log_entry.h"
+
+#include <cstddef>
+#include <cstdint>
+#include <iomanip>
+#include <ios>
+#include <ostream>
+
+#include "absl/base/config.h"
+#include "absl/log/internal/proto.h"
+#include "absl/strings/escaping.h"
+#include "absl/strings/string_view.h"
+#include "absl/time/time.h"
+#include "absl/types/span.h"
+
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace {
+// message `logging.proto.Event`
+enum EventTag : uint8_t {
+ kFileName = 2,
+ kFileLine = 3,
+ kTimeNsecs = 4,
+ kSeverity = 5,
+ kThreadId = 6,
+ kValue = 7,
+ kSequenceNumber = 9,
+ kThreadName = 10,
+};
+
+// message `logging.proto.Value`
+enum ValueTag : uint8_t {
+ kString = 1,
+ kStringLiteral = 6,
+};
+
+// enum `logging.proto.Severity`
+enum Severity : int {
+ FINEST = 300,
+ FINER = 400,
+ FINE = 500,
+ VERBOSE_0 = 600,
+ CONFIG = 700,
+ INFO = 800,
+ NOTICE = 850,
+ WARNING = 900,
+ ERROR = 950,
+ SEVERE = 1000,
+ FATAL = 1100,
+};
+
+void PrintEscapedRangeTo(const absl::string_view str,
+ const absl::string_view substr, std::ostream* os) {
+ const absl::string_view head =
+ str.substr(0, static_cast<size_t>(substr.data() - str.data()));
+ const char old_fill = os->fill();
+ const auto old_flags = os->flags();
+ *os << std::right
+ << std::setw(static_cast<int>(absl::CHexEscape(head).size())) << "";
+ switch (substr.size()) {
+ case 0:
+ *os << "\\";
+ break;
+ case 1:
+ *os << "^";
+ break;
+ default:
+ *os << "[" << std::setw(static_cast<int>(absl::CHexEscape(substr).size()))
+ << std::setfill('-') << ")";
+ break;
+ }
+ os->fill(old_fill);
+ os->flags(old_flags);
+}
+} // namespace
+void PrintTo(const LogEntry& entry, std::ostream* os) {
+ auto text_message_with_prefix_and_newline_and_nul = absl::string_view(
+ entry.text_message_with_prefix_and_newline_and_nul_.data(),
+ entry.text_message_with_prefix_and_newline_and_nul_.size());
+ *os << "LogEntry {\n"
+ << " source_filename: \"" << absl::CHexEscape(entry.source_filename())
+ << "\"\n"
+ << " source_basename: \"" << absl::CHexEscape(entry.source_basename())
+ << "\"\n"
+ << " source_line: " << entry.source_line() << "\n"
+ << " prefix: " << std::boolalpha << entry.prefix() << "\n"
+ << " log_severity: " << entry.log_severity() << "\n"
+ << " verbosity: " << entry.verbosity();
+ if (entry.verbosity() == absl::LogEntry::kNoVerbosityLevel) {
+ *os << " (kNoVerbosityLevel)";
+ }
+ *os << "\n"
+ << " timestamp: " << entry.timestamp() << "\n"
+ << " tid: " << entry.tid() << "\n"
+ << " text_message_with_prefix_and_newline_and_nul_: \""
+ << absl::CHexEscape(text_message_with_prefix_and_newline_and_nul)
+ << "\"\n"
+ << " text_message_with_prefix_and_newline: ";
+ PrintEscapedRangeTo(text_message_with_prefix_and_newline_and_nul,
+ entry.text_message_with_prefix_and_newline(), os);
+ *os << "\n"
+ << " text_message_with_prefix: ";
+ PrintEscapedRangeTo(text_message_with_prefix_and_newline_and_nul,
+ entry.text_message_with_prefix(), os);
+ *os << "\n"
+ << " text_message_with_newline: ";
+ PrintEscapedRangeTo(text_message_with_prefix_and_newline_and_nul,
+ entry.text_message_with_newline(), os);
+ *os << "\n"
+ << " text_message: ";
+ PrintEscapedRangeTo(text_message_with_prefix_and_newline_and_nul,
+ entry.text_message(), os);
+ *os << "\n"
+ << " text_message_with_prefix_and_newline_c_str: ";
+ PrintEscapedRangeTo(
+ text_message_with_prefix_and_newline_and_nul,
+ // NOLINTNEXTLINE(bugprone-string-constructor)
+ absl::string_view(entry.text_message_with_prefix_and_newline_c_str(), 0),
+ os);
+ *os << "\n"
+ << " encoded_message (raw): \""
+ << absl::CHexEscape(entry.encoded_message()) << "\"\n"
+ << " encoded_message {\n";
+ absl::Span<const char> event = entry.encoded_message();
+ log_internal::ProtoField field;
+ while (field.DecodeFrom(&event)) {
+ switch (field.tag()) {
+ case EventTag::kFileName:
+ *os << " file_name: \"" << absl::CHexEscape(field.string_value())
+ << "\"\n";
+ break;
+ case EventTag::kFileLine:
+ *os << " file_line: " << field.int32_value() << "\n";
+ break;
+ case EventTag::kTimeNsecs:
+ *os << " time_nsecs: " << field.int64_value() << " ("
+ << absl::FromUnixNanos(field.int64_value()) << ")\n";
+ break;
+ case EventTag::kSeverity:
+ *os << " severity: " << field.int32_value();
+ switch (field.int32_value()) {
+ case Severity::FINEST:
+ *os << " (FINEST)";
+ break;
+ case Severity::FINER:
+ *os << " (FINER)";
+ break;
+ case Severity::FINE:
+ *os << " (FINE)";
+ break;
+ case Severity::VERBOSE_0:
+ *os << " (VERBOSE_0)";
+ break;
+ case Severity::CONFIG:
+ *os << " (CONFIG)";
+ break;
+ case Severity::INFO:
+ *os << " (INFO)";
+ break;
+ case Severity::NOTICE:
+ *os << " (NOTICE)";
+ break;
+ case Severity::WARNING:
+ *os << " (WARNING)";
+ break;
+ case Severity::ERROR:
+ *os << " (ERROR)";
+ break;
+ case Severity::SEVERE:
+ *os << " (SEVERE)";
+ break;
+ case Severity::FATAL:
+ *os << " (FATAL)";
+ break;
+ }
+ *os << "\n";
+ break;
+ case EventTag::kThreadId:
+ *os << " thread_id: " << field.int64_value() << "\n";
+ break;
+ case EventTag::kValue: {
+ *os << " value {\n";
+ auto value = field.bytes_value();
+ while (field.DecodeFrom(&value)) {
+ switch (field.tag()) {
+ case ValueTag::kString:
+ *os << " str: \"" << absl::CHexEscape(field.string_value())
+ << "\"\n";
+ break;
+ case ValueTag::kStringLiteral:
+ *os << " literal: \""
+ << absl::CHexEscape(field.string_value()) << "\"\n";
+ break;
+ default:
+ *os << " unknown field " << field.tag();
+ switch (field.type()) {
+ case log_internal::WireType::kVarint:
+ *os << " (VARINT): " << std::hex << std::showbase
+ << field.uint64_value() << std::dec << "\n";
+ break;
+ case log_internal::WireType::k64Bit:
+ *os << " (I64): " << std::hex << std::showbase
+ << field.uint64_value() << std::dec << "\n";
+ break;
+ case log_internal::WireType::kLengthDelimited:
+ *os << " (LEN): \"" << absl::CHexEscape(field.string_value())
+ << "\"\n";
+ break;
+ case log_internal::WireType::k32Bit:
+ *os << " (I32): " << std::hex << std::showbase
+ << field.uint32_value() << std::dec << "\n";
+ break;
+ }
+ break;
+ }
+ }
+ *os << " }\n";
+ break;
+ }
+ default:
+ *os << " unknown field " << field.tag();
+ switch (field.type()) {
+ case log_internal::WireType::kVarint:
+ *os << " (VARINT): " << std::hex << std::showbase
+ << field.uint64_value() << std::dec << "\n";
+ break;
+ case log_internal::WireType::k64Bit:
+ *os << " (I64): " << std::hex << std::showbase
+ << field.uint64_value() << std::dec << "\n";
+ break;
+ case log_internal::WireType::kLengthDelimited:
+ *os << " (LEN): \"" << absl::CHexEscape(field.string_value())
+ << "\"\n";
+ break;
+ case log_internal::WireType::k32Bit:
+ *os << " (I32): " << std::hex << std::showbase
+ << field.uint32_value() << std::dec << "\n";
+ break;
+ }
+ break;
+ }
+ }
+ *os << " }\n"
+ << " stacktrace: \"" << absl::CHexEscape(entry.stacktrace()) << "\"\n"
+ << "}";
+}
+
+ABSL_NAMESPACE_END
+} // namespace absl
diff --git a/absl/log/log_entry.h b/absl/log/log_entry.h
index 7a55dfe..c566856 100644
--- a/absl/log/log_entry.h
+++ b/absl/log/log_entry.h
@@ -25,6 +25,7 @@
#define ABSL_LOG_LOG_ENTRY_H_
#include <cstddef>
+#include <ostream>
#include <string>
#include "absl/base/attributes.h"
@@ -213,6 +214,7 @@
friend class log_internal::LogEntryTestPeer;
friend class log_internal::LogMessage;
+ friend void PrintTo(const absl::LogEntry& entry, std::ostream* os);
};
ABSL_NAMESPACE_END
diff --git a/absl/log/log_format_test.cc b/absl/log/log_format_test.cc
index 6b7d1e5..9f1cc6b 100644
--- a/absl/log/log_format_test.cc
+++ b/absl/log/log_format_test.cc
@@ -73,6 +73,7 @@
TEST(LogFormatTest, NoMessage) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int log_line = __LINE__ + 1;
auto do_log = [] { LOG(INFO); };
@@ -95,6 +96,7 @@
TYPED_TEST(CharLogFormatTest, Printable) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = 'x';
auto comparison_stream = ComparisonStream();
@@ -112,6 +114,7 @@
TYPED_TEST(CharLogFormatTest, Unprintable) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
constexpr auto value = static_cast<TypeParam>(0xeeu);
auto comparison_stream = ComparisonStream();
@@ -130,6 +133,7 @@
TEST(WideCharLogFormatTest, Printable) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(AllOf(TextMessage(Eq("€")),
ENCODED_MESSAGE(HasValues(
@@ -142,6 +146,7 @@
TEST(WideCharLogFormatTest, Unprintable) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// Using NEL (Next Line) Unicode character (U+0085).
// It is encoded as "\xC2\x85" in UTF-8.
@@ -163,6 +168,7 @@
TYPED_TEST(UnsignedIntLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = 224;
auto comparison_stream = ComparisonStream();
@@ -181,6 +187,7 @@
TYPED_TEST(UnsignedIntLogFormatTest, BitfieldPositive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -206,6 +213,7 @@
TYPED_TEST(SignedIntLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = 224;
auto comparison_stream = ComparisonStream();
@@ -224,6 +232,7 @@
TYPED_TEST(SignedIntLogFormatTest, Negative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = -112;
auto comparison_stream = ComparisonStream();
@@ -242,6 +251,7 @@
TYPED_TEST(SignedIntLogFormatTest, BitfieldPositive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -261,6 +271,7 @@
TYPED_TEST(SignedIntLogFormatTest, BitfieldNegative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -305,6 +316,7 @@
TYPED_TEST(UnsignedEnumLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = static_cast<TypeParam>(224);
auto comparison_stream = ComparisonStream();
@@ -323,6 +335,7 @@
TYPED_TEST(UnsignedEnumLogFormatTest, BitfieldPositive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -365,6 +378,7 @@
TYPED_TEST(SignedEnumLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = static_cast<TypeParam>(224);
auto comparison_stream = ComparisonStream();
@@ -383,6 +397,7 @@
TYPED_TEST(SignedEnumLogFormatTest, Negative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = static_cast<TypeParam>(-112);
auto comparison_stream = ComparisonStream();
@@ -401,6 +416,7 @@
TYPED_TEST(SignedEnumLogFormatTest, BitfieldPositive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -420,6 +436,7 @@
TYPED_TEST(SignedEnumLogFormatTest, BitfieldNegative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const struct {
TypeParam bits : 6;
@@ -441,6 +458,7 @@
TEST(FloatLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const float value = 6.02e23f;
auto comparison_stream = ComparisonStream();
@@ -458,6 +476,7 @@
TEST(FloatLogFormatTest, Negative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const float value = -6.02e23f;
auto comparison_stream = ComparisonStream();
@@ -475,6 +494,7 @@
TEST(FloatLogFormatTest, NegativeExponent) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const float value = 6.02e-23f;
auto comparison_stream = ComparisonStream();
@@ -492,6 +512,7 @@
TEST(DoubleLogFormatTest, Positive) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 6.02e23;
auto comparison_stream = ComparisonStream();
@@ -509,6 +530,7 @@
TEST(DoubleLogFormatTest, Negative) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = -6.02e23;
auto comparison_stream = ComparisonStream();
@@ -526,6 +548,7 @@
TEST(DoubleLogFormatTest, NegativeExponent) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 6.02e-23;
auto comparison_stream = ComparisonStream();
@@ -548,6 +571,7 @@
TYPED_TEST(FloatingPointLogFormatTest, Zero) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = 0.0;
auto comparison_stream = ComparisonStream();
@@ -565,6 +589,7 @@
TYPED_TEST(FloatingPointLogFormatTest, Integer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = 1.0;
auto comparison_stream = ComparisonStream();
@@ -582,6 +607,7 @@
TYPED_TEST(FloatingPointLogFormatTest, Infinity) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = std::numeric_limits<TypeParam>::infinity();
auto comparison_stream = ComparisonStream();
@@ -600,6 +626,7 @@
TYPED_TEST(FloatingPointLogFormatTest, NegativeInfinity) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = -std::numeric_limits<TypeParam>::infinity();
auto comparison_stream = ComparisonStream();
@@ -618,6 +645,7 @@
TYPED_TEST(FloatingPointLogFormatTest, NaN) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = std::numeric_limits<TypeParam>::quiet_NaN();
auto comparison_stream = ComparisonStream();
@@ -635,6 +663,7 @@
TYPED_TEST(FloatingPointLogFormatTest, NegativeNaN) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value =
std::copysign(std::numeric_limits<TypeParam>::quiet_NaN(), -1.0);
@@ -671,6 +700,7 @@
TYPED_TEST(VoidPtrLogFormatTest, Null) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = nullptr;
auto comparison_stream = ComparisonStream();
@@ -688,6 +718,7 @@
TYPED_TEST(VoidPtrLogFormatTest, NonNull) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = reinterpret_cast<TypeParam>(0xdeadbeefULL);
auto comparison_stream = ComparisonStream();
@@ -715,6 +746,7 @@
TYPED_TEST(VolatilePtrLogFormatTest, Null) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = nullptr;
auto comparison_stream = ComparisonStream();
@@ -742,6 +774,7 @@
TYPED_TEST(VolatilePtrLogFormatTest, NonNull) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const TypeParam value = reinterpret_cast<TypeParam>(0xdeadbeefLL);
auto comparison_stream = ComparisonStream();
@@ -777,6 +810,7 @@
TYPED_TEST(CharPtrLogFormatTest, Null) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// Streaming `([cv] char *)nullptr` into a `std::ostream` is UB, and some C++
// standard library implementations choose to crash. We take measures to log
@@ -797,6 +831,7 @@
TYPED_TEST(CharPtrLogFormatTest, NonNull) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam data[] = {'v', 'a', 'l', 'u', 'e', '\0'};
TypeParam* const value = data;
@@ -821,6 +856,7 @@
TYPED_TEST(WideCharPtrLogFormatTest, Null) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam* const value = nullptr;
@@ -834,6 +870,7 @@
TYPED_TEST(WideCharPtrLogFormatTest, NonNull) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam data[] = {'v', 'a', 'l', 'u', 'e', '\0'};
TypeParam* const value = data;
@@ -848,6 +885,7 @@
TEST(BoolLogFormatTest, True) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const bool value = true;
auto comparison_stream = ComparisonStream();
@@ -866,6 +904,7 @@
TEST(BoolLogFormatTest, False) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const bool value = false;
auto comparison_stream = ComparisonStream();
@@ -884,6 +923,7 @@
TEST(LogFormatTest, StringLiteral) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
auto comparison_stream = ComparisonStream();
comparison_stream << "value";
@@ -900,6 +940,7 @@
TEST(LogFormatTest, WideStringLiteral) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(AllOf(TextMessage(Eq("value")),
ENCODED_MESSAGE(HasValues(ElementsAre(
@@ -911,6 +952,7 @@
TEST(LogFormatTest, CharArray) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
char value[] = "value";
auto comparison_stream = ComparisonStream();
@@ -929,6 +971,7 @@
TEST(LogFormatTest, WideCharArray) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
wchar_t value[] = L"value";
@@ -967,6 +1010,7 @@
TYPED_TEST(WideStringLogFormatTest, NonLiterals) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = ABSL_LOG_INTERNAL_WIDE_LITERAL;
absl::string_view utf8_value = GetUtf8TestString();
@@ -981,6 +1025,7 @@
TEST(WideStringLogFormatTest, StringView) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
std::wstring_view value = ABSL_LOG_INTERNAL_WIDE_LITERAL;
absl::string_view utf8_value = GetUtf8TestString();
@@ -995,6 +1040,7 @@
TEST(WideStringLogFormatTest, Literal) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
absl::string_view utf8_value = GetUtf8TestString();
@@ -1011,6 +1057,7 @@
TYPED_TEST(WideStringLogFormatTest, IsolatedLowSurrogatesAreReplaced) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"AAA \xDC00 BBB";
// NOLINTNEXTLINE(readability/utf8)
@@ -1027,6 +1074,7 @@
TYPED_TEST(WideStringLogFormatTest,
DISABLED_IsolatedHighSurrogatesAreReplaced) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"AAA \xD800 BBB";
// NOLINTNEXTLINE(readability/utf8)
@@ -1044,6 +1092,7 @@
TYPED_TEST(WideStringLogFormatTest,
DISABLED_ConsecutiveHighSurrogatesAreReplaced) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"AAA \xD800\xD800 BBB";
// NOLINTNEXTLINE(readability/utf8)
@@ -1061,6 +1110,7 @@
TYPED_TEST(WideStringLogFormatTest,
DISABLED_HighHighLowSurrogateSequencesAreReplaced) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"AAA \xD800\xD800\xDC00 BBB";
// NOLINTNEXTLINE(readability/utf8)
@@ -1078,6 +1128,7 @@
TYPED_TEST(WideStringLogFormatTest,
DISABLED_TrailingHighSurrogatesAreReplaced) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"AAA \xD800";
// NOLINTNEXTLINE(readability/utf8)
@@ -1094,6 +1145,7 @@
TYPED_TEST(WideStringLogFormatTest, EmptyWideString) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
TypeParam value = L"";
@@ -1121,6 +1173,7 @@
TEST(LogFormatTest, Custom) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
CustomClass value;
auto comparison_stream = ComparisonStream();
@@ -1147,6 +1200,7 @@
TEST(LogFormatTest, CustomNonCopyable) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
CustomClassNonCopyable value;
auto comparison_stream = ComparisonStream();
@@ -1174,6 +1228,7 @@
TEST(LogFormatTest, AbslStringifyExample) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
Point p;
@@ -1205,6 +1260,7 @@
TEST(LogFormatTest, CustomWithAbslStringifyAndOstream) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
PointWithAbslStringifiyAndOstream p;
@@ -1228,6 +1284,7 @@
TEST(LogFormatTest, AbslStringifyStreamsNothing) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
PointStreamsNothing p;
@@ -1254,6 +1311,7 @@
TEST(LogFormatTest, AbslStringifyMultipleAppend) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
PointMultipleAppend p;
@@ -1269,6 +1327,7 @@
TEST(ManipulatorLogFormatTest, BoolAlphaTrue) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const bool value = true;
auto comparison_stream = ComparisonStream();
@@ -1293,6 +1352,7 @@
TEST(ManipulatorLogFormatTest, BoolAlphaFalse) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const bool value = false;
auto comparison_stream = ComparisonStream();
@@ -1317,6 +1377,7 @@
TEST(ManipulatorLogFormatTest, ShowPoint) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 77.0;
auto comparison_stream = ComparisonStream();
@@ -1341,6 +1402,7 @@
TEST(ManipulatorLogFormatTest, ShowPos) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 77;
auto comparison_stream = ComparisonStream();
@@ -1364,6 +1426,7 @@
TEST(ManipulatorLogFormatTest, UppercaseFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1388,6 +1451,7 @@
TEST(ManipulatorLogFormatTest, Hex) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 0x77;
auto comparison_stream = ComparisonStream();
@@ -1405,6 +1469,7 @@
TEST(ManipulatorLogFormatTest, Oct) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 077;
auto comparison_stream = ComparisonStream();
@@ -1423,6 +1488,7 @@
TEST(ManipulatorLogFormatTest, Dec) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 77;
auto comparison_stream = ComparisonStream();
@@ -1440,6 +1506,7 @@
TEST(ManipulatorLogFormatTest, ShowbaseHex) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 0x77;
auto comparison_stream = ComparisonStream();
@@ -1466,6 +1533,7 @@
TEST(ManipulatorLogFormatTest, ShowbaseOct) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 077;
auto comparison_stream = ComparisonStream();
@@ -1491,6 +1559,7 @@
TEST(ManipulatorLogFormatTest, UppercaseHex) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 0xbeef;
auto comparison_stream = ComparisonStream();
@@ -1518,6 +1587,7 @@
TEST(ManipulatorLogFormatTest, FixedFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1535,6 +1605,7 @@
TEST(ManipulatorLogFormatTest, ScientificFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1558,6 +1629,7 @@
#else
TEST(ManipulatorLogFormatTest, FixedAndScientificFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1591,6 +1663,7 @@
#else
TEST(ManipulatorLogFormatTest, HexfloatFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1612,6 +1685,7 @@
TEST(ManipulatorLogFormatTest, DefaultFloatFloat) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 7.7e7;
auto comparison_stream = ComparisonStream();
@@ -1629,6 +1703,7 @@
TEST(ManipulatorLogFormatTest, Ends) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
auto comparison_stream = ComparisonStream();
comparison_stream << std::ends;
@@ -1645,6 +1720,7 @@
TEST(ManipulatorLogFormatTest, Endl) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
auto comparison_stream = ComparisonStream();
comparison_stream << std::endl;
@@ -1662,6 +1738,7 @@
TEST(ManipulatorLogFormatTest, SetIosFlags) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 0x77;
auto comparison_stream = ComparisonStream();
@@ -1691,6 +1768,7 @@
TEST(ManipulatorLogFormatTest, SetBase) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 0x77;
auto comparison_stream = ComparisonStream();
@@ -1715,6 +1793,7 @@
TEST(ManipulatorLogFormatTest, SetPrecision) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 6.022140857e23;
auto comparison_stream = ComparisonStream();
@@ -1736,6 +1815,7 @@
TEST(ManipulatorLogFormatTest, SetPrecisionOverflow) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const double value = 6.022140857e23;
auto comparison_stream = ComparisonStream();
@@ -1753,6 +1833,7 @@
TEST(ManipulatorLogFormatTest, SetW) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 77;
auto comparison_stream = ComparisonStream();
@@ -1774,6 +1855,7 @@
TEST(ManipulatorLogFormatTest, Left) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = -77;
auto comparison_stream = ComparisonStream();
@@ -1791,6 +1873,7 @@
TEST(ManipulatorLogFormatTest, Right) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = -77;
auto comparison_stream = ComparisonStream();
@@ -1808,6 +1891,7 @@
TEST(ManipulatorLogFormatTest, Internal) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = -77;
auto comparison_stream = ComparisonStream();
@@ -1825,6 +1909,7 @@
TEST(ManipulatorLogFormatTest, SetFill) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
const int value = 77;
auto comparison_stream = ComparisonStream();
@@ -1851,6 +1936,7 @@
TEST(ManipulatorLogFormatTest, FromCustom) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
FromCustomClass value;
auto comparison_stream = ComparisonStream();
@@ -1873,6 +1959,7 @@
TEST(ManipulatorLogFormatTest, CustomClassStreamsNothing) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
StreamsNothing value;
auto comparison_stream = ComparisonStream();
@@ -1900,6 +1987,7 @@
TEST(ManipulatorLogFormatTest, IOManipsDoNotAffectAbslStringify) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
PointPercentV p;
@@ -1915,6 +2003,7 @@
TEST(StructuredLoggingOverflowTest, TruncatesStrings) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// This message is too long and should be truncated to some unspecified size
// no greater than the buffer size but not too much less either. It should be
@@ -1937,6 +2026,7 @@
TEST(StructuredLoggingOverflowTest, TruncatesWideStrings) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// This message is too long and should be truncated to some unspecified size
// no greater than the buffer size but not too much less either. It should be
@@ -1967,6 +2057,7 @@
TEST(StructuredLoggingOverflowTest, TruncatesInsertionOperators) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// This message is too long and should be truncated to some unspecified size
// no greater than the buffer size but not too much less either. It should be
@@ -2018,6 +2109,7 @@
// sizes. To put any data in the field we need a fifth byte.
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit), Each(Eq('x'))))),
@@ -2028,6 +2120,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 1), Each(Eq('x'))))),
@@ -2038,6 +2131,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 2), Each(Eq('x'))))),
@@ -2048,6 +2142,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 3), Each(Eq('x'))))),
@@ -2058,6 +2153,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrAndOneLiteralThat(
AllOf(SizeIs(longest_fit - 4), Each(Eq('x'))),
@@ -2070,6 +2166,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrAndOneLiteralThat(
@@ -2087,6 +2184,7 @@
// sizes. To put any data in the field we need a fifth byte.
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit), Each(Eq('x'))))),
@@ -2097,6 +2195,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 1), Each(Eq('x'))))),
@@ -2108,6 +2207,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 2), Each(Eq('x'))))),
@@ -2119,6 +2219,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 3), Each(Eq('x'))))),
@@ -2130,6 +2231,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ENCODED_MESSAGE(HasOneStrThat(
AllOf(SizeIs(longest_fit - 4), Each(Eq('x'))))),
@@ -2143,6 +2245,7 @@
}
{
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
Send(AllOf(ENCODED_MESSAGE(HasTwoStrsThat(
diff --git a/absl/log/log_modifier_methods_test.cc b/absl/log/log_modifier_methods_test.cc
index 4cee0c0..7893557 100644
--- a/absl/log/log_modifier_methods_test.cc
+++ b/absl/log/log_modifier_methods_test.cc
@@ -60,6 +60,7 @@
TEST(TailCallsModifiesTest, AtLocationFileLine) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -89,6 +90,7 @@
TEST(TailCallsModifiesTest, NoPrefix) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(AllOf(Prefix(IsFalse()), TextPrefix(IsEmpty()),
TextMessageWithPrefix(Eq("hello world")))));
@@ -99,6 +101,7 @@
TEST(TailCallsModifiesTest, NoPrefixNoMessageNoShirtNoShoesNoService) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(Prefix(IsFalse()), TextPrefix(IsEmpty()),
@@ -110,6 +113,7 @@
TEST(TailCallsModifiesTest, WithVerbosity) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(Verbosity(Eq(2))));
@@ -119,6 +123,7 @@
TEST(TailCallsModifiesTest, WithVerbosityNoVerbosity) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(Verbosity(Eq(absl::LogEntry::kNoVerbosityLevel))));
@@ -130,6 +135,7 @@
TEST(TailCallsModifiesTest, WithTimestamp) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(Timestamp(Eq(absl::UnixEpoch()))));
@@ -139,6 +145,7 @@
TEST(TailCallsModifiesTest, WithThreadID) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink,
Send(AllOf(ThreadID(Eq(absl::LogEntry::tid_t{1234})))));
@@ -157,6 +164,7 @@
} forwarding_sink;
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -185,6 +193,7 @@
TEST(TailCallsModifiesTest, WithPerror) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -211,6 +220,7 @@
{
absl::ScopedMockLog test_sink(
absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
auto do_log = [&test_sink] {
LOG(QFATAL).ToSinkOnly(&test_sink.UseAsLocalSink()) << "hello world";
diff --git a/absl/log/log_streamer_test.cc b/absl/log/log_streamer_test.cc
index 4fe88e9..f226fef 100644
--- a/absl/log/log_streamer_test.cc
+++ b/absl/log/log_streamer_test.cc
@@ -66,6 +66,7 @@
TEST(LogStreamerTest, LogInfoStreamer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -87,6 +88,7 @@
TEST(LogStreamerTest, LogWarningStreamer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -109,6 +111,7 @@
TEST(LogStreamerTest, LogErrorStreamer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -133,6 +136,7 @@
EXPECT_EXIT(
{
absl::ScopedMockLog test_sink;
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -164,6 +168,7 @@
#ifdef NDEBUG
TEST(LogStreamerTest, LogDebugFatalStreamer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -188,6 +193,7 @@
EXPECT_EXIT(
{
absl::ScopedMockLog test_sink;
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -218,6 +224,7 @@
TEST(LogStreamerTest, LogStreamer) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -244,6 +251,7 @@
EXPECT_EXIT(
{
absl::ScopedMockLog test_sink;
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
@@ -275,6 +283,7 @@
TEST(LogStreamerTest, PassedByReference) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -291,6 +300,7 @@
TEST(LogStreamerTest, StoredAsLocal) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
auto streamer = absl::LogInfoStreamer("path/file.cc", 1234);
WriteToStream("foo", &streamer.stream());
@@ -328,6 +338,7 @@
TEST(LogStreamerTest, LogsEmptyLine) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(test_sink, Send(AllOf(SourceFilename(Eq("path/file.cc")),
SourceLine(Eq(1234)), TextMessage(Eq("")),
@@ -345,8 +356,7 @@
EXPECT_EXIT(
{
absl::ScopedMockLog test_sink;
-
- EXPECT_CALL(test_sink, Log)
+ EXPECT_CALL(test_sink, Send)
.Times(AnyNumber())
.WillRepeatedly(DeathTestUnexpectedLogging());
@@ -368,6 +378,7 @@
TEST(LogStreamerTest, MoveConstruction) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
EXPECT_CALL(
test_sink,
@@ -389,6 +400,7 @@
TEST(LogStreamerTest, MoveAssignment) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
testing::InSequence seq;
EXPECT_CALL(
@@ -423,6 +435,7 @@
TEST(LogStreamerTest, CorrectDefaultFlags) {
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
+ EXPECT_CALL(test_sink, Send).Times(0);
// The `boolalpha` and `showbase` flags should be set by default, to match
// `LOG`.
diff --git a/absl/log/scoped_mock_log.h b/absl/log/scoped_mock_log.h
index a383066..9700873 100644
--- a/absl/log/scoped_mock_log.h
+++ b/absl/log/scoped_mock_log.h
@@ -160,7 +160,13 @@
// from the log message text, log message path and log message severity.
//
// If no expectations are specified for this mock, the default action is to
- // forward the call to the `Log` mock.
+ // forward the call to the `Log` mock. Tests using `Send` are advised to call
+ //
+ // `EXPECT_CALL(sink, Send).Times(0);`
+ //
+ // prior to specifying other expectations to suppress forwarding to `Log`.
+ // That way, unexpected calls show up as calls to `Send` with complete data
+ // and metadata for easier debugging.
MOCK_METHOD(void, Send, (const absl::LogEntry&));
// Implements the mock method:
diff --git a/absl/log/structured_test.cc b/absl/log/structured_test.cc
index 9fe0756..cde8199 100644
--- a/absl/log/structured_test.cc
+++ b/absl/log/structured_test.cc
@@ -50,6 +50,7 @@
stream << LoggingDefaults << absl::LogAsLiteral(not_a_literal);
absl::ScopedMockLog sink;
+ EXPECT_CALL(sink, Send).Times(0);
EXPECT_CALL(sink, Send(AllOf(TextMessage(MatchesOstream(stream)),
TextMessage(Eq("hello world")),