diff --git a/core/proc/ruby2_keywords_spec.rb b/core/proc/ruby2_keywords_spec.rb new file mode 100644 index 0000000000..db35ca08da --- /dev/null +++ b/core/proc/ruby2_keywords_spec.rb @@ -0,0 +1,63 @@ +require_relative '../../spec_helper' + +ruby_version_is "2.7" do + # Note: these specs should be synched with Module#ruby2_keywords specs + describe "Proc#ruby2_keywords" do + it "marks the final hash argument as keyword hash" do + f = ->(*a) { a.last } + f.ruby2_keywords + + last = f.call(1, 2, a: "a") + Hash.ruby2_keywords_hash?(last).should == true + end + + it "suppresses deprecation warning when calls a method" do + obj = Object.new + def obj.foo(*a, **b) end + + f = -> (*a) { obj.foo(*a) } + + -> { f.call(1, 2, {a: "a"}) }.should complain /Using the last argument as keyword parameters is deprecated/ + f.ruby2_keywords + -> { f.call(1, 2, {a: "a"}) }.should_not complain + end + + it "suppresses deprecation warning when calls another proc" do + g = ->(*a, **b) { } + f = -> (*a) { g.call(*a) } + + -> { f.call(1, 2, {a: "a"}) }.should complain /Using the last argument as keyword parameters is deprecated/ + f.ruby2_keywords + -> { f.call(1, 2, {a: "a"}) }.should_not complain + end + + it "returns self" do + f = ->(*a) { } + f.ruby2_keywords.should equal f + end + + it "prints warning when a proc does not accept argument splat" do + f = ->(a, b, c) { } + + -> { + f.ruby2_keywords + }.should complain /Skipping set of ruby2_keywords flag for/ + end + + it "prints warning when a proc accepts keywords" do + f = ->(a:, b:) { } + + -> { + f.ruby2_keywords + }.should complain /Skipping set of ruby2_keywords flag for/ + end + + it "prints warning when a proc accepts keyword splat" do + f = ->(**a) { } + + -> { + f.ruby2_keywords + }.should complain /Skipping set of ruby2_keywords flag for/ + end + end +end