module TestBench::Output::PrintError
Attributes
omit_backtrace_pattern[W]
reverse_backtraces[W]
Public Class Methods
call(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 22 def self.call(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil) writer ||= Writer.build omit_backtrace_pattern ||= Defaults.omit_backtrace_pattern reverse_backtraces = Defaults.reverse_backtraces if reverse_backtraces.nil? writer.escape_code(:red) if reverse_backtraces && error.backtrace.length > 1 writer .indent .escape_code(:bold) .text("Traceback") .escape_code(:reset_intensity) .text(" (most recent call last):") .newline end error(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) writer .escape_code(:reset_fg) .sync end
error(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 46 def self.error(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil) reverse_backtraces = self.reverse_backtraces if reverse_backtraces.nil? if reverse_backtraces error_cause(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) error_backtrace(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) error_message(error, writer: writer) else error_message(error, writer: writer) error_backtrace(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) error_cause(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) end end
error_backtrace(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 84 def self.error_backtrace(error, writer: nil, omit_backtrace_pattern: nil, reverse_backtraces: nil) writer ||= self.writer omit_backtrace_pattern ||= self.omit_backtrace_pattern reverse_backtraces = self.reverse_backtraces if reverse_backtraces.nil? omitting = false backtrace = error.backtrace[1..-1] unless reverse_backtraces backtrace_iterator = backtrace.each.with_index else frame_count = backtrace.count number_width = frame_count.to_s.each_char.count backtrace_iterator = backtrace.reverse_each.map.with_index do |location, index| ordinal = frame_count - index ordinal = ordinal.to_s.rjust(number_width, ' ') [location, ordinal] end end backtrace_iterator.each do |location, ordinal| omit = omit_backtrace_pattern.match?(location) next if omit && omitting writer .text("\t") .indent if omit omitting = true if reverse_backtraces ordinal.gsub!(/[[:digit:]]/, '?') writer.text("#{ordinal}: ") end writer .escape_code(:faint) .escape_code(:italic) .text('*omitted*') .escape_code(:reset_italic) .escape_code(:reset_intensity) else omitting = false if reverse_backtraces writer.text("#{ordinal}: ") end writer.text("from #{location}") end writer.newline end end
error_cause(error, **args)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 60 def self.error_cause(error, **args) error(error.cause, **args) unless error.cause.nil? end
error_message(error, writer: nil)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 64 def self.error_message(error, writer: nil) caller_location = error.backtrace[0] message = error.message error_class = error.class.name writer .indent .text("#{caller_location}: ") .escape_code(:bold) .text("#{message} (") .escape_code(:underline) .text(error_class) .escape_code(:reset_underline) .text(")") .escape_code(:reset_intensity) .newline end
Public Instance Methods
omit_backtrace_pattern()
click to toggle source
# File lib/test_bench/output/print_error.rb, line 6 def omit_backtrace_pattern @omit_backtrace_pattern ||= Defaults.omit_backtrace_pattern end
print_error(error)
click to toggle source
# File lib/test_bench/output/print_error.rb, line 18 def print_error(error) PrintError.(error, writer: writer, omit_backtrace_pattern: omit_backtrace_pattern, reverse_backtraces: reverse_backtraces) end
reverse_backtraces()
click to toggle source
# File lib/test_bench/output/print_error.rb, line 11 def reverse_backtraces instance_variable_defined?(:@reverse_backtraces) ? @reverse_backtraces : @reverse_backtraces = Defaults.reverse_backtraces end