aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/logger_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/test/logger_test.rb')
-rw-r--r--activesupport/test/logger_test.rb123
1 files changed, 123 insertions, 0 deletions
diff --git a/activesupport/test/logger_test.rb b/activesupport/test/logger_test.rb
new file mode 100644
index 0000000000..eedeca30a8
--- /dev/null
+++ b/activesupport/test/logger_test.rb
@@ -0,0 +1,123 @@
+require 'abstract_unit'
+require 'multibyte_test_helpers'
+require 'stringio'
+require 'fileutils'
+require 'tempfile'
+
+class LoggerTest < ActiveSupport::TestCase
+ include MultibyteTestHelpers
+
+ Logger = ActiveSupport::Logger
+
+ def setup
+ @message = "A debug message"
+ @integer_message = 12345
+ @output = StringIO.new
+ @logger = Logger.new(@output)
+ end
+
+ def test_write_binary_data_to_existing_file
+ t = Tempfile.new ['development', 'log']
+ t.binmode
+ t.write 'hi mom!'
+ t.close
+
+ f = File.open(t.path, 'w')
+ f.binmode
+
+ logger = Logger.new f
+ logger.level = Logger::DEBUG
+
+ str = "\x80"
+ str.force_encoding("ASCII-8BIT")
+
+ logger.add Logger::DEBUG, str
+ ensure
+ logger.close
+ t.close true
+ end
+
+ def test_write_binary_data_create_file
+ fname = File.join Dir.tmpdir, 'lol', 'rofl.log'
+ FileUtils.mkdir_p File.dirname(fname)
+ f = File.open(fname, 'w')
+ f.binmode
+
+ logger = Logger.new f
+ logger.level = Logger::DEBUG
+
+ str = "\x80"
+ str.force_encoding("ASCII-8BIT")
+
+ logger.add Logger::DEBUG, str
+ ensure
+ logger.close
+ File.unlink fname
+ end
+
+ def test_should_log_debugging_message_when_debugging
+ @logger.level = Logger::DEBUG
+ @logger.add(Logger::DEBUG, @message)
+ assert @output.string.include?(@message)
+ end
+
+ def test_should_not_log_debug_messages_when_log_level_is_info
+ @logger.level = Logger::INFO
+ @logger.add(Logger::DEBUG, @message)
+ assert ! @output.string.include?(@message)
+ end
+
+ def test_should_add_message_passed_as_block_when_using_add
+ @logger.level = Logger::INFO
+ @logger.add(Logger::INFO) {@message}
+ assert @output.string.include?(@message)
+ end
+
+ def test_should_add_message_passed_as_block_when_using_shortcut
+ @logger.level = Logger::INFO
+ @logger.info {@message}
+ assert @output.string.include?(@message)
+ end
+
+ def test_should_convert_message_to_string
+ @logger.level = Logger::INFO
+ @logger.info @integer_message
+ assert @output.string.include?(@integer_message.to_s)
+ end
+
+ def test_should_convert_message_to_string_when_passed_in_block
+ @logger.level = Logger::INFO
+ @logger.info {@integer_message}
+ assert @output.string.include?(@integer_message.to_s)
+ end
+
+ def test_should_not_evaluate_block_if_message_wont_be_logged
+ @logger.level = Logger::INFO
+ evaluated = false
+ @logger.add(Logger::DEBUG) {evaluated = true}
+ assert evaluated == false
+ end
+
+ def test_should_not_mutate_message
+ message_copy = @message.dup
+ @logger.info @message
+ assert_equal message_copy, @message
+ end
+
+ def test_should_know_if_its_loglevel_is_below_a_given_level
+ Logger::Severity.constants.each do |level|
+ next if level.to_s == 'UNKNOWN'
+ @logger.level = Logger::Severity.const_get(level) - 1
+ assert @logger.send("#{level.downcase}?"), "didn't know if it was #{level.downcase}? or below"
+ end
+ end
+
+ def test_buffer_multibyte
+ @logger.info(UNICODE_STRING)
+ @logger.info(BYTE_STRING)
+ assert @output.string.include?(UNICODE_STRING)
+ byte_string = @output.string.dup
+ byte_string.force_encoding("ASCII-8BIT")
+ assert byte_string.include?(BYTE_STRING)
+ end
+end