@@ -32,6 +32,24 @@ def run_trace(tracer_script, program_name, *args)
3232 end
3333 end
3434
35+ def run_trace_with_separator ( tracer_script , program_name , *args )
36+ base = File . basename ( program_name , '.rb' )
37+ tracer_name = tracer_script . include? ( 'native' ) ? 'native' : 'pure'
38+ Dir . chdir ( File . expand_path ( '..' , __dir__ ) ) do
39+ program = File . join ( 'test' , 'programs' , program_name )
40+ out_dir = File . join ( 'test' , 'tmp' , "#{ base } _dashdash" , tracer_name )
41+ FileUtils . mkdir_p ( out_dir )
42+ stdout , stderr , status = Open3 . capture3 (
43+ RbConfig . ruby , tracer_script , '--out-dir' , out_dir , '--' , program , *args
44+ )
45+ raise "trace failed: #{ stderr } " unless status . success?
46+ trace_file = File . join ( out_dir , 'trace.json' )
47+ trace = JSON . parse ( File . read ( trace_file ) ) if File . exist? ( trace_file )
48+ program_out = stdout . lines . reject { |l | l . start_with? ( 'call ' ) || l . start_with? ( 'return' ) } . join
49+ [ trace , program_out ]
50+ end
51+ end
52+
3553 def expected_output ( program_name )
3654 base = File . basename ( program_name , '.rb' )
3755 fixture = File . join ( FIXTURE_DIR , "#{ base } _output.txt" )
@@ -63,6 +81,19 @@ def program_args(base)
6381 end
6482 end
6583
84+ def test_args_sum_with_separator
85+ base = 'args_sum'
86+ pure_trace , pure_out = run_trace_with_separator ( 'gems/codetracer-pure-ruby-recorder/bin/codetracer-pure-ruby-recorder' , "#{ base } .rb" , *program_args ( base ) )
87+ native_trace , native_out = run_trace_with_separator ( 'gems/codetracer-ruby-recorder/bin/codetracer-ruby-recorder' , "#{ base } .rb" , *program_args ( base ) )
88+
89+ expected = expected_trace ( "#{ base } .rb" )
90+ assert_equal expected , pure_trace
91+ assert_equal expected , native_trace
92+ expected = expected_output ( "#{ base } .rb" )
93+ assert_equal expected , pure_out
94+ assert_equal expected , native_out
95+ end
96+
6697 def run_gem_installation_test ( gem_bin , gem_module )
6798 Dir . chdir ( File . expand_path ( '..' , __dir__ ) ) do
6899 gem_dir = File . join ( 'gems' , gem_bin )
@@ -92,15 +123,22 @@ def run_gem_installation_test(gem_bin, gem_module)
92123
93124 out_dir_lib = File . join ( 'test' , 'tmp' , "gem_install_#{ gem_bin . tr ( '-' , '_' ) } _lib" )
94125 FileUtils . rm_rf ( out_dir_lib )
126+ if gem_bin == 'codetracer-ruby-recorder'
127+ class_name = 'CodeTracer::RubyRecorder'
128+ init_args = ''
129+ else
130+ class_name = 'Codetracer::PureRubyRecorder'
131+ init_args = '$codetracer_record'
132+ end
95133 script = <<~RUBY
96134 require '#{ gem_module } '
97- recorder = RubyRecorder. new
135+ recorder = Object.const_get(" #{ class_name } "). new( #{ init_args } )
98136 puts 'start trace'
99- recorder.disable_tracing
137+ recorder.deactivate
100138 puts 'this will not be traced'
101- recorder.enable_tracing
139+ recorder.activate
102140 puts 'this will be traced'
103- recorder.disable_tracing
141+ recorder.deactivate
104142 puts 'tracing disabled'
105143 recorder.flush_trace('#{ out_dir_lib } ')
106144 RUBY
@@ -121,11 +159,11 @@ def run_gem_installation_test(gem_bin, gem_module)
121159 end
122160
123161 def test_gem_installation
124- run_gem_installation_test ( 'codetracer-ruby-recorder' , 'codetracer_ruby_recorder ' )
162+ run_gem_installation_test ( 'codetracer-ruby-recorder' , 'native_trace ' )
125163 end
126164
127165 def test_pure_gem_installation
128- run_gem_installation_test ( 'codetracer-pure-ruby-recorder' , 'codetracer_pure_ruby_recorder ' )
166+ run_gem_installation_test ( 'codetracer-pure-ruby-recorder' , 'trace ' )
129167 end
130168
131169 def test_pure_debug_smoke
0 commit comments