diff options
author | Jeremy Evans <code@jeremyevans.net> | 2025-09-05 22:29:43 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2025-09-07 00:52:45 +0900 |
commit | 953e1ef99283d8563ff655ee6b8fcd681af79c1c (patch) | |
tree | 6b658f6c6afde956e24352e23ca46ac433eb2596 /test/ruby | |
parent | 5c875519f3c78f9d3ea470f1c8593a6026af93eb (diff) |
Make invalid & operator type error message consistent with */**
If #to_proc is defined, this uses the following error message format,
matching the error message format used for * when to_a returns non-Array
and for ** when to_hash returns non-Hash:
```
can't convert ClassName to Proc (ClassName#to_proc gives OtherClassName)
```
If #to_proc is not defined, this uses the following error message format,
matching the error message format used when ** is called on a non-Hash
not implementing to_hash.
```
no implicit conversion of ClassName into Proc
```
There isn't a similar error for * when called on a non-Array not
implementing to_a, as Ruby does not raise for that case.
Fixes [Bug #21563]
Diffstat (limited to 'test/ruby')
-rw-r--r-- | test/ruby/test_exception.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index 84581180b6..17ff5a2e82 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -1525,4 +1525,31 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status| assert_in_out_err(%W[-r#{lib} #{main}], "", [], [:*, "\n""path=#{main}\n", :*]) end end + + class Ex; end + + def test_exception_message_for_unexpected_implicit_conversion_type + a = Ex.new + def self.x(a) = nil + + assert_raise_with_message(TypeError, "no implicit conversion of TestException::Ex into Hash") do + x(**a) + end + assert_raise_with_message(TypeError, "no implicit conversion of TestException::Ex into Proc") do + x(&a) + end + + def a.to_a = 1 + def a.to_hash = 1 + def a.to_proc = 1 + assert_raise_with_message(TypeError, "can't convert TestException::Ex to Array (TestException::Ex#to_a gives Integer)") do + x(*a) + end + assert_raise_with_message(TypeError, "can't convert TestException::Ex to Hash (TestException::Ex#to_hash gives Integer)") do + x(**a) + end + assert_raise_with_message(TypeError, "can't convert TestException::Ex to Proc (TestException::Ex#to_proc gives Integer)") do + x(&a) + end + end end |