diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-09-11 11:17:35 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-09-11 11:20:16 -0700 |
commit | ed96c9f270829c7c07852f0aadcd88a58a13875b (patch) | |
tree | 3c4da782659d65b30a34d5d929a9c1a3eeb50152 /test | |
parent | fba5bbc69545f6d45f7a2c649321a61f43a0b1a0 (diff) | |
download | ruby-ed96c9f270829c7c07852f0aadcd88a58a13875b.tar.gz |
Emit missing keyword argument separation warnings for define_method
Previously, the warning functions skipped warning in these cases.
This removes the skipping, and uses a less descriptive warning
instead.
This affected both last argument to keyword warnings and keyword
split warnings.
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_keyword.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb index 5ddcfd892a..506db345b0 100644 --- a/test/ruby/test_keyword.rb +++ b/test/ruby/test_keyword.rb @@ -1238,6 +1238,28 @@ class TestKeywordArguments < Test::Unit::TestCase assert_equal([1, h2], c.m(**h2)) assert_equal([1, h3], c.m(**h3)) assert_equal([1, h3], c.m(a: 1, **h2)) + + c = Object.new + class << c + define_method(:m) {|*args, **opt| [args, opt] } + end + assert_warn(/The last argument is used as the keyword parameter.*for method/m) do + assert_equal([[], h], c.m(h)) + end + assert_warn(/The last argument is used as the keyword parameter.*for method/m) do + assert_equal([[h], h], c.m(h, h)) + end + + c = Object.new + class << c + define_method(:m) {|arg=nil, a: nil| [arg, a] } + end + assert_warn(/The last argument is split into positional and keyword parameters.*for method/m) do + assert_equal([h2, 1], c.m(h3)) + end + assert_warn(/The last argument is split into positional and keyword parameters.*for method/m) do + assert_equal([h2, 1], c.m(**h3)) + end end def test_attr_reader_kwsplat |