diff options
author | Takashi Kokubun <[email protected]> | 2021-01-17 01:35:54 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-17 01:35:54 -0800 |
commit | 8d099aa040427aede04e42c3ec9380afd431ffe3 (patch) | |
tree | d3c827abba8cf514f9cb3607723270c2419b539e /test/ruby/test_struct.rb | |
parent | e033c9d7db02a4e8d2973364ecb47744b63aecd3 (diff) |
Warn Struct#initialize with only keyword args (#4070)
* Warn Struct#initialize with only keyword args
A part of [Feature #16806]
* Do not warn if `keyword_init: false`
is explicitly specified
* Add a NEWS entry
* s/in/from/
* Make sure all fields are initialized
Notes
Notes:
Merged-By: k0kubun <[email protected]>
Diffstat (limited to 'test/ruby/test_struct.rb')
-rw-r--r-- | test/ruby/test_struct.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb index c313ab0dbe..dc6a0b99fd 100644 --- a/test/ruby/test_struct.rb +++ b/test/ruby/test_struct.rb @@ -350,6 +350,18 @@ module TestStruct end end + def test_keyword_args_warning + warning = /warning: Passing only keyword arguments to Struct#initialize will behave differently from Ruby 3\.2\./ + assert_match(warning, EnvUtil.verbose_warning { assert_equal({a: 1}, @Struct.new(:a).new(a: 1).a) }) + assert_match(warning, EnvUtil.verbose_warning { assert_equal({a: 1}, @Struct.new(:a, keyword_init: nil).new(a: 1).a) }) + assert_warn('') { assert_equal({a: 1}, @Struct.new(:a).new({a: 1}).a) } + assert_warn('') { assert_equal({a: 1}, @Struct.new(:a, :b).new(1, a: 1).b) } + assert_warn('') { assert_equal(1, @Struct.new(:a, keyword_init: true).new(a: 1).a) } + assert_warn('') { assert_equal({a: 1}, @Struct.new(:a, keyword_init: nil).new({a: 1}).a) } + assert_warn('') { assert_equal({a: 1}, @Struct.new(:a, keyword_init: false).new(a: 1).a) } + assert_warn('') { assert_equal({a: 1}, @Struct.new(:a, keyword_init: false).new({a: 1}).a) } + end + def test_nonascii struct_test = @Struct.new(name = "R\u{e9}sum\u{e9}", :"r\u{e9}sum\u{e9}") assert_equal(@Struct.const_get("R\u{e9}sum\u{e9}"), struct_test, '[ruby-core:24849]') |