diff options
author | Benoit Daloze <eregontp@gmail.com> | 2022-04-25 14:53:54 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2022-04-25 14:53:54 +0200 |
commit | 45cf4f218728a15eb36d14a6c9912086525f5e3f (patch) | |
tree | 2aa93fadcb904c226f722dde47827098b87a9846 /spec/ruby/core/proc | |
parent | 6ae81d49b52563a6720d666a6118ffa6e484f398 (diff) |
Update to ruby/spec@3affe1e
Diffstat (limited to 'spec/ruby/core/proc')
-rw-r--r-- | spec/ruby/core/proc/block_pass_spec.rb | 22 | ||||
-rw-r--r-- | spec/ruby/core/proc/new_spec.rb | 39 | ||||
-rw-r--r-- | spec/ruby/core/proc/ruby2_keywords_spec.rb | 114 | ||||
-rw-r--r-- | spec/ruby/core/proc/shared/compose.rb | 51 | ||||
-rw-r--r-- | spec/ruby/core/proc/shared/to_s.rb | 10 |
5 files changed, 74 insertions, 162 deletions
diff --git a/spec/ruby/core/proc/block_pass_spec.rb b/spec/ruby/core/proc/block_pass_spec.rb index 99255139d4..411c0bf3db 100644 --- a/spec/ruby/core/proc/block_pass_spec.rb +++ b/spec/ruby/core/proc/block_pass_spec.rb @@ -19,25 +19,3 @@ describe "Proc as a block pass argument" do p.should == p2 end end - -ruby_version_is ""..."2.7" do - describe "Proc as an implicit block pass argument" do - def revivify - Proc.new - end - - it "remains the same object if re-vivified by the target method" do - p = Proc.new {} - p2 = revivify(&p) - p.should equal p2 - p.should == p2 - end - - it "remains the same object if reconstructed with Proc.new" do - p = Proc.new {} - p2 = Proc.new(&p) - p.should equal p2 - p.should == p2 - end - end -end diff --git a/spec/ruby/core/proc/new_spec.rb b/spec/ruby/core/proc/new_spec.rb index 6d5eb67a4b..cb52e94f44 100644 --- a/spec/ruby/core/proc/new_spec.rb +++ b/spec/ruby/core/proc/new_spec.rb @@ -94,20 +94,6 @@ describe "Proc.new with an associated block" do obj.first.should == :a obj.second.should == 2 end - - ruby_version_is ""..."2.7" do - it "returns a new Proc instance from the block passed to the containing method" do - prc = ProcSpecs.new_proc_in_method { "hello" } - prc.should be_an_instance_of(Proc) - prc.call.should == "hello" - end - - it "returns a new Proc instance from the block passed to the containing method" do - prc = ProcSpecs.new_proc_subclass_in_method { "hello" } - prc.should be_an_instance_of(ProcSpecs::ProcSubclass) - prc.call.should == "hello" - end - end end describe "Proc.new with a block argument" do @@ -180,30 +166,7 @@ describe "Proc.new without a block" do -> { ProcSpecs.new_proc_subclass_in_method }.should raise_error(ArgumentError) end - ruby_version_is ""..."2.7" do - it "uses the implicit block from an enclosing method" do - def some_method - Proc.new - end - - prc = some_method { "hello" } - - prc.call.should == "hello" - end - - it "uses the implicit block from an enclosing method when called inside a block" do - def some_method - proc do |&block| - Proc.new - end.call { "failing" } - end - prc = some_method { "hello" } - - prc.call.should == "hello" - end - end - - ruby_version_is "2.7"..."3.0" do + ruby_version_is ""..."3.0" do it "can be created if invoked from within a method with a block" do -> { ProcSpecs.new_proc_in_method { "hello" } }.should complain(/Capturing the given block using Proc.new is deprecated/) end diff --git a/spec/ruby/core/proc/ruby2_keywords_spec.rb b/spec/ruby/core/proc/ruby2_keywords_spec.rb index 1fba3b9398..c6eb03e693 100644 --- a/spec/ruby/core/proc/ruby2_keywords_spec.rb +++ b/spec/ruby/core/proc/ruby2_keywords_spec.rb @@ -1,80 +1,78 @@ require_relative '../../spec_helper' -ruby_version_is "2.7" do - describe "Proc#ruby2_keywords" do - it "marks the final hash argument as keyword hash" do - f = -> *a { a.last } - f.ruby2_keywords +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 + last = f.call(1, 2, a: "a") + Hash.ruby2_keywords_hash?(last).should == true + end - it "applies to the underlying method and applies across duplication" do - f1 = -> *a { a.last } - f1.ruby2_keywords - f2 = f1.dup + it "applies to the underlying method and applies across duplication" do + f1 = -> *a { a.last } + f1.ruby2_keywords + f2 = f1.dup - Hash.ruby2_keywords_hash?(f1.call(1, 2, a: "a")).should == true - Hash.ruby2_keywords_hash?(f2.call(1, 2, a: "a")).should == true + Hash.ruby2_keywords_hash?(f1.call(1, 2, a: "a")).should == true + Hash.ruby2_keywords_hash?(f2.call(1, 2, a: "a")).should == true - f3 = -> *a { a.last } - f4 = f3.dup - f3.ruby2_keywords + f3 = -> *a { a.last } + f4 = f3.dup + f3.ruby2_keywords - Hash.ruby2_keywords_hash?(f3.call(1, 2, a: "a")).should == true - Hash.ruby2_keywords_hash?(f4.call(1, 2, a: "a")).should == true - end + Hash.ruby2_keywords_hash?(f3.call(1, 2, a: "a")).should == true + Hash.ruby2_keywords_hash?(f4.call(1, 2, a: "a")).should == true + end - ruby_version_is "2.7" ... "3.0" do - it "fixes delegation warnings when calling a method accepting keywords" do - obj = Object.new - def obj.foo(*a, **b) end + ruby_version_is ""..."3.0" do + it "fixes delegation warnings when calling a method accepting keywords" do + obj = Object.new + def obj.foo(*a, **b) end - f = -> *a { obj.foo(*a) } + 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 + -> { 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 "fixes delegation warnings when calling a proc accepting keywords" do - g = -> *a, **b { } - f = -> *a { g.call(*a) } + it "fixes delegation warnings when calling a proc accepting keywords" 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 + -> { 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 + end - it "returns self" do - f = -> *a { } - f.ruby2_keywords.should equal f - 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 { } + 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 + -> { + 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: { } + 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 + -> { + 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 { } + 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 + -> { + f.ruby2_keywords + }.should complain(/Skipping set of ruby2_keywords flag for/) end end diff --git a/spec/ruby/core/proc/shared/compose.rb b/spec/ruby/core/proc/shared/compose.rb index e3ae7f76b8..3d3f3b310d 100644 --- a/spec/ruby/core/proc/shared/compose.rb +++ b/spec/ruby/core/proc/shared/compose.rb @@ -1,47 +1,22 @@ describe :proc_compose, shared: true do - ruby_version_is ""..."2.7" do - it "raises NoMethodError when called if passed not callable object" do - not_callable = Object.new - composed = @object.call.send(@method, not_callable) + it "raises TypeError if passed not callable object" do + lhs = @object.call + not_callable = Object.new - -> { - composed.call('a') - }.should raise_error(NoMethodError, /undefined method `call' for/) + -> { + lhs.send(@method, not_callable) + }.should raise_error(TypeError, "callable object is expected") - end - - it "when called does not try to coerce argument with #to_proc" do - succ = Object.new - def succ.to_proc(s); s.succ; end - - composed = @object.call.send(@method, succ) - - -> { - composed.call('a') - }.should raise_error(NoMethodError, /undefined method `call' for/) - end end - ruby_version_is "2.7" do # https://bugs.ruby-lang.org/issues/15428 - it "raises TypeError if passed not callable object" do - lhs = @object.call - not_callable = Object.new - - -> { - lhs.send(@method, not_callable) - }.should raise_error(TypeError, "callable object is expected") - - end - - it "does not try to coerce argument with #to_proc" do - lhs = @object.call + it "does not try to coerce argument with #to_proc" do + lhs = @object.call - succ = Object.new - def succ.to_proc(s); s.succ; end + succ = Object.new + def succ.to_proc(s); s.succ; end - -> { - lhs.send(@method, succ) - }.should raise_error(TypeError, "callable object is expected") - end + -> { + lhs.send(@method, succ) + }.should raise_error(TypeError, "callable object is expected") end end diff --git a/spec/ruby/core/proc/shared/to_s.rb b/spec/ruby/core/proc/shared/to_s.rb index 7f167a3d9d..f1e2f416fc 100644 --- a/spec/ruby/core/proc/shared/to_s.rb +++ b/spec/ruby/core/proc/shared/to_s.rb @@ -1,9 +1,7 @@ describe :proc_to_s, shared: true do - sep = ruby_version_is("2.7") ? " " : "@" - describe "for a proc created with Proc.new" do it "returns a description including file and line number" do - Proc.new { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?)#{sep}#{Regexp.escape __FILE__}:#{__LINE__ }>$/ + Proc.new { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?) #{Regexp.escape __FILE__}:#{__LINE__ }>$/ end it "has a binary encoding" do @@ -13,7 +11,7 @@ describe :proc_to_s, shared: true do describe "for a proc created with lambda" do it "returns a description including '(lambda)' and including file and line number" do - -> { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?)#{sep}#{Regexp.escape __FILE__}:#{__LINE__ } \(lambda\)>$/ + -> { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?) #{Regexp.escape __FILE__}:#{__LINE__ } \(lambda\)>$/ end it "has a binary encoding" do @@ -23,7 +21,7 @@ describe :proc_to_s, shared: true do describe "for a proc created with proc" do it "returns a description including file and line number" do - proc { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?)#{sep}#{Regexp.escape __FILE__}:#{__LINE__ }>$/ + proc { "hello" }.send(@method).should =~ /^#<Proc:([^ ]*?) #{Regexp.escape __FILE__}:#{__LINE__ }>$/ end it "has a binary encoding" do @@ -36,7 +34,7 @@ describe :proc_to_s, shared: true do def hello; end s = method("hello").to_proc.send(@method) if s.include? __FILE__ - s.should =~ /^#<Proc:([^ ]*?)#{sep}#{Regexp.escape __FILE__}:#{__LINE__ - 3} \(lambda\)>$/ + s.should =~ /^#<Proc:([^ ]*?) #{Regexp.escape __FILE__}:#{__LINE__ - 3} \(lambda\)>$/ else s.should =~ /^#<Proc:([^ ]*?) \(lambda\)>$/ end |