1 require File.dirname(__FILE__) + '/abstract_unit'
4 class BufferedLoggerTest < Test::Unit::TestCase
6 @message = "A debug message"
7 @integer_message = 12345
9 @logger = ActiveSupport::BufferedLogger.new(@output)
12 def test_should_log_debugging_message_when_debugging
13 @logger.level = Logger::DEBUG
14 @logger.add(Logger::DEBUG, @message)
15 assert @output.string.include?(@message)
18 def test_should_not_log_debug_messages_when_log_level_is_info
19 @logger.level = Logger::INFO
20 @logger.add(Logger::DEBUG, @message)
21 assert ! @output.string.include?(@message)
24 def test_should_add_message_passed_as_block_when_using_add
25 @logger.level = Logger::INFO
26 @logger.add(Logger::INFO) {@message}
27 assert @output.string.include?(@message)
30 def test_should_add_message_passed_as_block_when_using_shortcut
31 @logger.level = Logger::INFO
32 @logger.info {@message}
33 assert @output.string.include?(@message)
36 def test_should_convert_message_to_string
37 @logger.level = Logger::INFO
38 @logger.info @integer_message
39 assert @output.string.include?(@integer_message.to_s)
42 def test_should_convert_message_to_string_when_passed_in_block
43 @logger.level = Logger::INFO
44 @logger.info {@integer_message}
45 assert @output.string.include?(@integer_message.to_s)
48 def test_should_not_evaluate_block_if_message_wont_be_logged
49 @logger.level = Logger::INFO
51 @logger.add(Logger::DEBUG) {evaluated = true}
52 assert evaluated == false
55 def test_should_not_mutate_message
56 message_copy = @message.dup
58 assert_equal message_copy, @message
62 [false, nil, 0].each do |disable|
63 define_method "test_disabling_auto_flush_with_#{disable.inspect}_should_buffer_until_explicit_flush" do
64 @logger.auto_flushing = disable
67 @logger.info 'wait for it..'
68 assert @output.string.empty?, @output.string
72 assert !@output.string.empty?, @logger.buffer.size
75 define_method "test_disabling_auto_flush_with_#{disable.inspect}_should_flush_at_max_buffer_size_as_failsafe" do
76 @logger.auto_flushing = disable
77 assert_equal ActiveSupport::BufferedLogger::MAX_BUFFER_SIZE, @logger.auto_flushing
79 (ActiveSupport::BufferedLogger::MAX_BUFFER_SIZE - 1).times do
80 @logger.info 'wait for it..'
81 assert @output.string.empty?, @output.string
84 @logger.info 'there it is.'
85 assert !@output.string.empty?, @logger.buffer.size
89 def test_should_know_if_its_loglevel_is_below_a_given_level
90 ActiveSupport::BufferedLogger::Severity.constants.each do |level|
91 @logger.level = ActiveSupport::BufferedLogger::Severity.const_get(level) - 1
92 assert @logger.send("#{level.downcase}?"), "didn't know if it was #{level.downcase}? or below"
96 def test_should_auto_flush_every_n_messages
97 @logger.auto_flushing = 5
100 @logger.info 'wait for it..'
101 assert @output.string.empty?, @output.string
104 @logger.info 'there it is.'
105 assert !@output.string.empty?, @output.string