Skip to content

Commit

Permalink
Merge pull request #1123 from herwinw/kernel_caller
Browse files Browse the repository at this point in the history
Add more specs for Kernel#caller with a Range argument
  • Loading branch information
andrykonchin committed Jun 26, 2024
2 parents a57ed37 + ca13aaa commit 0f7410d
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions core/kernel/caller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,44 @@
lines[1].should =~ /\A#{path}:2:in [`']block in <main>'\n\z/
end

it "can be called with a range" do
locations1 = caller(0)
locations2 = caller(2..4)
locations1[2..4].should == locations2
end

it "works with endless ranges" do
locations1 = KernelSpecs::CallerTest.locations(0)
locations2 = KernelSpecs::CallerTest.locations(eval("(2..)"))
locations2.map(&:to_s).should == locations1[2..-1].map(&:to_s)
locations2.should == locations1[2..-1]
end

it "works with beginless ranges" do
locations1 = KernelSpecs::CallerTest.locations(0)
locations2 = KernelSpecs::CallerTest.locations((..5))
locations2.map(&:to_s)[eval("(2..)")].should == locations1[(..5)].map(&:to_s)[eval("(2..)")]
locations2[eval("(2..)")].should == locations1[(..5)][eval("(2..)")]
end

it "can be called with a range whose end is negative" do
locations1 = caller(0)
locations2 = caller(2..-1)
locations3 = caller(2..-2)
locations1[2..-1].should == locations2
locations1[2..-2].should == locations3
end

it "must return nil if omitting more locations than available" do
caller(100).should == nil
caller(100..-1).should == nil
end

it "must return [] if omitting exactly the number of locations available" do
omit = caller(0).length
caller(omit).should == []
end

it "must return the same locations when called with 1..-1 and when called with no arguments" do
caller.should == caller(1..-1)
end

guard -> { Kernel.instance_method(:tap).source_location } do
Expand Down

0 comments on commit 0f7410d

Please sign in to comment.