Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3565)

Unified Diff: base/test/mock_log.h

Issue 966423003: Moving ScopedMockLog from net/test to base/test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@separate-port-range
Patch Set: Addressed Ricardo's code review feedback. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/test/BUILD.gn ('k') | base/test/mock_log.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/test/mock_log.h
diff --git a/net/test/scoped_mock_log.h b/base/test/mock_log.h
similarity index 41%
rename from net/test/scoped_mock_log.h
rename to base/test/mock_log.h
index e1edfcccde8cd5150708a792043799b41cc8cc00..315ef1fb2f088d121b92d27c68d32cd020513899 100644
--- a/net/test/scoped_mock_log.h
+++ b/base/test/mock_log.h
@@ -1,23 +1,26 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef NET_QUIC_TEST_TOOLS_SCOPED_MOCK_LOG_H_
-#define NET_QUIC_TEST_TOOLS_SCOPED_MOCK_LOG_H_
+#ifndef BASE_TEST_MOCK_LOG_H_
+#define BASE_TEST_MOCK_LOG_H_
+
+#include <string>
#include "base/logging.h"
+#include "base/macros.h"
+#include "base/synchronization/lock.h"
#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-namespace net {
+namespace base {
namespace test {
-// A ScopedMockLog object intercepts LOG() messages issued during its
-// lifespan. Using this together with gMock, it's very easy to test
-// how a piece of code calls LOG(). The typical usage:
+// A MockLog object intercepts LOG() messages issued during its lifespan. Using
+// this together with gMock, it's very easy to test how a piece of code calls
+// LOG(). The typical usage:
//
// TEST(FooTest, LogsCorrectly) {
-// ScopedMockLog log;
+// MockLog log;
//
// // We expect the WARNING "Something bad!" exactly twice.
// EXPECT_CALL(log, Log(WARNING, _, "Something bad!"))
@@ -31,51 +34,46 @@ namespace test {
// Foo(); // Exercises the code under test.
// }
//
-// CAVEAT: base/logging does not allow a thread to call LOG() again
-// when it's already inside a LOG() call. Doing so will cause a
-// deadlock. Therefore, it's the user's responsibility to not call
-// LOG() in an action triggered by ScopedMockLog::Log(). You may call
-// RAW_LOG() instead.
-class ScopedMockLog {
+// CAVEAT: base/logging does not allow a thread to call LOG() again when it's
+// already inside a LOG() call. Doing so will cause a deadlock. Therefore,
+// it's the user's responsibility to not call LOG() in an action triggered by
+// MockLog::Log(). You may call RAW_LOG() instead.
+class MockLog {
public:
- // Creates a ScopedMockLog object that is not capturing logs.
- // If it were to start to capture logs, it could be a problem if
- // some other threads already exist and are logging, as the user
- // hasn't had a chance to set up expectation on this object yet
- // (calling a mock method before setting the expectation is
+ // Creates a MockLog object that is not capturing logs. If it were to start
+ // to capture logs, it could be a problem if some other threads already exist
+ // and are logging, as the user hasn't had a chance to set up expectation on
+ // this object yet (calling a mock method before setting the expectation is
// UNDEFINED behavior).
- ScopedMockLog();
+ MockLog();
// When the object is destructed, it stops intercepting logs.
- ~ScopedMockLog();
+ ~MockLog();
// Starts log capturing if the object isn't already doing so.
- // Otherwise crashes. Usually this method is called in the same
- // thread that created this object. It is the user's responsibility
- // to not call this method if another thread may be calling it or
- // StopCapturingLogs() at the same time.
+ // Otherwise crashes.
void StartCapturingLogs();
- // Stops log capturing if the object is capturing logs. Otherwise
- // crashes. Usually this method is called in the same thread that
- // created this object. It is the user's responsibility to not call
- // this method if another thread may be calling it or
- // StartCapturingLogs() at the same time.
+ // Stops log capturing if the object is capturing logs. Otherwise crashes.
void StopCapturingLogs();
- // Sets the Log Message Handler that gets passed every log message before
- // it's sent to other log destinations (if any).
- // Returns true to signal that it handled the message and the message
- // should not be sent to other log destinations.
- MOCK_METHOD5(Log, bool(int severity,
- const char* file,
- int line,
- size_t message_start,
- const std::string& str));
+ // Log method is invoked for every log message before it's sent to other log
+ // destinations (if any). The method should return true to signal that it
+ // handled the message and the message should not be sent to other log
+ // destinations.
+ MOCK_METHOD5(Log,
+ bool(int severity,
+ const char* file,
+ int line,
+ size_t message_start,
+ const std::string& str));
private:
- // The currently active scoped mock log.
- static ScopedMockLog* g_instance_;
+ // The currently active mock log.
+ static MockLog* g_instance_;
+
+ // Lock protecting access to g_instance_.
+ static Lock g_lock;
// Static function which is set as the logging message handler.
// Called once for each message.
@@ -88,11 +86,13 @@ class ScopedMockLog {
// True if this object is currently capturing logs.
bool is_capturing_logs_;
- // The previous handler to restore when the ScopedMockLog is destroyed.
+ // The previous handler to restore when the MockLog is destroyed.
logging::LogMessageHandlerFunction previous_handler_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockLog);
};
} // namespace test
-} // namespace net
+} // namespace base
-#endif // NET_QUIC_TEST_TOOLS_SCOPED_MOCK_LOG_H_
+#endif // BASE_TEST_MOCK_LOG_H_
« no previous file with comments | « base/test/BUILD.gn ('k') | base/test/mock_log.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698