1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/tracepoint/inspect_spec.rb
Nguyễn Quang Minh 1819652578
[Feature #16513] TracePoint#inspect returns "... file:line" (#3391)
* Fix debug documents to match Thread#to_s change (Feature #16412 ticket)

* TracePoint#inspect returns "... file:line" (Feature #16513)

* Guard older version of Ruby in Tracepoint inspection tests

* Focus on current thread only when running TracePoint inspection test
2020-08-06 11:56:24 +09:00

127 lines
3.4 KiB
Ruby

require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe 'TracePoint#inspect' do
before do
ruby_version_is ""..."2.8" do
# Old behavior for Ruby < 2.8
@path_prefix = '@'
end
ruby_version_is "2.8" do
# New behavior for Ruby >= 2.8
@path_prefix = ' '
end
end
it 'returns a string containing a human-readable TracePoint status' do
TracePoint.new(:line) {}.inspect.should == '#<TracePoint:disabled>'
end
it 'returns a String showing the event, path and line' do
inspect = nil
line = nil
TracePoint.new(:line) { |tp|
next unless TracePointSpec.target_thread?
inspect ||= tp.inspect
}.enable do
line = __LINE__
end
inspect.should == "#<TracePoint:line#{@path_prefix}#{__FILE__}:#{line}>"
end
it 'returns a String showing the event, method, path and line for a :call event' do
inspect = nil
line = nil
TracePoint.new(:call) { |tp|
next unless TracePointSpec.target_thread?
inspect ||= tp.inspect
}.enable do
line = __LINE__ + 1
def trace_point_spec_test_call; end
trace_point_spec_test_call
end
inspect.should == "#<TracePoint:call `trace_point_spec_test_call'#{@path_prefix}#{__FILE__}:#{line}>"
end
it 'returns a String showing the event, method, path and line for a :return event' do
inspect = nil
line = nil
TracePoint.new(:return) { |tp|
next unless TracePointSpec.target_thread?
inspect ||= tp.inspect
}.enable do
line = __LINE__ + 4
def trace_point_spec_test_return
a = 1
return a
end
trace_point_spec_test_return
end
inspect.should == "#<TracePoint:return `trace_point_spec_test_return'#{@path_prefix}#{__FILE__}:#{line}>"
end
it 'returns a String showing the event, method, path and line for a :c_call event' do
inspect = nil
line = nil
TracePoint.new(:c_call) { |tp|
next unless TracePointSpec.target_thread?
inspect ||= tp.inspect
}.enable do
line = __LINE__ + 1
[0, 1].max
end
inspect.should == "#<TracePoint:c_call `max'#{@path_prefix}#{__FILE__}:#{line}>"
end
it 'returns a String showing the event, path and line for a :class event' do
inspect = nil
line = nil
TracePoint.new(:class) { |tp|
next unless TracePointSpec.target_thread?
inspect ||= tp.inspect
}.enable do
line = __LINE__ + 1
class TracePointSpec::C
end
end
inspect.should == "#<TracePoint:class#{@path_prefix}#{__FILE__}:#{line}>"
end
it 'returns a String showing the event and thread for :thread_begin event' do
inspect = nil
thread = nil
thread_inspection = nil
TracePoint.new(:thread_begin) { |tp|
next unless Thread.current == thread
inspect ||= tp.inspect
}.enable do
thread = Thread.new {}
thread_inspection = thread.inspect
thread.join
end
inspect.should == "#<TracePoint:thread_begin #{thread_inspection}>"
end
it 'returns a String showing the event and thread for :thread_end event' do
inspect = nil
thread = nil
thread_inspection = nil
TracePoint.new(:thread_end) { |tp|
next unless Thread.current == thread
inspect ||= tp.inspect
}.enable do
thread = Thread.new {}
thread_inspection = thread.inspect
thread.join
end
inspect.should == "#<TracePoint:thread_end #{thread_inspection}>"
end
end