diff options
author | Benoit Daloze <eregontp@gmail.com> | 2020-05-31 18:22:49 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2020-05-31 18:22:49 +0200 |
commit | 34776105c8a6739ca3aad1de4a2c942f4a8f2f29 (patch) | |
tree | 0103cf2cc89c1322d8c3e88fff0a80b54db8320b /spec/ruby/core/tracepoint/enable_spec.rb | |
parent | f4502b001a665109bf776f9037ecbc52cb5f2d88 (diff) |
Update to ruby/spec@4e486fa
Diffstat (limited to 'spec/ruby/core/tracepoint/enable_spec.rb')
-rw-r--r-- | spec/ruby/core/tracepoint/enable_spec.rb | 135 |
1 files changed, 98 insertions, 37 deletions
diff --git a/spec/ruby/core/tracepoint/enable_spec.rb b/spec/ruby/core/tracepoint/enable_spec.rb index 15eb2f1616..aa0c3aa0dc 100644 --- a/spec/ruby/core/tracepoint/enable_spec.rb +++ b/spec/ruby/core/tracepoint/enable_spec.rb @@ -1,20 +1,21 @@ require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe 'TracePoint#enable' do - # def test; end - describe 'without a block' do - it 'returns true if trace was enabled' do + it 'returns false if trace was disabled' do called = false trace = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? called = true end line_event = true called.should == false - trace.enable + ret = trace.enable begin + ret.should == false line_event = true called.should == true ensure @@ -22,30 +23,27 @@ describe 'TracePoint#enable' do end end - it 'returns false if trace was disabled' do + it 'returns true if trace was already enabled' do called = false trace = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? called = true end - trace.enable.should == false - begin - line_event = true - called.should == true - ensure - trace.disable - end - - called = false line_event = true called.should == false - trace.enable.should == false + ret = trace.enable begin + ret.should == false + + trace.enable.should == true + line_event = true called.should == true ensure trace.disable + trace.should_not.enabled? end end end @@ -54,13 +52,38 @@ describe 'TracePoint#enable' do it 'enables the trace object within a block' do event_name = nil TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? event_name = tp.event end.enable { event_name.should equal(:line) } end + it 'enables the trace object for any thread' do + threads = [] + trace = TracePoint.new(:line) do |tp| + # Runs on purpose on any Thread + threads << Thread.current + end + + thread = nil + trace.enable do + line_event = true + thread = Thread.new do + event_in_other_thread = true + end + thread.join + end + + threads = threads.uniq + threads.should.include?(Thread.current) + threads.should.include?(thread) + end + it 'can accept arguments within a block but it should not yield arguments' do event_name = nil - trace = TracePoint.new(:line) { |tp| event_name = tp.event } + trace = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? + event_name = tp.event + end trace.enable do |*args| event_name.should equal(:line) args.should == [] @@ -87,7 +110,10 @@ describe 'TracePoint#enable' do it 'disables the trace object outside the block' do called = false - trace = TracePoint.new(:line) { called = true } + trace = TracePoint.new(:line) do + next unless TracePointSpec.target_thread? + called = true + end trace.enable { line_event = true } @@ -96,6 +122,35 @@ describe 'TracePoint#enable' do end end + describe "when nested" do + it "enables both TracePoints but only calls the respective callbacks" do + called = false + first = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? + called = true + end + + all = [] + inspects = [] + second = TracePoint.new(:line) { |tp| + next unless TracePointSpec.target_thread? + all << tp + inspects << tp.inspect + } + + line = nil + first.enable do + second.enable do + line = __LINE__ + end + end + + all.uniq.should == [second] + inspects.uniq.should == ["#<TracePoint:line@#{__FILE__}:#{line}>"] + called.should == true + end + end + ruby_version_is "2.6" do describe 'target: option' do before :each do @@ -104,6 +159,7 @@ describe 'TracePoint#enable' do it 'enables trace point for specific location' do trace = TracePoint.new(:call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.method_id end @@ -121,6 +177,7 @@ describe 'TracePoint#enable' do it 'traces all the events triggered in specified location' do trace = TracePoint.new(:line, :call, :return, :b_call, :b_return) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.event end @@ -140,6 +197,7 @@ describe 'TracePoint#enable' do it 'does not trace events in nested locations' do trace = TracePoint.new(:call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.method_id end @@ -177,6 +235,7 @@ describe 'TracePoint#enable' do end trace = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.lineno end @@ -193,6 +252,7 @@ describe 'TracePoint#enable' do describe 'option value' do it 'accepts Method' do trace = TracePoint.new(:call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.method_id end @@ -208,6 +268,7 @@ describe 'TracePoint#enable' do it 'accepts UnboundMethod' do trace = TracePoint.new(:call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.method_id end @@ -225,6 +286,7 @@ describe 'TracePoint#enable' do it 'accepts Proc' do trace = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.lineno end @@ -242,6 +304,7 @@ describe 'TracePoint#enable' do it "raises ArgumentError if target object cannot trigger specified event" do trace = TracePoint.new(:call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.method_id end @@ -255,8 +318,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if passed not Method/UnboundMethod/Proc" do - trace = TracePoint.new(:call) do |tp| - end + trace = TracePoint.new(:call) {} -> { trace.enable(target: Object.new) do @@ -266,8 +328,7 @@ describe 'TracePoint#enable' do context "nested enabling and disabling" do it "raises ArgumentError if trace point already enabled with target is re-enabled with target" do - trace = TracePoint.new(:b_call) do - end + trace = TracePoint.new(:b_call) {} -> { trace.enable(target: -> {}) do @@ -278,8 +339,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if trace point already enabled without target is re-enabled with target" do - trace = TracePoint.new(:b_call) do - end + trace = TracePoint.new(:b_call) {} -> { trace.enable do @@ -290,8 +350,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if trace point already enabled with target is re-enabled without target" do - trace = TracePoint.new(:b_call) do - end + trace = TracePoint.new(:b_call) {} -> { trace.enable(target: -> {}) do @@ -302,8 +361,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if trace point already enabled with target is disabled with block" do - trace = TracePoint.new(:b_call) do - end + trace = TracePoint.new(:b_call) {} -> { trace.enable(target: -> {}) do @@ -315,10 +373,12 @@ describe 'TracePoint#enable' do it "traces events when trace point with target is enabled in another trace point enabled without target" do trace_outer = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :outer end trace_inner = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :inner end @@ -335,10 +395,12 @@ describe 'TracePoint#enable' do it "traces events when trace point with target is enabled in another trace point enabled with target" do trace_outer = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :outer end trace_inner = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :inner end @@ -355,10 +417,12 @@ describe 'TracePoint#enable' do it "traces events when trace point without target is enabled in another trace point enabled with target" do trace_outer = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :outer end trace_inner = TracePoint.new(:b_call) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << :inner end @@ -382,6 +446,7 @@ describe 'TracePoint#enable' do it "traces :line events only on specified line of code" do trace = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.lineno end @@ -401,8 +466,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if :target option isn't specified" do - trace = TracePoint.new(:line) do |tp| - end + trace = TracePoint.new(:line) {} -> { trace.enable(target_line: 67) do @@ -411,8 +475,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if :line event isn't registered" do - trace = TracePoint.new(:call) do |tp| - end + trace = TracePoint.new(:call) {} target = -> { x = 1 @@ -429,8 +492,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if :target_line value is out of target code lines range" do - trace = TracePoint.new(:line) do |tp| - end + trace = TracePoint.new(:line) {} -> { trace.enable(target_line: 1, target: -> { }) do @@ -439,8 +501,7 @@ describe 'TracePoint#enable' do end it "raises TypeError if :target_line value couldn't be coerced to Integer" do - trace = TracePoint.new(:line) do |tp| - end + trace = TracePoint.new(:line) {} -> { trace.enable(target_line: Object.new, target: -> { }) do @@ -449,8 +510,7 @@ describe 'TracePoint#enable' do end it "raises ArgumentError if :target_line value is negative" do - trace = TracePoint.new(:line) do |tp| - end + trace = TracePoint.new(:line) {} -> { trace.enable(target_line: -2, target: -> { }) do @@ -460,6 +520,7 @@ describe 'TracePoint#enable' do it "accepts value that could be coerced to Integer" do trace = TracePoint.new(:line) do |tp| + next unless TracePointSpec.target_thread? ScratchPad << tp.lineno end |