aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2019-07-14 23:41:43 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2019-12-21 09:08:52 -0500
commite0b336c8ce84e1456fc6126ca232289667db3e19 (patch)
tree44bc6033eb0e637356e9cbc2f02b6131a6a847ed
parentea405ee8ed00c03e0521ff4b852d8f3bea849243 (diff)
downloadruby-e0b336c8ce84e1456fc6126ca232289667db3e19.tar.gz
Add specs for calling into Kernel#lambda with super
-rw-r--r--spec/ruby/core/kernel/fixtures/classes.rb22
-rw-r--r--spec/ruby/core/kernel/lambda_spec.rb17
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