From 7814b6c6572446a6b64614e524d13dd423577004 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Fri, 27 Sep 2019 09:35:51 -0700 Subject: Correctly issue ArgumentError when calling method that accepts no keywords If a method accepts no keywords and was called with a keyword, an ArgumentError was not always issued previously. Force methods that accept no keywords to go through setup_parameters_complex so that an ArgumentError is raised if keywords are provided. --- test/ruby/test_keyword.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'test') diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb index 5992434c97..1a445cdf50 100644 --- a/test/ruby/test_keyword.rb +++ b/test/ruby/test_keyword.rb @@ -158,6 +158,19 @@ class TestKeywordArguments < Test::Unit::TestCase assert_equal([b, [:b]], f12(**h, &b)) end + def f13(a, **nil) + a + end + + def test_f13 + assert_equal(1, f13(1)) + assert_equal(1, f13(1, **{})) + assert_raise(ArgumentError) { f13(a: 1) } + assert_raise(ArgumentError) { f13(1, a: 1) } + assert_raise(ArgumentError) { f13(**{a: 1}) } + assert_raise(ArgumentError) { f13(1, **{a: 1}) } + end + def test_method_parameters assert_equal([[:key, :str], [:key, :num]], method(:f1).parameters); assert_equal([[:req, :x], [:key, :str], [:key, :num]], method(:f2).parameters); -- cgit v1.2.3