diff options
Diffstat (limited to 'test/rubygems/test_gem_installer.rb')
-rw-r--r-- | test/rubygems/test_gem_installer.rb | 229 |
1 files changed, 151 insertions, 78 deletions
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 94fa4423bc..0b73af996d 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -9,7 +9,8 @@ require 'rubygems/installer_test_case' class TestGemInstaller < Gem::InstallerTestCase def test_app_script_text - util_make_exec '2', '' + @spec.version = 2 + util_make_exec @spec, '' expected = <<-EOF #!#{Gem.ruby} @@ -30,10 +31,10 @@ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then end gem 'a', version -load Gem.bin_path('a', 'my_exec', version) +load Gem.bin_path('a', 'executable', version) EOF - wrapper = @installer.app_script_text 'my_exec' + wrapper = @installer.app_script_text 'executable' assert_equal expected, wrapper end @@ -101,7 +102,7 @@ load Gem.bin_path('a', 'my_exec', version) @installer.ensure_dependency @spec, dep end - assert_equal 'a requires b (> 2, runtime)', e.message + assert_equal 'a requires b (> 2)', e.message end def test_extract_files @@ -170,11 +171,11 @@ load Gem.bin_path('a', 'my_exec', version) def test_generate_bin_bindir @installer.wrappers = true - @spec.executables = ["my_exec"] + @spec.executables = %w[executable] @spec.bindir = '.' - exec_file = @installer.formatted_program_filename "my_exec" - exec_path = File.join util_gem_dir(@spec.version), exec_file + exec_file = @installer.formatted_program_filename 'executable' + exec_path = File.join util_gem_dir(@spec), exec_file File.open exec_path, 'w' do |f| f.puts '#!/usr/bin/ruby' end @@ -184,7 +185,7 @@ load Gem.bin_path('a', 'my_exec', version) @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') assert_equal true, File.exist?(installed_exec) assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform? @@ -199,7 +200,7 @@ load Gem.bin_path('a', 'my_exec', version) @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') assert_equal true, File.exist?(installed_exec) assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform? @@ -216,7 +217,7 @@ load Gem.bin_path('a', 'my_exec', version) Gem::Installer.exec_format = 'foo-%s-bar' @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join util_inst_bindir, 'foo-my_exec-bar' + installed_exec = File.join util_inst_bindir, 'foo-executable-bar' assert_equal true, File.exist?(installed_exec) ensure Gem::Installer.exec_format = nil @@ -230,7 +231,7 @@ load Gem.bin_path('a', 'my_exec', version) Gem::Installer.exec_format = 'foo-%s-bar' @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join util_inst_bindir, 'my_exec' + installed_exec = File.join util_inst_bindir, 'executable' assert_equal true, File.exist?(installed_exec) ensure Gem::Installer.exec_format = nil @@ -238,12 +239,12 @@ load Gem.bin_path('a', 'my_exec', version) def test_generate_bin_script_install_dir @installer.wrappers = true - @spec.executables = ["my_exec"] + @spec.executables = %w[executable] gem_dir = File.join "#{@gemhome}2", 'gems', @spec.full_name gem_bindir = File.join gem_dir, 'bin' FileUtils.mkdir_p gem_bindir - File.open File.join(gem_bindir, "my_exec"), 'w' do |f| + File.open File.join(gem_bindir, 'executable'), 'w' do |f| f.puts "#!/bin/ruby" end @@ -252,7 +253,7 @@ load Gem.bin_path('a', 'my_exec', version) @installer.generate_bin - installed_exec = File.join("#{@gemhome}2", 'bin', 'my_exec') + installed_exec = File.join("#{@gemhome}2", 'bin', 'executable') assert_equal true, File.exist?(installed_exec) assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform? @@ -261,9 +262,12 @@ load Gem.bin_path('a', 'my_exec', version) end def test_generate_bin_script_no_execs + util_execless + @installer.wrappers = true @installer.generate_bin - assert_equal false, File.exist?(util_inst_bindir) + + refute File.exist?(util_inst_bindir), 'bin dir was created when not needed' end def test_generate_bin_script_no_perms @@ -287,18 +291,18 @@ load Gem.bin_path('a', 'my_exec', version) def test_generate_bin_script_no_shebang @installer.wrappers = true - @spec.executables = ["my_exec"] + @spec.executables = %w[executable] gem_dir = File.join @gemhome, 'gems', @spec.full_name gem_bindir = File.join gem_dir, 'bin' FileUtils.mkdir_p gem_bindir - File.open File.join(gem_bindir, "my_exec"), 'w' do |f| + File.open File.join(gem_bindir, 'executable'), 'w' do |f| f.puts "blah blah blah" end @installer.generate_bin - installed_exec = File.join @gemhome, 'bin', 'my_exec' + installed_exec = File.join @gemhome, 'bin', 'executable' assert_equal true, File.exist?(installed_exec) assert_equal 0100755, File.stat(installed_exec).mode unless win_platform? @@ -312,9 +316,9 @@ load Gem.bin_path('a', 'my_exec', version) @installer.wrappers = true util_make_exec @installer.gem_dir = util_gem_dir - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') - real_exec = File.join util_gem_dir, 'bin', 'my_exec' + real_exec = File.join util_gem_dir, 'bin', 'executable' # fake --no-wrappers for previous install unless Gem.win_platform? then @@ -342,16 +346,19 @@ load Gem.bin_path('a', 'my_exec', version) @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') assert_equal true, File.symlink?(installed_exec) - assert_equal(File.join(util_gem_dir, "bin", "my_exec"), + assert_equal(File.join(util_gem_dir, 'bin', 'executable'), File.readlink(installed_exec)) end def test_generate_bin_symlink_no_execs + util_execless + @installer.wrappers = false @installer.generate_bin - assert_equal false, File.exist?(util_inst_bindir) + + refute File.exist?(util_inst_bindir) end def test_generate_bin_symlink_no_perms @@ -382,8 +389,8 @@ load Gem.bin_path('a', 'my_exec', version) @installer.gem_dir = util_gem_dir @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") - assert_equal(File.join(util_gem_dir, "bin", "my_exec"), + installed_exec = File.join(util_inst_bindir, 'executable') + assert_equal(File.join(util_gem_dir, 'bin', 'executable'), File.readlink(installed_exec)) @spec = Gem::Specification.new do |s| @@ -395,11 +402,12 @@ load Gem.bin_path('a', 'my_exec', version) s.require_path = 'lib' end - util_make_exec '3' - @installer.gem_dir = File.join util_gem_dir('3') + @spec.version = 3 + util_make_exec + @installer.gem_dir = File.join util_gem_dir @spec @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") - assert_equal(File.join(util_gem_bindir('3'), "my_exec"), + installed_exec = File.join(util_inst_bindir, 'executable') + assert_equal(File.join(util_gem_bindir(@spec), 'executable'), File.readlink(installed_exec), "Ensure symlink moved to latest version") end @@ -412,8 +420,8 @@ load Gem.bin_path('a', 'my_exec', version) @installer.gem_dir = util_gem_dir @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") - assert_equal(File.join(util_gem_dir, "bin", "my_exec"), + installed_exec = File.join(util_inst_bindir, 'executable') + assert_equal(File.join(util_gem_dir, 'bin', 'executable'), File.readlink(installed_exec)) spec = Gem::Specification.new do |s| @@ -425,14 +433,16 @@ load Gem.bin_path('a', 'my_exec', version) s.require_path = 'lib' end - util_make_exec '1' - @installer.gem_dir = util_gem_dir('1') + util_make_exec + one = @spec.dup + one.version = 1 + @installer.gem_dir = util_gem_dir one @installer.spec = spec @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") - assert_equal(File.join(util_gem_dir('2'), "bin", "my_exec"), + installed_exec = File.join(util_inst_bindir, 'executable') + assert_equal(File.join(util_gem_dir, 'bin', 'executable'), File.readlink(installed_exec), "Ensure symlink not moved") end @@ -445,7 +455,7 @@ load Gem.bin_path('a', 'my_exec', version) @installer.gem_dir = util_gem_dir @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') assert_equal true, File.exist?(installed_exec) @spec = Gem::Specification.new do |s| @@ -458,11 +468,12 @@ load Gem.bin_path('a', 'my_exec', version) end @installer.wrappers = false - util_make_exec '3' - @installer.gem_dir = util_gem_dir '3' + @spec.version = 3 + util_make_exec + @installer.gem_dir = util_gem_dir @installer.generate_bin - installed_exec = File.join(util_inst_bindir, "my_exec") - assert_equal(File.join(util_gem_dir('3'), "bin", "my_exec"), + installed_exec = File.join(util_inst_bindir, 'executable') + assert_equal(File.join(util_gem_dir, 'bin', 'executable'), File.readlink(installed_exec), "Ensure symlink moved to latest version") end @@ -479,7 +490,7 @@ load Gem.bin_path('a', 'my_exec', version) end assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join(util_inst_bindir, "my_exec") + installed_exec = File.join(util_inst_bindir, 'executable') assert_equal true, File.exist?(installed_exec) assert_match(/Unable to use symlinks on Windows, installing wrapper/i, @@ -500,19 +511,18 @@ load Gem.bin_path('a', 'my_exec', version) @installer.generate_bin default_shebang = Gem.ruby - shebang_line = open("#{@gemhome}/bin/my_exec") { |f| f.readlines.first } + shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first } assert_match(/\A#!/, shebang_line) assert_match(/#{default_shebang}/, shebang_line) end def test_initialize - spec = quick_gem 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end + spec = quick_spec 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end gem = File.join @tempdir, spec.file_name Dir.mkdir util_inst_bindir util_build_gem spec - FileUtils.mv File.join(@gemhome, 'cache', spec.file_name), - @tempdir + FileUtils.mv Gem.cache_gem(spec.file_name, @gemhome), @tempdir installer = Gem::Installer.new gem @@ -525,7 +535,7 @@ load Gem.bin_path('a', 'my_exec', version) util_clear_gems gemdir = File.join @gemhome, 'gems', @spec.full_name - cache_file = File.join @gemhome, 'cache', @spec.file_name + cache_file = Gem.cache_gem(@spec.file_name, @gemhome) stub_exe = File.join @gemhome, 'bin', 'executable' rakefile = File.join gemdir, 'ext', 'a', 'Rakefile' @@ -574,6 +584,42 @@ load Gem.bin_path('a', 'my_exec', version) assert_same @installer, @pre_install_hook_arg end + def test_install_with_no_prior_files + Dir.mkdir util_inst_bindir + util_clear_gems + + util_setup_gem + build_rake_in do + use_ui @ui do + assert_equal @spec, @installer.install + end + end + + gemdir = File.join(@gemhome, 'gems', @spec.full_name) + assert File.exist?(File.join(gemdir, 'lib', 'code.rb')) + + util_setup_gem + # Morph spec to have lib/other.rb instead of code.rb and recreate + @spec.files = File.join('lib', 'other.rb') + Dir.chdir @tempdir do + File.open File.join('lib', 'other.rb'), 'w' do |f| f.puts '1' end + use_ui ui do + FileUtils.rm @gem + Gem::Builder.new(@spec).build + end + end + @installer = Gem::Installer.new @gem + build_rake_in do + use_ui @ui do + assert_equal @spec, @installer.install + end + end + + assert File.exist?(File.join(gemdir, 'lib', 'other.rb')) + refute(File.exist?(File.join(gemdir, 'lib', 'code.rb')), + "code.rb from prior install of same gem shouldn't remain here") + end + def test_install_bad_gem gem = nil @@ -610,7 +656,7 @@ load Gem.bin_path('a', 'my_exec', version) gemhome2 = "#{@gemhome}2" @spec.add_dependency 'b' - b2 = quick_gem 'b', 2 + b2 = quick_spec 'b', 2 FileUtils.mv @gemhome, gemhome2 Gem.source_index.gems.delete b2.full_name @@ -666,7 +712,7 @@ load Gem.bin_path('a', 'my_exec', version) end def test_install_missing_dirs - FileUtils.rm_f File.join(Gem.dir, 'cache') + FileUtils.rm_f Gem.cache_dir FileUtils.rm_f File.join(Gem.dir, 'docs') FileUtils.rm_f File.join(Gem.dir, 'specifications') @@ -676,11 +722,11 @@ load Gem.bin_path('a', 'my_exec', version) @installer.install end - File.directory? File.join(Gem.dir, 'cache') + File.directory? Gem.cache_dir File.directory? File.join(Gem.dir, 'docs') File.directory? File.join(Gem.dir, 'specifications') - assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name)) + assert File.exist?(Gem.cache_gem(@spec.file_name, @gemhome)) assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name)) end @@ -786,13 +832,13 @@ load Gem.bin_path('a', 'my_exec', version) end def test_install_wrong_rubygems_version - spec = quick_gem 'old_rubygems_required', '1' do |s| + spec = quick_spec 'old_rubygems_required', '1' do |s| s.required_rubygems_version = '< 0' end util_build_gem spec - gem = File.join @gemhome, 'cache', spec.file_name + gem = Gem.cache_gem(spec.file_name, @gemhome) use_ui @ui do @installer = Gem::Installer.new gem @@ -813,49 +859,49 @@ load Gem.bin_path('a', 'my_exec', version) end def test_shebang - util_make_exec '2', "#!/usr/bin/ruby" + util_make_exec @spec, "#!/usr/bin/ruby" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_arguments - util_make_exec '2', "#!/usr/bin/ruby -ws" + util_make_exec @spec, "#!/usr/bin/ruby -ws" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby} -ws", shebang end def test_shebang_empty - util_make_exec '2', '' + util_make_exec @spec, '' - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_env - util_make_exec '2', "#!/usr/bin/env ruby" + util_make_exec @spec, "#!/usr/bin/env ruby" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_env_arguments - util_make_exec '2', "#!/usr/bin/env ruby -ws" + util_make_exec @spec, "#!/usr/bin/env ruby -ws" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby} -ws", shebang end def test_shebang_env_shebang - util_make_exec '2', '' + util_make_exec @spec, '' @installer.env_shebang = true - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' env_shebang = "/usr/bin/env" unless Gem.win_platform? @@ -864,49 +910,49 @@ load Gem.bin_path('a', 'my_exec', version) end def test_shebang_nested - util_make_exec '2', "#!/opt/local/ruby/bin/ruby" + util_make_exec @spec, "#!/opt/local/ruby/bin/ruby" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_nested_arguments - util_make_exec '2', "#!/opt/local/ruby/bin/ruby -ws" + util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby} -ws", shebang end def test_shebang_version - util_make_exec '2', "#!/usr/bin/ruby18" + util_make_exec @spec, "#!/usr/bin/ruby18" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_version_arguments - util_make_exec '2', "#!/usr/bin/ruby18 -ws" + util_make_exec @spec, "#!/usr/bin/ruby18 -ws" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby} -ws", shebang end def test_shebang_version_env - util_make_exec '2', "#!/usr/bin/env ruby18" + util_make_exec @spec, "#!/usr/bin/env ruby18" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby}", shebang end def test_shebang_version_env_arguments - util_make_exec '2', "#!/usr/bin/env ruby18 -ws" + util_make_exec @spec, "#!/usr/bin/env ruby18 -ws" - shebang = @installer.shebang 'my_exec' + shebang = @installer.shebang 'executable' assert_equal "#!#{Gem.ruby} -ws", shebang end @@ -937,14 +983,41 @@ load Gem.bin_path('a', 'my_exec', version) assert_equal @spec, eval(File.read(spec_file)) end + def test_write_spec_writes_cached_spec + spec_dir = File.join @gemhome, 'specifications' + spec_file = File.join spec_dir, @spec.spec_name + FileUtils.rm spec_file + refute File.exist?(spec_file) + + @spec.files = %w[a.rb b.rb c.rb] + + @installer.spec = @spec + @installer.gem_home = @gemhome + + @installer.write_spec + + # cached specs have no file manifest: + @spec.files = [] + + assert_equal @spec, eval(File.read(spec_file)) + end + def old_ruby_required - spec = quick_gem 'old_ruby_required', '1' do |s| + spec = quick_spec 'old_ruby_required', '1' do |s| s.required_ruby_version = '= 1.4.6' end util_build_gem spec - File.join @gemhome, 'cache', spec.file_name + Gem.cache_gem(spec.file_name, @gemhome) + end + + def util_execless + @spec = quick_spec 'z' + + gem = File.join @tempdir, @spec.file_name + + @installer = util_installer @spec, gem, @gemhome end end |