Sha256: d359aab00f4c8392a49e288a60a0386f03b0e298d806967eec5691a03ef102b4

Contents?: true

Size: 1.93 KB

Versions: 6

Compression:

Stored size: 1.93 KB

Contents

unless Object.const_defined? :BindingOfCaller
  $:.unshift File.expand_path '../../lib', __FILE__
  require 'binding_of_caller'
  require 'binding_of_caller/version'
end

puts "Testing binding_of_caller version #{BindingOfCaller::VERSION}..."
puts "Ruby version: #{RUBY_VERSION}"

describe BindingOfCaller do
  describe "of_caller" do
    it "should fetch immediate caller's binding when 0 is passed" do
      o = Object.new
      def o.a
        var = 1
        binding.of_caller(0).eval('var')
      end

      o. a.should == 1
    end

    it "should fetch parent of caller's binding when 1 is passed" do
      o = Object.new
      def o.a
        var = 1
        b
      end

      def o.b
        binding.of_caller(1).eval('var')
      end

      o.a.should == 1
    end

    it "should modify locals in parent of caller's binding" do
      o = Object.new
      def o.a
        var = 1
        b
        var
      end

      def o.b
        binding.of_caller(1).eval('var = 20')
      end

      o.a.should == 20
    end

    it "should raise an exception when retrieving an out of band binding" do
      o = Object.new
      def o.a
        binding.of_caller(100)
      end

      lambda { o.a }.should.raise RuntimeError
    end
  end

  describe "frame_count" do
    it 'frame_count should equal callers.count' do
      binding.frame_count.should == binding.callers.count
    end
  end

  describe "frame_type" do
    it 'should return the correct frame types' do
      o = Object.new

      # method frame
      def o.a
        b
      end

      # method frame
      def o.b
        # block frame
        proc do
          binding.callers
        end.call
      end
      caller_bindings = o.a
      caller_bindings[0].frame_type.should == :block
      caller_bindings[1].frame_type.should == :method
      caller_bindings[2].frame_type.should == :method
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
binding_of_caller-0.6.6 test/test_binding_of_caller.rb
binding_of_caller-0.6.5 test/test_binding_of_caller.rb
binding_of_caller-0.6.4 test/test_binding_of_caller.rb
binding_of_caller-0.6.3 test/test.rb
binding_of_caller-0.6.3-universal-rubinius test/test.rb
binding_of_caller-0.6.2 test/test.rb