From e0b336c8ce84e1456fc6126ca232289667db3e19 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Sun, 14 Jul 2019 23:41:43 -0400 Subject: Add specs for calling into Kernel#lambda with super --- spec/ruby/core/kernel/fixtures/classes.rb | 22 ++++++++++++++++++++++ spec/ruby/core/kernel/lambda_spec.rb | 17 ++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3