[ruby/irb] refactoring an error handling in IRB::Inspector

* moved rescue clause to `#inspect_value` to catch all failures in inspectors
* test with all (currently five kind of) inspect modes
  - tweaked the input due to only `Marshal` can inspect(dump) a `BasicObject`

9d112fab8e
This commit is contained in:
Nobuhiro IMAI 2021-01-07 19:21:06 +09:00 committed by aycabta
parent f594775230
commit ed3264d37a
2 changed files with 22 additions and 17 deletions

View file

@ -106,15 +106,22 @@ module TestIRB
def test_eval_object_without_inspect_method
verbose, $VERBOSE = $VERBOSE, nil
input = TestInputMethod.new([
"BasicObject.new\n",
])
irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)
out, err = capture_output do
irb.eval_input
all_assertions do |all|
IRB::Inspector::INSPECTORS.invert.each_value do |mode|
all.for(mode) do
input = TestInputMethod.new([
"[BasicObject.new, Class.new]\n",
])
irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)
irb.context.inspect_mode = mode
out, err = capture_output do
irb.eval_input
end
assert_empty err
assert_match(/\(Object doesn't support #inspect\)\n(=> )?\n/, out)
end
end
end
assert_empty err
assert(/\(Object doesn't support #inspect\)\n(=> )?\n/, out)
ensure
$VERBOSE = verbose
end