summaryrefslogtreecommitdiff
path: root/test/ruby/test_struct.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_struct.rb')
-rw-r--r--test/ruby/test_struct.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/ruby/test_struct.rb b/test/ruby/test_struct.rb
index 573f65d0b9..7bdf9b889f 100644
--- a/test/ruby/test_struct.rb
+++ b/test/ruby/test_struct.rb
@@ -92,6 +92,23 @@ module TestStruct
assert_equal([:utime, :stime, :cutime, :cstime], Process.times.members)
end
+ def test_struct_new_with_keyword_init
+ @Struct.new("KeywordArgsTrue", :a, :b, keyword_init: true)
+ @Struct.new("KeywordArgsFalse", :a, :b, keyword_init: false)
+
+ assert_raise(ArgumentError) { @Struct::KeywordArgsTrue.new(1, 2) }
+ assert_nothing_raised { @Struct::KeywordArgsFalse.new(1, 2) }
+ assert_nothing_raised { @Struct::KeywordArgsTrue.new(a: 1, b: 2) }
+ assert_raise(ArgumentError) { @Struct::KeywordArgsTrue.new(1, b: 2) }
+ assert_raise(ArgumentError) { @Struct::KeywordArgsTrue.new(a: 1, b: 2, c: 3) }
+ assert_equal @Struct::KeywordArgsTrue.new(a: 1, b: 2).values, @Struct::KeywordArgsFalse.new(1, 2).values
+
+ @Struct.instance_eval do
+ remove_const(:KeywordArgsTrue)
+ remove_const(:KeywordArgsFalse)
+ end
+ end
+
def test_initialize
klass = @Struct.new(:a)
assert_raise(ArgumentError) { klass.new(1, 2) }