summaryrefslogtreecommitdiff
path: root/test/ruby/test_keyword.rb
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-09-05 19:29:25 +0900
committerJeremy Evans <code@jeremyevans.net>2019-09-05 17:47:12 -0700
commit55b96c5d2d7d8bcc2953484bd2f9c9519b252dae (patch)
tree98f96f1825d941fdf4bb9294f0cbcf9963911023 /test/ruby/test_keyword.rb
parentdd83f7bf98764b27385735f6f39dd090dc4854f9 (diff)
Add a keyword-to-last-hash warning for some case of define_method method
and lambda. When define_method is a simple iseq (`define_method(:m) {|x| ... }`), passing keywords to it (`m(**kw)`) didn't print a warning.
Diffstat (limited to 'test/ruby/test_keyword.rb')
-rw-r--r--test/ruby/test_keyword.rb100
1 files changed, 75 insertions, 25 deletions
diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb
index 229f0b3871..71b72bd4ed 100644
--- a/test/ruby/test_keyword.rb
+++ b/test/ruby/test_keyword.rb
@@ -185,20 +185,42 @@ class TestKeywordArguments < Test::Unit::TestCase
f = -> { true }
assert_equal(true, f[**{}])
- assert_raise(ArgumentError) { f[**kw] }
- assert_raise(ArgumentError) { f[**h] }
- assert_raise(ArgumentError) { f[a: 1] }
- assert_raise(ArgumentError) { f[**h2] }
- assert_raise(ArgumentError) { f[**h3] }
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { f[**kw] }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { f[**h] }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { f[a: 1] }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { f[**h2] }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { f[**h3] }
+ end
f = ->(a) { a }
assert_raise(ArgumentError) { f[**{}] }
- assert_equal(kw, f[**kw])
- assert_equal(h, f[**h])
- assert_equal(h, f[a: 1])
- assert_equal(h2, f[**h2])
- assert_equal(h3, f[**h3])
- assert_equal(h3, f[a: 1, **h2])
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(kw, f[**kw])
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h, f[**h])
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h, f[a: 1])
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h2, f[**h2])
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h3, f[**h3])
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h3, f[a: 1, **h2])
+ end
f = ->(**x) { x }
assert_equal(kw, f[**{}])
@@ -685,24 +707,48 @@ class TestKeywordArguments < Test::Unit::TestCase
define_method(:m) { }
end
assert_nil(c.m(**{}))
- assert_raise(ArgumentError) { c.m(**kw) }
- assert_raise(ArgumentError) { c.m(**h) }
- assert_raise(ArgumentError) { c.m(a: 1) }
- assert_raise(ArgumentError) { c.m(**h2) }
- assert_raise(ArgumentError) { c.m(**h3) }
- assert_raise(ArgumentError) { c.m(a: 1, **h2) }
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(**kw) }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(**h) }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(a: 1) }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(**h2) }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(**h3) }
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_raise(ArgumentError) { c.m(a: 1, **h2) }
+ end
c = Object.new
class << c
define_method(:m) {|arg| arg }
end
assert_raise(ArgumentError) { c.m(**{}) }
- assert_equal(kw, c.m(**kw))
- assert_equal(h, c.m(**h))
- assert_equal(h, c.m(a: 1))
- assert_equal(h2, c.m(**h2))
- assert_equal(h3, c.m(**h3))
- assert_equal(h3, c.m(a: 1, **h2))
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(kw, c.m(**kw))
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h, c.m(**h))
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h, c.m(a: 1))
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h2, c.m(**h2))
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h3, c.m(**h3))
+ end
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal(h3, c.m(a: 1, **h2))
+ end
c = Object.new
class << c
@@ -1211,10 +1257,14 @@ class TestKeywordArguments < Test::Unit::TestCase
o = Object.new
def o.to_hash() { a: 1 } end
- assert_equal({a: 1}, m1(**o) {|x| break x}, bug9898)
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal({a: 1}, m1(**o) {|x| break x}, bug9898)
+ end
o2 = Object.new
def o2.to_hash() { b: 2 } end
- assert_equal({a: 1, b: 2}, m1(**o, **o2) {|x| break x}, bug9898)
+ assert_warn(/The keyword argument is passed as the last hash parameter/m) do
+ assert_equal({a: 1, b: 2}, m1(**o, **o2) {|x| break x}, bug9898)
+ end
end
def test_implicit_hash_conversion