diff --git a/rspec-core/lib/rspec/core/backtrace_formatter.rb b/rspec-core/lib/rspec/core/backtrace_formatter.rb index 74617ec25..0cdcce5a3 100644 --- a/rspec-core/lib/rspec/core/backtrace_formatter.rb +++ b/rspec-core/lib/rspec/core/backtrace_formatter.rb @@ -31,6 +31,7 @@ def filter_gem(gem_name) end def format_backtrace(backtrace, options={}) + return [] unless backtrace return backtrace if options[:full_backtrace] || backtrace.empty? backtrace.map { |l| backtrace_line(l) }.compact. diff --git a/rspec-core/lib/rspec/core/formatters/exception_presenter.rb b/rspec-core/lib/rspec/core/formatters/exception_presenter.rb index 248328054..9056a8489 100644 --- a/rspec-core/lib/rspec/core/formatters/exception_presenter.rb +++ b/rspec-core/lib/rspec/core/formatters/exception_presenter.rb @@ -35,7 +35,7 @@ def colorized_message_lines(colorizer=::RSpec::Core::Formatters::ConsoleCodes) end def formatted_backtrace(exception=@exception) - backtrace_formatter.format_backtrace((exception.backtrace || []), example.metadata) + + backtrace_formatter.format_backtrace(exception.backtrace, example.metadata) + formatted_cause(exception) end diff --git a/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb b/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb index ba81f4f86..e9185991d 100644 --- a/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb +++ b/rspec-core/spec/rspec/core/backtrace_formatter_spec.rb @@ -132,13 +132,23 @@ def make_backtrace_formatter(exclusion_patterns=nil, inclusion_patterns=nil) end end - describe "an empty backtrace" do + describe "for an empty backtrace" do it "does not add the explanatory message about backtrace filtering" do formatter = BacktraceFormatter.new expect(formatter.format_backtrace([])).to eq([]) end end + describe "for a `nil` backtrace (since exceptions can have no backtrace!)" do + it 'returns a blank array, with no explanatory message' do + exception = Exception.new + expect(exception.backtrace).to be_nil + + formatter = BacktraceFormatter.new + expect(formatter.format_backtrace(exception.backtrace)).to eq([]) + end + end + context "when rspec is installed in the current working directory" do it "excludes lines from rspec libs by default", :unless => RSpec::Support::OS.windows? do backtrace = [