| 
2 | 2 | require 'json'  | 
3 | 3 | require 'fileutils'  | 
4 | 4 | require 'open3'  | 
 | 5 | +require 'tmpdir'  | 
5 | 6 | 
 
  | 
6 | 7 | class TraceTest < Minitest::Test  | 
7 | 8 |   TMP_DIR = File.expand_path('tmp', __dir__)  | 
@@ -60,4 +61,50 @@ def program_args(base)  | 
60 | 61 |       assert_equal expected, native_out  | 
61 | 62 |     end  | 
62 | 63 |   end  | 
 | 64 | + | 
 | 65 | +  def test_gem_installation  | 
 | 66 | +    Dir.chdir(File.expand_path('..', __dir__)) do  | 
 | 67 | +      system('just', 'build-extension', exception: true)  | 
 | 68 | + | 
 | 69 | +      dlext = RbConfig::CONFIG['DLEXT']  | 
 | 70 | +      ext_path = File.join('gems', 'native-tracer', 'ext', 'native_tracer', 'target', 'release', "codetracer_ruby_recorder.#{dlext}")  | 
 | 71 | +      FileUtils.rm_f(ext_path)  | 
 | 72 | + | 
 | 73 | +      Dir.mktmpdir('gemhome') do |gem_home|  | 
 | 74 | +        gem_build = IO.popen(%w[gem -C gems/native-tracer build codetracer-ruby-recorder.gemspec], err: [:child, :out]) { |io| io.read }  | 
 | 75 | +        gem_file = gem_build.lines.grep(/File:/).first.split.last  | 
 | 76 | +        gem_file = File.expand_path(File.join('gems/native-tracer', gem_file))  | 
 | 77 | + | 
 | 78 | +        env = { 'GEM_HOME' => gem_home, 'GEM_PATH' => gem_home, 'PATH' => "#{gem_home}/bin:#{ENV['PATH']}" }  | 
 | 79 | +        system(env, 'gem', 'install', '--local', gem_file, exception: true)  | 
 | 80 | + | 
 | 81 | +        out_dir = File.join('test', 'tmp', 'gem_install')  | 
 | 82 | +        FileUtils.rm_rf(out_dir)  | 
 | 83 | +        stdout, stderr, status = Open3.capture3(env, 'ruby', '-S', 'codetracer-ruby-recorder', '--out-dir', out_dir, File.join('test', 'programs', 'addition.rb'))  | 
 | 84 | +        raise "native_trace failed: #{stderr}" unless status.success?  | 
 | 85 | +        assert_equal "3\n", stdout  | 
 | 86 | +        assert File.exist?(File.join(out_dir, 'trace.json'))  | 
 | 87 | +      end  | 
 | 88 | +    end  | 
 | 89 | +  end  | 
 | 90 | + | 
 | 91 | +  def test_pure_gem_installation  | 
 | 92 | +    Dir.chdir(File.expand_path('..', __dir__)) do  | 
 | 93 | +      Dir.mktmpdir('gemhome') do |gem_home|  | 
 | 94 | +        gem_build = IO.popen(%w[gem -C gems/pure-ruby-tracer build codetracer_pure_ruby_recorder.gemspec], err: [:child, :out]) { |io| io.read }  | 
 | 95 | +        gem_file = gem_build.lines.grep(/File:/).first.split.last  | 
 | 96 | +        gem_file = File.expand_path(File.join('gems/pure-ruby-tracer', gem_file))  | 
 | 97 | + | 
 | 98 | +        env = { 'GEM_HOME' => gem_home, 'GEM_PATH' => gem_home, 'PATH' => "#{gem_home}/bin:#{ENV['PATH']}" }  | 
 | 99 | +        system(env, 'gem', 'install', '--local', gem_file, exception: true)  | 
 | 100 | + | 
 | 101 | +        out_dir = File.join('test', 'tmp', 'gem_install_pure')  | 
 | 102 | +        FileUtils.rm_rf(out_dir)  | 
 | 103 | +        stdout, stderr, status = Open3.capture3(env, 'ruby', '-S', 'codetracer-pure-ruby-recorder', '--out-dir', out_dir, File.join('test', 'programs', 'addition.rb'))  | 
 | 104 | +        raise "pure_trace failed: #{stderr}" unless status.success?  | 
 | 105 | +        assert_equal "3\n", stdout  | 
 | 106 | +        assert File.exist?(File.join(out_dir, 'trace.json'))  | 
 | 107 | +      end  | 
 | 108 | +    end  | 
 | 109 | +  end  | 
63 | 110 | end  | 
0 commit comments