summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 08:12:43 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-12 08:12:43 +0000
commit02015974a3cca132bce7e1e7588b9cf835c07036 (patch)
tree08106bd4b02eb3ae89a9587e54532f3ab45141b4 /test
parenta679472c0e72b8adfca8a188251997dad39f917b (diff)
struct.c: add keyword_init option to Struct.new
to initialize struct with keyword arguments. [Feature #11925] [close GH-1771] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61137 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-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) }