scoped_mock_log.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/test/scoped_mock_log.h" 6 7#include "base/logging.h" 8 9namespace net { 10namespace test { 11 12// static 13ScopedMockLog* ScopedMockLog::g_instance_ = NULL; 14 15ScopedMockLog::ScopedMockLog() : is_capturing_logs_(false) {} 16 17ScopedMockLog::~ScopedMockLog() { 18 if (is_capturing_logs_) { 19 StopCapturingLogs(); 20 } 21} 22 23void ScopedMockLog::StartCapturingLogs() { 24 // We don't use CHECK(), which can generate a new LOG message, and 25 // thus can confuse ScopedMockLog objects or other registered 26 // LogSinks. 27 RAW_CHECK(!is_capturing_logs_); 28 RAW_CHECK(!g_instance_); 29 30 is_capturing_logs_ = true; 31 g_instance_ = this; 32 previous_handler_ = logging::GetLogMessageHandler(); 33 logging::SetLogMessageHandler(LogMessageHandler); 34} 35 36void ScopedMockLog::StopCapturingLogs() { 37 // We don't use CHECK(), which can generate a new LOG message, and 38 // thus can confuse ScopedMockLog objects or other registered 39 // LogSinks. 40 RAW_CHECK(is_capturing_logs_); 41 RAW_CHECK(g_instance_ == this); 42 43 is_capturing_logs_ = false; 44 logging::SetLogMessageHandler(previous_handler_); 45 g_instance_ = NULL; 46} 47 48// static 49bool ScopedMockLog::LogMessageHandler(int severity, 50 const char* file, 51 int line, 52 size_t message_start, 53 const std::string& str) { 54 return g_instance_->Log(severity, file, line, message_start, str); 55} 56 57} // namespace test 58} // namespace net 59