From 95d3a74e9b22c44ea48ce870171640f0471db09b Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Sun, 14 Apr 2019 19:14:16 +0300 Subject: config: factor out exception_handler hook to a separate class --- spec/exception_handler_spec.rb | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 spec/exception_handler_spec.rb (limited to 'spec/exception_handler_spec.rb') diff --git a/spec/exception_handler_spec.rb b/spec/exception_handler_spec.rb new file mode 100644 index 00000000..62138153 --- /dev/null +++ b/spec/exception_handler_spec.rb @@ -0,0 +1,64 @@ +RSpec.describe Pry::ExceptionHandler do + describe ".handle_exception" do + let(:output) { StringIO.new } + let(:pry_instance) { Pry.new } + + context "when exception is a UserError and a SyntaxError" do + let(:exception) do + SyntaxError.new('cool syntax error, dude').extend(Pry::UserError) + end + + it "prints the syntax error with customized message" do + described_class.handle_exception(output, exception, pry_instance) + expect(output.string).to start_with("SyntaxError: dude\n") + end + end + + context "when exception is a standard error" do + let(:exception) do + error = StandardError.new('oops') + error.set_backtrace(["/bin/pry:23:in `
'"]) + error + end + + it "prints standard error message" do + described_class.handle_exception(output, exception, pry_instance) + expect(output.string) + .to eq("StandardError: oops\nfrom /bin/pry:23:in `
'\n") + end + end + + context "when exception is a nested standard error" do + let(:exception) do + error = nil + begin + begin + raise 'nested oops' + rescue # rubocop:disable Style/RescueStandardError + raise 'outer oops' + end + rescue StandardError => outer_error + error = outer_error + end + + error + end + + before do + if RUBY_VERSION.start_with?('1.9', '2.0') + skip("Ruby #{RUBY_VERSION} doesn't support nested exceptions") + end + end + + it "prints standard error message" do + described_class.handle_exception(output, exception, pry_instance) + expect(output.string).to match( + /RuntimeError:\souter\soops\n + from\s.+\n + Caused\sby\sRuntimeError:\snested\soops\n + from.+/x + ) + end + end + end +end -- cgit v1.2.1