1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Broadcast #silence on logger. Rewrite tests.

This commit is contained in:
Kevin McPhillips 2016-06-09 20:37:15 -04:00
parent f9a39e0d51
commit 99bd118eec
2 changed files with 121 additions and 31 deletions

View file

@ -55,6 +55,24 @@ module ActiveSupport
logger.local_level = level if logger.respond_to?(:local_level=) logger.local_level = level if logger.respond_to?(:local_level=)
super(level) if respond_to?(:local_level=) super(level) if respond_to?(:local_level=)
end end
define_method(:silence) do |level = Logger::ERROR, &block|
if logger.respond_to?(:silence)
logger.silence(level) do
if respond_to?(:silence)
super(level, &block)
else
block.call(level)
end
end
else
if respond_to?(:silence)
super(level, &block)
else
block.call(level)
end
end
end
end end
end end

View file

@ -3,75 +3,147 @@ require 'abstract_unit'
module ActiveSupport module ActiveSupport
class BroadcastLoggerTest < TestCase class BroadcastLoggerTest < TestCase
attr_reader :logger, :log1, :log2 attr_reader :logger, :log1, :log2
def setup
setup do
@log1 = FakeLogger.new @log1 = FakeLogger.new
@log2 = FakeLogger.new @log2 = FakeLogger.new
@log1.extend Logger.broadcast @log2 @log1.extend Logger.broadcast @log2
@logger = @log1 @logger = @log1
end end
def test_debug Logger::Severity.constants.each do |level_name|
logger.debug "foo" method = level_name.downcase
assert_equal 'foo', log1.adds.first[2] level = Logger::Severity.const_get(level_name)
assert_equal 'foo', log2.adds.first[2]
test "##{method} adds the message to all loggers" do
logger.send(method, "msg")
assert_equal [level, "msg", nil], log1.adds.first
assert_equal [level, "msg", nil], log2.adds.first
end
end end
def test_close test "#close broadcasts to all loggers" do
logger.close logger.close
assert log1.closed, 'should be closed' assert log1.closed, 'should be closed'
assert log2.closed, 'should be closed' assert log2.closed, 'should be closed'
end end
def test_chevrons test "#<< shovels the value into all loggers" do
logger << "foo" logger << "foo"
assert_equal %w{ foo }, log1.chevrons assert_equal %w{ foo }, log1.chevrons
assert_equal %w{ foo }, log2.chevrons assert_equal %w{ foo }, log2.chevrons
end end
def test_level test "#level= assigns the level to all loggers" do
assert_nil logger.level assert_equal ::Logger::DEBUG, logger.level
logger.level = 10 logger.level = ::Logger::FATAL
assert_equal 10, log1.level
assert_equal 10, log2.level assert_equal ::Logger::FATAL, log1.level
assert_equal ::Logger::FATAL, log2.level
end end
def test_progname test "#progname= assigns to all the loggers" do
assert_nil logger.progname assert_nil logger.progname
logger.progname = 10 logger.progname = ::Logger::FATAL
assert_equal 10, log1.progname
assert_equal 10, log2.progname assert_equal ::Logger::FATAL, log1.progname
assert_equal ::Logger::FATAL, log2.progname
end end
def test_formatter test "#formatter= assigns to all the loggers" do
assert_nil logger.formatter assert_nil logger.formatter
logger.formatter = 10 logger.formatter = ::Logger::FATAL
assert_equal 10, log1.formatter
assert_equal 10, log2.formatter assert_equal ::Logger::FATAL, log1.formatter
assert_equal ::Logger::FATAL, log2.formatter
end
test "#local_level= assigns the local_level to all loggers" do
assert_equal ::Logger::DEBUG, logger.local_level
logger.local_level = ::Logger::FATAL
assert_equal ::Logger::FATAL, log1.local_level
assert_equal ::Logger::FATAL, log2.local_level
end
test "#silence silences all loggers below the default level of ERROR" do
logger.silence do
logger.debug "test"
end
assert_equal [], log1.adds
assert_equal [], log2.adds
end
test "#silence does not silence at or above ERROR" do
logger.silence do
logger.error "from error"
logger.unknown "from unknown"
end
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], log1.adds
assert_equal [[::Logger::ERROR, "from error", nil], [::Logger::UNKNOWN, "from unknown", nil]], log2.adds
end
test "#silence allows you to override the silence level" do
logger.silence(::Logger::FATAL) do
logger.error "unseen"
logger.fatal "seen"
end
assert_equal [[::Logger::FATAL, "seen", nil]], log1.adds
assert_equal [[::Logger::FATAL, "seen", nil]], log2.adds
end end
class FakeLogger class FakeLogger
include LoggerSilence
attr_reader :adds, :closed, :chevrons attr_reader :adds, :closed, :chevrons
attr_accessor :level, :progname, :formatter attr_accessor :level, :progname, :formatter, :local_level
def initialize def initialize
@adds = [] @adds = []
@closed = false @closed = false
@chevrons = [] @chevrons = []
@level = nil @level = ::Logger::DEBUG
@progname = nil @local_level = ::Logger::DEBUG
@formatter = nil @progname = nil
@formatter = nil
end end
def debug msg, &block def debug(message, &block)
add(:omg, nil, msg, &block) add(::Logger::DEBUG, message, &block)
end
def info(message, &block)
add(::Logger::INFO, message, &block)
end
def warn(message, &block)
add(::Logger::WARN, message, &block)
end
def error(message, &block)
add(::Logger::ERROR, message, &block)
end
def fatal(message, &block)
add(::Logger::FATAL, message, &block)
end
def unknown(message, &block)
add(::Logger::UNKNOWN, message, &block)
end end
def << x def << x
@chevrons << x @chevrons << x
end end
def add(*args) def add(message_level, message=nil, progname=nil, &block)
@adds << args @adds << [message_level, message, progname] if message_level >= local_level
end end
def close def close