diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2019-07-14 23:41:43 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2019-12-21 09:08:52 -0500 |
commit | e0b336c8ce84e1456fc6126ca232289667db3e19 (patch) | |
tree | 44bc6033eb0e637356e9cbc2f02b6131a6a847ed /spec/ruby | |
parent | ea405ee8ed00c03e0521ff4b852d8f3bea849243 (diff) | |
download | ruby-e0b336c8ce84e1456fc6126ca232289667db3e19.tar.gz |
Add specs for calling into Kernel#lambda with super
Diffstat (limited to 'spec/ruby')
-rw-r--r-- | spec/ruby/core/kernel/fixtures/classes.rb | 22 | ||||
-rw-r--r-- | spec/ruby/core/kernel/lambda_spec.rb | 17 |
2 files changed, 38 insertions, 1 deletions
diff --git a/spec/ruby/core/kernel/fixtures/classes.rb b/spec/ruby/core/kernel/fixtures/classes.rb index 2909a621a9..2f2bbf1b23 100644 --- a/spec/ruby/core/kernel/fixtures/classes.rb +++ b/spec/ruby/core/kernel/fixtures/classes.rb @@ -337,6 +337,28 @@ module KernelSpecs end end + module LambdaSpecs + module ZSuper + def lambda + super + end + end + + class ForwardBlockWithZSuper + prepend(ZSuper) + end + + module Ampersand + def lambda(&block) + super(&block) + end + end + + class SuperAmpersand + prepend(Ampersand) + end + end + class RespondViaMissing def respond_to_missing?(method, priv=false) case method diff --git a/spec/ruby/core/kernel/lambda_spec.rb b/spec/ruby/core/kernel/lambda_spec.rb index 4796d65352..537ac2628c 100644 --- a/spec/ruby/core/kernel/lambda_spec.rb +++ b/spec/ruby/core/kernel/lambda_spec.rb @@ -31,13 +31,28 @@ describe "Kernel.lambda" do l.lambda?.should be_true end - it "returned the passed Proc if given an existing Proc" do + it "returns the passed Proc if given an existing Proc" do some_proc = proc {} l = lambda(&some_proc) l.should equal(some_proc) l.lambda?.should be_false end + it "creates a lambda-style Proc when called with zsuper" do + l = KernelSpecs::LambdaSpecs::ForwardBlockWithZSuper.new.lambda { 42 } + l.lambda?.should be_true + l.call.should == 42 + + lambda { l.call(:extra) }.should raise_error(ArgumentError) + end + + it "returns the passed Proc if given an existing Proc through super" do + some_proc = proc { } + l = KernelSpecs::LambdaSpecs::SuperAmpersand.new.lambda(&some_proc) + l.should equal(some_proc) + l.lambda?.should be_false + end + it "checks the arity of the call when no args are specified" do l = lambda { :called } l.call.should == :called |