diff --git a/ChangeLog b/ChangeLog index 5241771329..380453df6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Jun 29 22:04:14 2011 CHIKANAGA Tomoyuki + + * lib/tracer.rb: Tracer.on only if required by -r command-line option. + and consider --disable-gems option. + * test/test_tracer.rb: add tests for it. + Wed Jun 29 13:55:36 2011 Yukihiro Matsumoto * variable.c (rb_const_get_0): should not look for superclasses if diff --git a/lib/tracer.rb b/lib/tracer.rb index b1f08f3f68..4b2429508d 100644 --- a/lib/tracer.rb +++ b/lib/tracer.rb @@ -287,7 +287,12 @@ if $0 == __FILE__ ARGV.shift Tracer.on require $0 -elsif caller.count {|bt| /\/rubygems\/custom_require.rb:/ !~ bt} <= 1 - Tracer.on +else + # call Tracer.on only if required by -r command-line option + count = caller.count {|bt| /\/rubygems\/custom_require.rb:/ !~ bt} + if (defined?(Gem) and count == 0) or + (!defined?(Gem) and count <= 1) + Tracer.on + end end # :startdoc: diff --git a/test/test_tracer.rb b/test/test_tracer.rb index 8f542e6e84..a1e0a4571c 100644 --- a/test/test_tracer.rb +++ b/test/test_tracer.rb @@ -1,14 +1,15 @@ require 'test/unit' +require 'tmpdir' require_relative 'ruby/envutil' class TestTracer < Test::Unit::TestCase include EnvUtil - def test_work_with_e - assert_in_out_err(%w[--disable-gems -rtracer -e 1]) do |(*lines),| + def test_tracer_with_option_r + assert_in_out_err(%w[-rtracer -e 1]) do |(*lines),| case lines.size when 2 - assert_match %r[#0::\d+:Kernel:<: -], lines[0] + assert_match(%r{rubygems/custom_require\.rb:\d+:Kernel:<:}, lines[0]) when 1 # do nothing else @@ -17,4 +18,46 @@ class TestTracer < Test::Unit::TestCase assert_equal "#0:-e:1::-: 1", lines.last end end + + def test_tracer_with_option_r_without_gems + assert_in_out_err(%w[--disable-gems -rtracer -e 1]) do |(*lines),| + case lines.size + when 1 + # do nothing + else + flunk "unexpected output from `ruby --disable-gems -rtracer -e 1`" + end + assert_equal "#0:-e:1::-: 1", lines.last + end + end + + def test_tracer_with_require + Dir.mktmpdir("test_ruby_tracer") do |dir| + script = File.join(dir, "require_tracer.rb") + open(script, "w") do |f| + f.print <<-EOF +require 'tracer' +1 + EOF + end + assert_in_out_err([script]) do |(*lines),| + assert_empty(lines) + end + end + end + + def test_tracer_with_require_without_gems + Dir.mktmpdir("test_ruby_tracer") do |dir| + script = File.join(dir, "require_tracer.rb") + open(script, "w") do |f| + f.print <<-EOF +require 'tracer' +1 + EOF + end + assert_in_out_err(["--disable-gems", script]) do |(*lines),| + assert_empty(lines) + end + end + end end