|
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