diff options
author | Nobuhiro IMAI <nov@yo.rim.or.jp> | 2021-01-15 22:00:38 +0900 |
---|---|---|
committer | aycabta <aycabta@gmail.com> | 2021-01-18 02:12:53 +0900 |
commit | d290a02bd7035eb186eb5c275af4e1ddc20ad47f (patch) | |
tree | b22ffc421fcc58973e9ad7670f3f1f0c613434aa | |
parent | 3f0b4665df786990799c4cbac4de3a3cafb5e6bc (diff) | |
download | ruby-d290a02bd7035eb186eb5c275af4e1ddc20ad47f.tar.gz |
[ruby/irb] handle repeated exception separately
https://github.com/ruby/irb/commit/fcf6b34bc5
-rw-r--r-- | lib/irb.rb | 2 | ||||
-rw-r--r-- | test/irb/test_context.rb | 18 |
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/irb.rb b/lib/irb.rb index cf53130751..3f7f169c69 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -574,6 +574,8 @@ module IRB next end handle_exception(exc) + @context.workspace.local_variable_set(:_, exc) + exc = nil end end end diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 49495027c1..a32b1fc97a 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -105,6 +105,24 @@ module TestIRB $VERBOSE = verbose end + def test_eval_input_raise2x + input = TestInputMethod.new([ + "raise 'Foo'\n", + "raise 'Bar'\n", + "_\n", + ]) + irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input) + out, err = capture_output do + irb.eval_input + end + assert_empty err + assert_pattern_list([ + :*, /\(irb\):1:in `<main>': Foo \(RuntimeError\)\n/, + :*, /\(irb\):2:in `<main>': Bar \(RuntimeError\)\n/, + :*, /#<RuntimeError: Bar>\n/, + ], out) + end + def test_eval_object_without_inspect_method verbose, $VERBOSE = $VERBOSE, nil all_assertions do |all| |