diff --git a/lib/serverspec.rb b/lib/serverspec.rb index 23b1c1c1..af99b44c 100644 --- a/lib/serverspec.rb +++ b/lib/serverspec.rb @@ -10,38 +10,24 @@ require 'serverspec/commands/base' require 'rspec/core/formatters/base_formatter' -module RSpec - module Core - module Formatters - class BaseTextFormatter < BaseFormatter - def dump_failure_info(example) - exception = example.execution_result[:exception] - exception_class_name = exception_class_name_for(exception) - output.puts "#{long_padding}#{failure_color("Failure/Error:")} #{failure_color(read_failed_line(exception, example).strip)}" - output.puts "#{long_padding}#{failure_color(exception_class_name)}: #{failure_color(exception.message)}" unless exception_class_name =~ /RSpec/ - output.puts "#{long_padding} #{failure_color(example.metadata[:command])}" if example.metadata[:command] - output.puts "#{long_padding} #{failure_color(example.metadata[:stdout])}" if example.metadata[:stdout] != '' - exception.message.to_s.split("\n").each { |line| output.puts "#{long_padding} #{failure_color(line)}" } if exception.message - - if shared_group = find_shared_group(example) - dump_shared_failure_info(shared_group) - end +module RSpec::Core::Notifications + class FailedExampleNotification < ExampleNotification + def message_lines + @lines ||= + begin + lines = ["Failure/Error: #{read_failed_line.strip}"] + lines << "#{exception_class_name}:" unless exception_class_name =~ /RSpec/ + exception.message.to_s.split("\n").each do |line| + lines << " #{line}" if exception.message + lines << " #{example.metadata[:command]}" + lines << " #{example.metadata[:stdout]}" if example.metadata[:stdout] + lines << " #{example.metadata[:stderr]}" if example.metadata[:stderr] end - end - class ProgressFormatter < BaseTextFormatter - def dump_failure_info(example) - exception = example.execution_result[:exception] - exception_class_name = exception_class_name_for(exception) - output.puts "#{long_padding}#{failure_color("Failure/Error:")} #{failure_color(read_failed_line(exception, example).strip)}" - output.puts "#{long_padding}#{failure_color(exception_class_name)}: #{failure_color(exception.message)}" unless exception_class_name =~ /RSpec/ - output.puts "#{long_padding} #{failure_color(example.metadata[:command])}" if example.metadata[:command] - output.puts "#{long_padding} #{failure_color(example.metadata[:stdout])}" if example.metadata[:stdout] != '' - exception.message.to_s.split("\n").each { |line| output.puts "#{long_padding} #{failure_color(line)}" } if exception.message - - if shared_group = find_shared_group(example) - dump_shared_failure_info(shared_group) - end + if shared_group + lines << "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\"" + + " called from #{backtrace_formatter.backtrace_line(shared_group.location)}" end + lines end end end