diff --git a/gems/native-tracer/codetracer-ruby-recorder.gemspec b/gems/native-tracer/codetracer-ruby-recorder.gemspec index bf6eb28..4f1d1fa 100644 --- a/gems/native-tracer/codetracer-ruby-recorder.gemspec +++ b/gems/native-tracer/codetracer-ruby-recorder.gemspec @@ -9,10 +9,14 @@ Gem::Specification.new do |spec| spec.license = 'MIT' spec.homepage = 'https://github.com/metacraft-labs/codetracer-ruby-recorder' - spec.files = Dir['lib/**/*', 'ext/native_tracer/**/{Cargo.toml,*.rs}', - 'ext/native_tracer/extconf.rb', '../../README.md', '../../LICENSE'] + spec.files = Dir[ + 'lib/**/*', + 'ext/native_tracer/**/{Cargo.toml,*.rs}', + 'ext/native_tracer/extconf.rb', + 'ext/native_tracer/target/release/*' + ] spec.require_paths = ['lib'] - spec.extensions = ['ext/native_tracer/extconf.rb'] + spec.extensions = [] spec.bindir = 'bin' spec.executables = ['codetracer-ruby-recorder'] diff --git a/gems/pure-ruby-tracer/codetracer_pure_ruby_recorder.gemspec b/gems/pure-ruby-tracer/codetracer_pure_ruby_recorder.gemspec index 4f644e8..1b21c0a 100644 --- a/gems/pure-ruby-tracer/codetracer_pure_ruby_recorder.gemspec +++ b/gems/pure-ruby-tracer/codetracer_pure_ruby_recorder.gemspec @@ -9,7 +9,7 @@ Gem::Specification.new do |spec| spec.license = 'MIT' spec.homepage = 'https://github.com/metacraft-labs/codetracer-ruby-recorder' - spec.files = Dir['lib/**/*', 'bin/*', '../../README.md', '../../LICENSE'] + spec.files = Dir['lib/**/*', 'bin/*'] spec.require_paths = ['lib'] spec.bindir = 'bin' spec.executables = ['codetracer-pure-ruby-recorder'] diff --git a/test/test_tracer.rb b/test/test_tracer.rb index b1c8475..5cb8a1d 100644 --- a/test/test_tracer.rb +++ b/test/test_tracer.rb @@ -2,6 +2,7 @@ require 'json' require 'fileutils' require 'open3' +require 'tmpdir' class TraceTest < Minitest::Test TMP_DIR = File.expand_path('tmp', __dir__) @@ -60,4 +61,50 @@ def program_args(base) assert_equal expected, native_out end end + + def test_gem_installation + Dir.chdir(File.expand_path('..', __dir__)) do + system('just', 'build-extension', exception: true) + + dlext = RbConfig::CONFIG['DLEXT'] + ext_path = File.join('gems', 'native-tracer', 'ext', 'native_tracer', 'target', 'release', "codetracer_ruby_recorder.#{dlext}") + FileUtils.rm_f(ext_path) + + Dir.mktmpdir('gemhome') do |gem_home| + gem_build = IO.popen(%w[gem -C gems/native-tracer build codetracer-ruby-recorder.gemspec], err: [:child, :out]) { |io| io.read } + gem_file = gem_build.lines.grep(/File:/).first.split.last + gem_file = File.expand_path(File.join('gems/native-tracer', gem_file)) + + env = { 'GEM_HOME' => gem_home, 'GEM_PATH' => gem_home, 'PATH' => "#{gem_home}/bin:#{ENV['PATH']}" } + system(env, 'gem', 'install', '--local', gem_file, exception: true) + + out_dir = File.join('test', 'tmp', 'gem_install') + FileUtils.rm_rf(out_dir) + stdout, stderr, status = Open3.capture3(env, 'ruby', '-S', 'codetracer-ruby-recorder', '--out-dir', out_dir, File.join('test', 'programs', 'addition.rb')) + raise "native_trace failed: #{stderr}" unless status.success? + assert_equal "3\n", stdout + assert File.exist?(File.join(out_dir, 'trace.json')) + end + end + end + + def test_pure_gem_installation + Dir.chdir(File.expand_path('..', __dir__)) do + Dir.mktmpdir('gemhome') do |gem_home| + gem_build = IO.popen(%w[gem -C gems/pure-ruby-tracer build codetracer_pure_ruby_recorder.gemspec], err: [:child, :out]) { |io| io.read } + gem_file = gem_build.lines.grep(/File:/).first.split.last + gem_file = File.expand_path(File.join('gems/pure-ruby-tracer', gem_file)) + + env = { 'GEM_HOME' => gem_home, 'GEM_PATH' => gem_home, 'PATH' => "#{gem_home}/bin:#{ENV['PATH']}" } + system(env, 'gem', 'install', '--local', gem_file, exception: true) + + out_dir = File.join('test', 'tmp', 'gem_install_pure') + FileUtils.rm_rf(out_dir) + stdout, stderr, status = Open3.capture3(env, 'ruby', '-S', 'codetracer-pure-ruby-recorder', '--out-dir', out_dir, File.join('test', 'programs', 'addition.rb')) + raise "pure_trace failed: #{stderr}" unless status.success? + assert_equal "3\n", stdout + assert File.exist?(File.join(out_dir, 'trace.json')) + end + end + end end