mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
9cf1617029
Allow users to formally reference and set default log formatters through an api on the Capistrano::Logger singleton. - use `Capistrano::Logger.default_formatters` to refer to the current defaults - use `Capistrano::Logger.default_formatters=` to set custom defaults
149 lines
5.4 KiB
Ruby
149 lines
5.4 KiB
Ruby
require File.expand_path("../utils", __FILE__)
|
|
require 'capistrano/logger'
|
|
require 'stringio'
|
|
|
|
Capistrano::Logger.class_eval do
|
|
# Allows formatters to be changed during tests
|
|
def self.formatters=(formatters)
|
|
@formatters = formatters
|
|
@sorted_formatters = nil
|
|
end
|
|
end
|
|
|
|
class LoggerFormattingTest < Test::Unit::TestCase
|
|
def setup
|
|
@io = StringIO.new
|
|
@io.stubs(:tty?).returns(true)
|
|
@logger = Capistrano::Logger.new(:output => @io, :level => 3)
|
|
end
|
|
|
|
def test_matching_with_style_and_color
|
|
Capistrano::Logger.formatters = [{ :match => /^err ::/, :color => :red, :style => :underscore, :level => 0 }]
|
|
@logger.log(0, "err :: Error Occurred")
|
|
assert @io.string.include? "\e[4;31merr :: Error Occurred\e[0m"
|
|
end
|
|
|
|
def test_style_without_color
|
|
Capistrano::Logger.formatters = [{ :match => /.*/, :style => :underscore, :level => 0 }]
|
|
@logger.log(0, "test message")
|
|
# Default color should be blank (0m)
|
|
assert @io.string.include? "\e[4;0mtest message\e[0m"
|
|
end
|
|
|
|
def test_prepending_text
|
|
Capistrano::Logger.formatters = [{ :match => /^executing/, :level => 0, :prepend => '== Currently ' }]
|
|
@logger.log(0, "executing task")
|
|
assert @io.string.include? '== Currently executing task'
|
|
end
|
|
|
|
def test_replacing_matched_text
|
|
Capistrano::Logger.formatters = [{ :match => /^executing/, :level => 0, :replace => 'running' }]
|
|
@logger.log(0, "executing task")
|
|
assert @io.string.include? 'running task'
|
|
end
|
|
|
|
def test_prepending_timestamps
|
|
Capistrano::Logger.formatters = [{ :match => /.*/, :level => 0, :timestamp => true }]
|
|
@logger.log(0, "test message")
|
|
assert @io.string.match /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} test message/
|
|
end
|
|
|
|
def test_formatter_priorities
|
|
Capistrano::Logger.formatters = [
|
|
{ :match => /.*/, :color => :red, :level => 0, :priority => -10 },
|
|
{ :match => /.*/, :color => :blue, :level => 0, :priority => -20, :prepend => '###' }
|
|
]
|
|
|
|
@logger.log(0, "test message")
|
|
# Only the red formatter (color 31) should be applied.
|
|
assert @io.string.include? "\e[31mtest message"
|
|
# The blue formatter should not have prepended $$$
|
|
assert !@io.string.include?('###')
|
|
end
|
|
|
|
def test_no_formatting_if_no_color_or_style
|
|
Capistrano::Logger.formatters = []
|
|
@logger.log(0, "test message")
|
|
assert @io.string.include? "*** test message"
|
|
end
|
|
|
|
def test_formatter_log_levels
|
|
Capistrano::Logger.formatters = [{ :match => /.*/, :color => :blue, :level => 3 }]
|
|
@logger.log(0, "test message")
|
|
# Should not match log level
|
|
assert @io.string.include? "*** test message"
|
|
|
|
clear_logger
|
|
@logger.log(3, "test message")
|
|
# Should match log level and apply blue color
|
|
assert @io.string.include? "\e[34mtest message"
|
|
end
|
|
|
|
private
|
|
|
|
def colorize(message, color, style = nil)
|
|
style = "#{style};" if style
|
|
"\e[#{style}#{color}m" + message + "\e[0m"
|
|
end
|
|
|
|
def clear_logger
|
|
@io = StringIO.new
|
|
@io.stubs(:tty?).returns(true)
|
|
@logger.device = @io
|
|
end
|
|
end
|
|
|
|
class DefaultLoggerFormattersTest < Test::Unit::TestCase
|
|
def setup
|
|
@expected_default_formatter_values = [
|
|
# TRACE
|
|
{ :match => /command finished/, :color => :white, :style => :dim, :level => 3, :priority => -10 },
|
|
{ :match => /executing locally/, :color => :yellow, :level => 3, :priority => -20 },
|
|
|
|
# DEBUG
|
|
{ :match => /executing `.*/, :color => :green, :level => 2, :priority => -10, :timestamp => true },
|
|
{ :match => /.*/, :color => :yellow, :level => 2, :priority => -30 },
|
|
|
|
# INFO
|
|
{ :match => /.*out\] (fatal:|ERROR:).*/, :color => :red, :level => 1, :priority => -10 },
|
|
{ :match => /Permission denied/, :color => :red, :level => 1, :priority => -20 },
|
|
{ :match => /sh: .+: command not found/, :color => :magenta, :level => 1, :priority => -30 },
|
|
|
|
# IMPORTANT
|
|
{ :match => /^err ::/, :color => :red, :level => 0, :priority => -10 },
|
|
{ :match => /.*/, :color => :blue, :level => 0, :priority => -20 }
|
|
]
|
|
|
|
@custom_default_formatter_values = [
|
|
{ :match => /.*/, :color => :white }
|
|
]
|
|
|
|
end
|
|
|
|
def test_default_formatters_api
|
|
assert Capistrano::Logger.respond_to? :default_formatters
|
|
assert Capistrano::Logger.respond_to? :default_formatters=
|
|
end
|
|
|
|
def test_default_formatters_values
|
|
assert_equal @expected_default_formatter_values, Capistrano::Logger.default_formatters
|
|
assert_equal @expected_default_formatter_values, Capistrano::Logger.instance_variable_get("@formatters")
|
|
assert_equal nil, Capistrano::Logger.instance_variable_get("@sorted_formatters")
|
|
end
|
|
|
|
def test_set_default_formatters_values
|
|
# when given an array
|
|
Capistrano::Logger.default_formatters = @custom_default_formatter_values
|
|
|
|
assert_equal @custom_default_formatter_values, Capistrano::Logger.default_formatters
|
|
Capistrano::Logger.default_formatters = @custom_default_formatter_values
|
|
assert_equal @custom_default_formatter_values, Capistrano::Logger.instance_variable_get("@formatters")
|
|
assert_equal nil, Capistrano::Logger.instance_variable_get("@sorted_formatters")
|
|
|
|
# when given a single formatter values hash
|
|
Capistrano::Logger.default_formatters = @custom_default_formatter_values.first
|
|
|
|
assert_equal @custom_default_formatter_values, Capistrano::Logger.default_formatters
|
|
end
|
|
|
|
end
|