summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_installer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_installer.rb')
-rw-r--r--test/rubygems/test_gem_installer.rb229
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