diff --git a/mrbgems/mruby-method/test/method.rb b/mrbgems/mruby-method/test/method.rb index 8966ee085..005403bc5 100644 --- a/mrbgems/mruby-method/test/method.rb +++ b/mrbgems/mruby-method/test/method.rb @@ -138,6 +138,36 @@ assert 'Method#call with undefined method' do assert_raise(NoMethodError) { m.call(:arg1, :arg2) } end +assert 'Method#call with undefined method -- only kwargs' do + c = Class.new { + attr_accessor :m, :argv, :kwargs + def respond_to_missing?(m, b) + m == :foo + end + + def method_missing(m, *argv, **kwargs) + @m = m + @argv = argv + @kwargs = kwargs + super + end + } + cc = c.new + assert_kind_of Method, cc.method(:foo) + + # Calling cc.method(:foo) works + assert_raise(NoMethodError) { cc.method(:foo).call(kwarg1: :val1, kwarg2: :val2) } + assert_equal :foo, cc.m + assert_equal [], cc.argv + assert_equal({ kwarg1: :val1, kwarg2: :val2 }, cc.kwargs) + + # calling cc.foo fails + assert_raise(NoMethodError) { cc.foo(kwarg1: :val1, kwarg2: :val2) } + assert_equal :foo, cc.m + assert_equal [], cc.argv + assert_equal({ kwarg1: :val1, kwarg2: :val2 }, cc.kwargs) +end + assert 'Method#source_location' do skip if proc{}.source_location.nil?