From a0f5ff4c3cd05f8717be2bf1d79f0817f288d398 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Fri, 28 Feb 2020 19:07:17 +0100 Subject: Update to ruby/spec@41bf282 --- spec/ruby/language/pattern_matching_spec.rb | 85 +++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) (limited to 'spec/ruby/language/pattern_matching_spec.rb') diff --git a/spec/ruby/language/pattern_matching_spec.rb b/spec/ruby/language/pattern_matching_spec.rb index 6a6de506ff..f84d84c241 100644 --- a/spec/ruby/language/pattern_matching_spec.rb +++ b/spec/ruby/language/pattern_matching_spec.rb @@ -402,6 +402,17 @@ ruby_version_is "2.7" do RUBY }.should raise_error(SyntaxError, /illegal variable in alternative pattern/) end + + it "support undescore prefixed variables in alternation" do + eval(<<~RUBY).should == true + case [0, 1] + in [1, _] + false + in [0, 0] | [0, _a] + true + end + RUBY + end end describe "AS pattern" do @@ -962,5 +973,79 @@ ruby_version_is "2.7" do RUBY end end + + describe "refinements" do + it "are used for #deconstruct" do + refinery = Module.new do + refine Array do + def deconstruct + [0] + end + end + end + + result = nil + Module.new do + using refinery + + result = eval(<<~RUBY) + case [] + in [0] + true + end + RUBY + end + + result.should == true + end + + it "are used for #deconstruct_keys" do + refinery = Module.new do + refine Hash do + def deconstruct_keys(_) + {a: 0} + end + end + end + + result = nil + Module.new do + using refinery + + result = eval(<<~RUBY) + case {} + in a: 0 + true + end + RUBY + end + + result.should == true + end + + it "are used for #=== in constant pattern" do + refinery = Module.new do + refine Array.singleton_class do + def ===(obj) + obj.is_a?(Hash) + end + end + end + + result = nil + Module.new do + using refinery + + result = eval(<<~RUBY) + case {} + in Array + true + end + RUBY + end + + result.should == true + end + end end end -- cgit v1.2.3