summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/ruby/core/tracepoint/enable_spec.rb55
-rw-r--r--spec/ruby/core/tracepoint/inspect_spec.rb4
-rw-r--r--test/ruby/test_settracefunc.rb37
-rw-r--r--trace_point.rb9
4 files changed, 68 insertions, 37 deletions
@@ -57,25 +57,50 @@ describe 'TracePoint#enable' do
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
@@ -98,7 +98,7 @@ describe 'TracePoint#inspect' do
TracePoint.new(:thread_begin) { |tp|
next unless Thread.current == thread
inspect ||= tp.inspect
- }.enable do
thread = Thread.new {}
thread_inspection = thread.inspect
thread.join
@@ -114,7 +114,7 @@ describe 'TracePoint#inspect' do
TracePoint.new(:thread_end) { |tp|
next unless Thread.current == thread
inspect ||= tp.inspect
- }.enable do
thread = Thread.new {}
thread_inspection = thread.inspect
thread.join
@@ -727,25 +727,30 @@ CODE
def test_tracepoint_enable
ary = []
args = nil
- trace = TracePoint.new(:call){|tp|
- next if !target_thread?
- ary << tp.method_id
- }
- foo
- trace.enable{|*a|
- args = a
foo
- }
- foo
- assert_equal([:foo], ary)
- assert_equal([], args)
trace = TracePoint.new{}
begin
assert_equal(false, trace.enable)
assert_equal(true, trace.enable)
- trace.enable{}
- assert_equal(true, trace.enable)
ensure
trace.disable
end
@@ -977,7 +982,7 @@ CODE
tp.defined_class, #=> nil,
tp.self.class # tp.self return creating/ending thread
]
- }.enable{
created_thread = Thread.new{thread_self = self}
created_thread.join
}
@@ -2239,7 +2244,7 @@ CODE
# global TP and targeted TP
ex = assert_raise(ArgumentError) do
tp = TracePoint.new(:line){}
- tp.enable{
tp.enable(target: code2){}
}
end
@@ -2285,7 +2290,7 @@ CODE
events << :___
end
end
- assert_equal [:tp1, :tp1, :tp1, :tp1, :tp2, :tp1, :___], events
# success with two tracepoints (targeting/global)
events = []
@@ -153,7 +153,7 @@ class TracePoint
# call-seq:
# trace.enable(target: nil, target_line: nil, target_thread: nil) -> true or false
- # trace.enable(target: nil, target_line: nil, target_thread: nil) { block } -> obj
#
# Activates the trace.
#
@@ -168,14 +168,15 @@ class TracePoint
# # trace is still enabled
#
# If a block is given, the trace will only be enabled within the scope of the
- # block.
#
# trace.enabled?
# #=> false
#
# trace.enable do
# trace.enabled?
- # # only enabled for this block
# end
#
# trace.enabled?
@@ -208,7 +209,7 @@ class TracePoint
# trace.enable { p tp.lineno }
# #=> RuntimeError: access from outside
#
- def enable(target: nil, target_line: nil, target_thread: nil)
Primitive.tracepoint_enable_m(target, target_line, target_thread)
end