mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			234 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: false
 | |
| require 'test/unit'
 | |
| require 'tmpdir'
 | |
| 
 | |
| class TestTracer < Test::Unit::TestCase
 | |
|   include EnvUtil
 | |
| 
 | |
|   def test_tracer_with_option_r
 | |
|     assert_in_out_err(%w[-rtracer -e 1]) do |(*lines),|
 | |
|       case lines.size
 | |
|       when 1
 | |
|         # do nothing
 | |
|       else
 | |
|         assert_match(%r{rubygems/core_ext/kernel_require\.rb:\d+:Kernel:<:}, lines[0])
 | |
|       end
 | |
|       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),|
 | |
|       assert_equal 1, lines.size, "unexpected output from `ruby --disable-gems -rtracer -e 1`"
 | |
|       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
 | |
| 
 | |
|   def test_tracer_by_add_filter_with_block
 | |
|     Dir.mktmpdir("test_ruby_tracer") do |dir|
 | |
|       script = File.join(dir, "require_tracer.rb")
 | |
|       open(script, "w") do |f|
 | |
|         f.print <<-'EOF'
 | |
| require 'tracer'
 | |
| 
 | |
| class Hoge
 | |
|   def Hoge.fuga(i)
 | |
|     "fuga #{i}"
 | |
|   end
 | |
| end
 | |
| 
 | |
| Tracer.add_filter {|event, file, line, id, binding, klass|
 | |
|   event =~ /line/ and klass.to_s =~ /hoge/i
 | |
| }
 | |
| Tracer.on
 | |
| for i in 0..3
 | |
|   puts Hoge.fuga(i) if i % 3 == 0
 | |
| end
 | |
| Tracer.off
 | |
|         EOF
 | |
|       end
 | |
|       assert_in_out_err([script]) do |(*lines), err|
 | |
|         expected = [
 | |
|           "#0:#{script}:5:Hoge:-:     \"fuga \#{i}\"",
 | |
|           "fuga 0",
 | |
|           "#0:#{script}:5:Hoge:-:     \"fuga \#{i}\"",
 | |
|           "fuga 3"
 | |
|         ]
 | |
|         assert_equal(expected, lines)
 | |
|         assert_empty(err)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_tracer_by_add_filter_with_proc
 | |
|     Dir.mktmpdir("test_ruby_tracer") do |dir|
 | |
|       script = File.join(dir, "require_tracer.rb")
 | |
|       open(script, "w") do |f|
 | |
|         f.print <<-'EOF'
 | |
| require 'tracer'
 | |
| 
 | |
| class Hoge
 | |
|   def Hoge.fuga(i)
 | |
|     "fuga #{i}"
 | |
|   end
 | |
| end
 | |
| 
 | |
| a_proc_to_add_filter = proc {|event, file, line, id, binding, klass|
 | |
|   event =~ /line/ and klass.to_s =~ /hoge/i
 | |
| }
 | |
| Tracer.add_filter(a_proc_to_add_filter)
 | |
| Tracer.on
 | |
| for i in 0..3
 | |
|   puts Hoge.fuga(i) if i % 3 == 0
 | |
| end
 | |
| Tracer.off
 | |
|         EOF
 | |
|       end
 | |
|       assert_in_out_err([script]) do |(*lines), err|
 | |
|         expected = [
 | |
|           "#0:#{script}:5:Hoge:-:     \"fuga \#{i}\"",
 | |
|           "fuga 0",
 | |
|           "#0:#{script}:5:Hoge:-:     \"fuga \#{i}\"",
 | |
|           "fuga 3"
 | |
|         ]
 | |
|         assert_equal(expected, lines)
 | |
|         assert_empty(err)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_tracer_by_set_get_line_procs_with_block
 | |
|     Dir.mktmpdir("test_ruby_tracer") do |dir|
 | |
|       dummy_script = File.join(dir, "dummy.rb")
 | |
|       open(dummy_script, "w") do |f|
 | |
|         f.print <<-'EOF'
 | |
| class Dummy
 | |
|   def initialize
 | |
|     @number = 135
 | |
|   end
 | |
|   attr :number
 | |
| end
 | |
|         EOF
 | |
|       end
 | |
|       dummy_script = File.realpath dummy_script
 | |
|       script = File.join(dir, "require_tracer.rb")
 | |
|       open(script, "w") do |f|
 | |
|         f.print <<-EOF
 | |
| require 'tracer'
 | |
| 
 | |
| Tracer.set_get_line_procs('#{dummy_script}') { |line|
 | |
|   str = %{\\n}
 | |
|   str = %{!!\\n} if line >= 3 and line <= 6
 | |
|   str
 | |
| }
 | |
| Tracer.on
 | |
| require_relative 'dummy'
 | |
| 
 | |
| dm = Dummy.new
 | |
| puts dm.number
 | |
|         EOF
 | |
|       end
 | |
|       assert_in_out_err([script]) do |(*lines), err|
 | |
|         expected = [
 | |
|           "#0:#{script}:9::-: require_relative 'dummy'",
 | |
|           "#0:#{dummy_script}:1::-: ",
 | |
|           "#0:#{dummy_script}:1::C: ",
 | |
|           "#0:#{dummy_script}:2::-: ",
 | |
|           "#0:#{dummy_script}:5::-: !!",
 | |
|           "#0:#{dummy_script}:6::E: !!",
 | |
|           "#0:#{script}:11::-: dm = Dummy.new",
 | |
|           "#0:#{dummy_script}:2:Dummy:>: ",
 | |
|           "#0:#{dummy_script}:3:Dummy:-: !!",
 | |
|           "#0:#{dummy_script}:4:Dummy:<: !!",
 | |
|           "#0:#{script}:12::-: puts dm.number",
 | |
|           "135"
 | |
|         ]
 | |
|         assert_equal(expected, lines)
 | |
|         assert_empty(err)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_tracer_by_set_get_line_procs_with_proc
 | |
|     Dir.mktmpdir("test_ruby_tracer") do |dir|
 | |
|       dummy_script = File.join(dir, "dummy.rb")
 | |
|       open(dummy_script, "w") do |f|
 | |
|         f.print <<-'EOF'
 | |
| class Dummy
 | |
|   def initialize
 | |
|     @number = 135
 | |
|   end
 | |
|   attr :number
 | |
| end
 | |
|         EOF
 | |
|       end
 | |
|       dummy_script = File.realpath dummy_script
 | |
|       script = File.join(dir, "require_tracer.rb")
 | |
|       open(script, "w") do |f|
 | |
|         f.print <<-EOF
 | |
| require 'tracer'
 | |
| 
 | |
| a_proc_to_set_get_line_procs = proc { |line|
 | |
|   str = %{\\n}
 | |
|   str = %{!!\\n} if line >= 3 and line <= 6
 | |
|   str
 | |
| }
 | |
| Tracer.set_get_line_procs('#{dummy_script}', a_proc_to_set_get_line_procs)
 | |
| Tracer.on
 | |
| require_relative 'dummy'
 | |
| 
 | |
| dm = Dummy.new
 | |
| puts dm.number
 | |
|         EOF
 | |
|       end
 | |
|       assert_in_out_err([script]) do |(*lines), err|
 | |
|         expected = [
 | |
|           "#0:#{script}:10::-: require_relative 'dummy'",
 | |
|           "#0:#{dummy_script}:1::-: ",
 | |
|           "#0:#{dummy_script}:1::C: ",
 | |
|           "#0:#{dummy_script}:2::-: ",
 | |
|           "#0:#{dummy_script}:5::-: !!",
 | |
|           "#0:#{dummy_script}:6::E: !!",
 | |
|           "#0:#{script}:12::-: dm = Dummy.new",
 | |
|           "#0:#{dummy_script}:2:Dummy:>: ",
 | |
|           "#0:#{dummy_script}:3:Dummy:-: !!",
 | |
|           "#0:#{dummy_script}:4:Dummy:<: !!",
 | |
|           "#0:#{script}:13::-: puts dm.number",
 | |
|           "135"
 | |
|         ]
 | |
|         assert_equal(expected, lines)
 | |
|         assert_empty(err)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
