From be71fe528d1d6c7334e20eda53c92045b727c4d9 Mon Sep 17 00:00:00 2001 From: Yuji Nakayama Date: Fri, 23 Oct 2015 15:06:19 +0900 Subject: [PATCH] Load exception presentation sub-system lazily --- lib/rspec/core/formatters.rb | 1 + lib/rspec/core/formatters/exception_presenter.rb | 2 +- spec/rspec/core/formatters/exception_presenter_spec.rb | 5 ----- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/rspec/core/formatters.rb b/lib/rspec/core/formatters.rb index 401e2d8386..8142b0bfff 100644 --- a/lib/rspec/core/formatters.rb +++ b/lib/rspec/core/formatters.rb @@ -73,6 +73,7 @@ module RSpec::Core::Formatters autoload :ProfileFormatter, 'rspec/core/formatters/profile_formatter' autoload :JsonFormatter, 'rspec/core/formatters/json_formatter' autoload :BisectFormatter, 'rspec/core/formatters/bisect_formatter' + autoload :ExceptionPresenter, 'rspec/core/formatters/exception_presenter' # Register the formatter class # @param formatter_class [Class] formatter class to register diff --git a/lib/rspec/core/formatters/exception_presenter.rb b/lib/rspec/core/formatters/exception_presenter.rb index a87c3befe9..f83d0ac481 100644 --- a/lib/rspec/core/formatters/exception_presenter.rb +++ b/lib/rspec/core/formatters/exception_presenter.rb @@ -1,4 +1,5 @@ # encoding: utf-8 +RSpec::Support.require_rspec_core "formatters/snippet_extractor" RSpec::Support.require_rspec_support "encoded_string" module RSpec @@ -203,7 +204,6 @@ def read_failed_lines file_path, line_number = matching_line.match(/(.+?):(\d+)(|:\d+)/)[1..2] max_line_count = RSpec.configuration.max_displayed_failure_line_count - RSpec::Support.require_rspec_core "formatters/snippet_extractor" SnippetExtractor.extract_expression_lines_at(file_path, line_number.to_i, max_line_count) rescue SnippetExtractor::NoSuchFileError ["Unable to find #{file_path} to read failed line"] diff --git a/spec/rspec/core/formatters/exception_presenter_spec.rb b/spec/rspec/core/formatters/exception_presenter_spec.rb index 24c1db02cc..353f5829bd 100644 --- a/spec/rspec/core/formatters/exception_presenter_spec.rb +++ b/spec/rspec/core/formatters/exception_presenter_spec.rb @@ -404,11 +404,6 @@ def read_failed_lines context "when backtrace will generate a security error" do let(:exception) { instance_double(Exception, :backtrace => [ "#{__FILE__}:#{__LINE__}"]) } - before do - # We lazily require SnippetExtractor but requiring it in $SAFE 3 environment raises error. - RSpec::Support.require_rspec_core "formatters/snippet_extractor" - end - it "is handled gracefully" do with_safe_set_to_level_that_triggers_security_errors do expect { read_failed_lines }.not_to raise_error