diff --git a/rspec-core/appveyor.yml b/rspec-core/appveyor.yml index 838038562..93b70bc41 100644 --- a/rspec-core/appveyor.yml +++ b/rspec-core/appveyor.yml @@ -29,7 +29,7 @@ before_test: - bundle --version test_script: - - bundle exec rspec --backtrace + - chcp 65001 && bundle exec rspec --backtrace environment: matrix: diff --git a/rspec-core/lib/rspec/core/formatters/exception_presenter.rb b/rspec-core/lib/rspec/core/formatters/exception_presenter.rb index 155c99702..9ad6503e1 100644 --- a/rspec-core/lib/rspec/core/formatters/exception_presenter.rb +++ b/rspec-core/lib/rspec/core/formatters/exception_presenter.rb @@ -81,7 +81,7 @@ def fully_formatted(failure_number, colorizer=::RSpec::Core::Formatters::Console def fully_formatted_lines(failure_number, colorizer) lines = [ - description, + encoded_description(description), detail_formatter.call(example, colorizer), formatted_message_and_backtrace(colorizer), extra_detail_formatter.call(failure_number, colorizer), @@ -244,6 +244,17 @@ def formatted_message_and_backtrace(colorizer) end end + if String.method_defined?(:encoding) + def encoded_description(description) + return if description.nil? + encoded_string(description) + end + else # for 1.8.7 + def encoded_description(description) + description + end + end + def exception_backtrace exception.backtrace || [] end diff --git a/rspec-core/spec/rspec/core/formatters/exception_presenter_spec.rb b/rspec-core/spec/rspec/core/formatters/exception_presenter_spec.rb index 602abffb7..788d27def 100644 --- a/rspec-core/spec/rspec/core/formatters/exception_presenter_spec.rb +++ b/rspec-core/spec/rspec/core/formatters/exception_presenter_spec.rb @@ -94,6 +94,23 @@ module RSpec::Core EOS end + if String.method_defined?(:encoding) + it 'allows the caller to add encoded description' do + the_presenter = Formatters::ExceptionPresenter.new(exception, example, + :description => "ジ".encode("CP932")) + + expect(the_presenter.fully_formatted(1)).to eq(<<-EOS.gsub(/^ +\|/, '')) + | + | 1) ジ + | Failure/Error: # The failure happened here!#{ encoding_check } + | + | Boom + | Bam + | # ./spec/rspec/core/formatters/exception_presenter_spec.rb:#{line_num} + EOS + end + end + it 'allows the caller to omit the description' do the_presenter = Formatters::ExceptionPresenter.new(exception, example, :detail_formatter => Proc.new { "Detail!" },