summaryrefslogtreecommitdiff
path: root/spec/ruby/core/tracepoint/allow_reentry_spec.rb
blob: 75e9e859a913d441d745c4147f1aea93abc30a8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
require_relative '../../spec_helper'
require_relative 'fixtures/classes'

describe 'TracePoint.allow_reentry' do
  it 'allows the reentrance in a given block' do
    event_lines = []
    l1 = l2 = l3 = l4 = nil
    TracePoint.new(:line) do |tp|
      next unless TracePointSpec.target_thread?

      event_lines << tp.lineno
      next if (__LINE__ + 2 .. __LINE__ + 4).cover?(tp.lineno)
      TracePoint.allow_reentry do
        a = 1; l3 = __LINE__
        b = 2; l4 = __LINE__
      end
    end.enable do
      c = 3; l1 = __LINE__
      d = 4; l2 = __LINE__
    end

    event_lines.should == [l1, l3, l4, l2, l3, l4]
  end

  it 'raises RuntimeError when not called inside a TracePoint' do
    -> {
      TracePoint.allow_reentry{}
    }.should raise_error(RuntimeError)
  end
end