summaryrefslogtreecommitdiff
path: root/spec/ruby/core/tracepoint/enable_spec.rb
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2020-05-31 18:22:49 +0200
committerBenoit Daloze <eregontp@gmail.com>2020-05-31 18:22:49 +0200
commit34776105c8a6739ca3aad1de4a2c942f4a8f2f29 (patch)
tree0103cf2cc89c1322d8c3e88fff0a80b54db8320b /spec/ruby/core/tracepoint/enable_spec.rb
parentf4502b001a665109bf776f9037ecbc52cb5f2d88 (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.rb135
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