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.rb198
1 files changed, 145 insertions, 53 deletions
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index 9a091a291e..442ed6cfc3 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -9,11 +9,13 @@ require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
require 'rubygems/installer'
class Gem::Installer
+ attr_accessor :gem_dir
+
attr_writer :format
- attr_writer :gem_dir
attr_writer :gem_home
attr_writer :env_shebang
attr_writer :ignore_dependencies
+ attr_writer :format_executable
attr_writer :security_policy
attr_writer :spec
attr_writer :wrappers
@@ -37,11 +39,11 @@ class TestGemInstaller < RubyGemTestCase
@installer.spec = @spec
end
- def util_gem_dir(version = '0.0.2')
+ def util_gem_dir(version = '2')
File.join @gemhome, "gems", "a-#{version}" # HACK
end
- def util_gem_bindir(version = '0.0.2')
+ def util_gem_bindir(version = '2')
File.join util_gem_dir(version), "bin"
end
@@ -49,18 +51,19 @@ class TestGemInstaller < RubyGemTestCase
File.join @gemhome, "bin"
end
- def util_make_exec(version = '0.0.2', shebang = "#!/usr/bin/ruby")
+ def util_make_exec(version = '2', shebang = "#!/usr/bin/ruby")
@spec.executables = ["my_exec"]
FileUtils.mkdir_p util_gem_bindir(version)
- exec_file = File.join(util_gem_bindir(version), "my_exec")
- File.open exec_file, 'w' do |f|
+ exec_file = @installer.formatted_program_filename "my_exec"
+ exec_path = File.join util_gem_bindir(version), exec_file
+ File.open exec_path, 'w' do |f|
f.puts shebang
end
end
def test_app_script_text
- util_make_exec '0.0.2', ''
+ util_make_exec '2', ''
expected = <<-EOF
#!#{Gem.ruby}
@@ -144,15 +147,15 @@ load 'my_exec'
end
def test_ensure_dependency
- dep = Gem::Dependency.new 'a', '>= 0.0.2'
+ dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.ensure_dependency(@spec, dep)
- dep = Gem::Dependency.new 'b', '> 0.0.2'
+ dep = Gem::Dependency.new 'b', '> 2'
e = assert_raise Gem::InstallError do
@installer.ensure_dependency @spec, dep
end
- assert_equal 'a requires b (> 0.0.2)', e.message
+ assert_equal 'a requires b (> 2)', e.message
end
def test_expand_and_validate_gem_dir
@@ -226,7 +229,32 @@ load 'my_exec'
"You may need to remove this file if you broke the test once"
end
- def test_generate_bin_scripts
+ def test_generate_bin_bindir
+ @installer.wrappers = true
+
+ @spec.executables = ["my_exec"]
+ @spec.bindir = '.'
+
+ exec_file = @installer.formatted_program_filename "my_exec"
+ exec_path = File.join util_gem_dir(@spec.version), exec_file
+ File.open exec_path, 'w' do |f|
+ f.puts '#!/usr/bin/ruby'
+ end
+
+ @installer.gem_dir = util_gem_dir
+
+ @installer.generate_bin
+
+ assert_equal true, File.directory?(util_inst_bindir)
+ installed_exec = File.join(util_inst_bindir, "my_exec")
+ assert_equal true, File.exist?(installed_exec)
+ assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
+
+ wrapper = File.read installed_exec
+ assert_match %r|generated by RubyGems|, wrapper
+ end
+
+ def test_generate_bin_script
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -241,7 +269,36 @@ load 'my_exec'
assert_match %r|generated by RubyGems|, wrapper
end
- def test_generate_bin_scripts_install_dir
+ def test_generate_bin_script_format
+ @installer.format_executable = true
+ @installer.wrappers = true
+ util_make_exec
+ @installer.gem_dir = util_gem_dir
+
+ 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'
+ assert_equal true, File.exist?(installed_exec)
+ ensure
+ Gem::Installer.exec_format = nil
+ end
+
+ def test_generate_bin_script_format_disabled
+ @installer.wrappers = true
+ util_make_exec
+ @installer.gem_dir = util_gem_dir
+
+ 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'
+ assert_equal true, File.exist?(installed_exec)
+ ensure
+ Gem::Installer.exec_format = nil
+ end
+
+ def test_generate_bin_script_install_dir
@installer.wrappers = true
@spec.executables = ["my_exec"]
@@ -265,13 +322,13 @@ load 'my_exec'
assert_match %r|generated by RubyGems|, wrapper
end
- def test_generate_bin_scripts_no_execs
+ def test_generate_bin_script_no_execs
@installer.wrappers = true
@installer.generate_bin
assert_equal false, File.exist?(util_inst_bindir)
end
- def test_generate_bin_scripts_no_perms
+ def test_generate_bin_script_no_perms
@installer.wrappers = true
util_make_exec
@@ -286,7 +343,30 @@ load 'my_exec'
File.chmod 0700, util_inst_bindir unless $DEBUG
end
- def test_generate_bin_symlinks
+ def test_generate_bin_script_no_shebang
+ @installer.wrappers = true
+ @spec.executables = ["my_exec"]
+
+ 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|
+ f.puts "blah blah blah"
+ end
+
+ @installer.generate_bin
+
+ installed_exec = File.join @gemhome, 'bin', 'my_exec'
+ assert_equal true, File.exist?(installed_exec)
+ assert_equal 0100755, File.stat(installed_exec).mode unless win_platform?
+
+ wrapper = File.read installed_exec
+ assert_match %r|generated by RubyGems|, wrapper
+ # HACK some gems don't have #! in their executables, restore 2008/06
+ #assert_no_match %r|generated by RubyGems|, wrapper
+ end
+
+ def test_generate_bin_symlink
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -301,13 +381,13 @@ load 'my_exec'
File.readlink(installed_exec))
end
- def test_generate_bin_symlinks_no_execs
+ def test_generate_bin_symlink_no_execs
@installer.wrappers = false
@installer.generate_bin
assert_equal false, File.exist?(util_inst_bindir)
end
- def test_generate_bin_symlinks_no_perms
+ def test_generate_bin_symlink_no_perms
@installer.wrappers = false
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -323,7 +403,7 @@ load 'my_exec'
File.chmod 0700, util_inst_bindir unless $DEBUG
end
- def test_generate_bin_symlinks_update_newer
+ def test_generate_bin_symlink_update_newer
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -338,22 +418,22 @@ load 'my_exec'
@spec = Gem::Specification.new do |s|
s.files = ['lib/code.rb']
s.name = "a"
- s.version = "0.0.3"
+ s.version = "3"
s.summary = "summary"
s.description = "desc"
s.require_path = 'lib'
end
- util_make_exec '0.0.3'
- @installer.gem_dir = File.join util_gem_dir('0.0.3')
+ util_make_exec '3'
+ @installer.gem_dir = File.join util_gem_dir('3')
@installer.generate_bin
installed_exec = File.join(util_inst_bindir, "my_exec")
- assert_equal(File.join(util_gem_bindir('0.0.3'), "my_exec"),
+ assert_equal(File.join(util_gem_bindir('3'), "my_exec"),
File.readlink(installed_exec),
"Ensure symlink moved to latest version")
end
- def test_generate_bin_symlinks_update_older
+ def test_generate_bin_symlink_update_older
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -368,25 +448,25 @@ load 'my_exec'
spec = Gem::Specification.new do |s|
s.files = ['lib/code.rb']
s.name = "a"
- s.version = "0.0.1"
+ s.version = "1"
s.summary = "summary"
s.description = "desc"
s.require_path = 'lib'
end
- util_make_exec '0.0.1'
- @installer.gem_dir = util_gem_dir('0.0.1')
+ util_make_exec '1'
+ @installer.gem_dir = util_gem_dir('1')
@installer.spec = spec
@installer.generate_bin
installed_exec = File.join(util_inst_bindir, "my_exec")
- assert_equal(File.join(util_gem_dir('0.0.2'), "bin", "my_exec"),
+ assert_equal(File.join(util_gem_dir('2'), "bin", "my_exec"),
File.readlink(installed_exec),
"Ensure symlink not moved")
end
- def test_generate_bin_symlinks_update_remove_wrapper
+ def test_generate_bin_symlink_update_remove_wrapper
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = true
@@ -400,23 +480,23 @@ load 'my_exec'
@spec = Gem::Specification.new do |s|
s.files = ['lib/code.rb']
s.name = "a"
- s.version = "0.0.3"
+ s.version = "3"
s.summary = "summary"
s.description = "desc"
s.require_path = 'lib'
end
@installer.wrappers = false
- util_make_exec '0.0.3'
- @installer.gem_dir = util_gem_dir '0.0.3'
+ util_make_exec '3'
+ @installer.gem_dir = util_gem_dir '3'
@installer.generate_bin
installed_exec = File.join(util_inst_bindir, "my_exec")
- assert_equal(File.join(util_gem_dir('0.0.3'), "bin", "my_exec"),
+ assert_equal(File.join(util_gem_dir('3'), "bin", "my_exec"),
File.readlink(installed_exec),
"Ensure symlink moved to latest version")
end
- def test_generate_bin_symlinks_win32
+ def test_generate_bin_symlink_win32
old_win_platform = Gem.win_platform?
Gem.win_platform = true
@installer.wrappers = false
@@ -454,6 +534,19 @@ load 'my_exec'
assert_match(/#{default_shebang}/, shebang_line)
end
+ def test_initialize
+ spec = quick_gem 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
+ gem = File.join @tempdir, "#{spec.full_name}.gem"
+
+ util_build_gem spec
+ FileUtils.mv File.join(@gemhome, 'cache', "#{spec.full_name}.gem"),
+ @tempdir
+
+ installer = Gem::Installer.new gem
+
+ assert_equal File.join(@gemhome, 'gems', spec.full_name), installer.gem_dir
+ end
+
def test_install
util_setup_gem
@@ -518,7 +611,7 @@ load 'my_exec'
installer.install
end
- gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-0.0.1')
+ gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
assert File.exist?(gem_dir)
end
@@ -605,8 +698,8 @@ load 'my_exec'
end
def test_install_wrong_rubygems_version
- spec = quick_gem 'old_rubygems_required', '0.0.1' do |s|
- s.required_rubygems_version = '< 0.0.0'
+ spec = quick_gem 'old_rubygems_required', '1' do |s|
+ s.required_rubygems_version = '< 0'
end
util_build_gem spec
@@ -618,21 +711,21 @@ load 'my_exec'
e = assert_raise Gem::InstallError do
@installer.install
end
- assert_equal 'old_rubygems_required requires RubyGems version < 0.0.0',
+ assert_equal 'old_rubygems_required requires RubyGems version < 0',
e.message
end
end
def test_installation_satisfies_dependency_eh
- dep = Gem::Dependency.new 'a', '>= 0.0.2'
+ dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.installation_satisfies_dependency?(dep)
- dep = Gem::Dependency.new 'a', '> 0.0.2'
+ dep = Gem::Dependency.new 'a', '> 2'
assert ! @installer.installation_satisfies_dependency?(dep)
end
def test_shebang
- util_make_exec '0.0.2', "#!/usr/bin/ruby"
+ util_make_exec '2', "#!/usr/bin/ruby"
shebang = @installer.shebang 'my_exec'
@@ -640,7 +733,7 @@ load 'my_exec'
end
def test_shebang_arguments
- util_make_exec '0.0.2', "#!/usr/bin/ruby -ws"
+ util_make_exec '2', "#!/usr/bin/ruby -ws"
shebang = @installer.shebang 'my_exec'
@@ -648,14 +741,14 @@ load 'my_exec'
end
def test_shebang_empty
- util_make_exec '0.0.2', ''
+ util_make_exec '2', ''
shebang = @installer.shebang 'my_exec'
assert_equal "#!#{Gem.ruby}", shebang
end
def test_shebang_env
- util_make_exec '0.0.2', "#!/usr/bin/env ruby"
+ util_make_exec '2', "#!/usr/bin/env ruby"
shebang = @installer.shebang 'my_exec'
@@ -663,7 +756,7 @@ load 'my_exec'
end
def test_shebang_env_arguments
- util_make_exec '0.0.2', "#!/usr/bin/env ruby -ws"
+ util_make_exec '2', "#!/usr/bin/env ruby -ws"
shebang = @installer.shebang 'my_exec'
@@ -671,7 +764,7 @@ load 'my_exec'
end
def test_shebang_env_shebang
- util_make_exec '0.0.2', ''
+ util_make_exec '2', ''
@installer.env_shebang = true
shebang = @installer.shebang 'my_exec'
@@ -679,7 +772,7 @@ load 'my_exec'
end
def test_shebang_nested
- util_make_exec '0.0.2', "#!/opt/local/ruby/bin/ruby"
+ util_make_exec '2', "#!/opt/local/ruby/bin/ruby"
shebang = @installer.shebang 'my_exec'
@@ -687,7 +780,7 @@ load 'my_exec'
end
def test_shebang_nested_arguments
- util_make_exec '0.0.2', "#!/opt/local/ruby/bin/ruby -ws"
+ util_make_exec '2', "#!/opt/local/ruby/bin/ruby -ws"
shebang = @installer.shebang 'my_exec'
@@ -695,7 +788,7 @@ load 'my_exec'
end
def test_shebang_version
- util_make_exec '0.0.2', "#!/usr/bin/ruby18"
+ util_make_exec '2', "#!/usr/bin/ruby18"
shebang = @installer.shebang 'my_exec'
@@ -703,7 +796,7 @@ load 'my_exec'
end
def test_shebang_version_arguments
- util_make_exec '0.0.2', "#!/usr/bin/ruby18 -ws"
+ util_make_exec '2', "#!/usr/bin/ruby18 -ws"
shebang = @installer.shebang 'my_exec'
@@ -711,7 +804,7 @@ load 'my_exec'
end
def test_shebang_version_env
- util_make_exec '0.0.2', "#!/usr/bin/env ruby18"
+ util_make_exec '2', "#!/usr/bin/env ruby18"
shebang = @installer.shebang 'my_exec'
@@ -719,7 +812,7 @@ load 'my_exec'
end
def test_shebang_version_env_arguments
- util_make_exec '0.0.2', "#!/usr/bin/env ruby18 -ws"
+ util_make_exec '2', "#!/usr/bin/env ruby18 -ws"
shebang = @installer.shebang 'my_exec'
@@ -753,7 +846,7 @@ load 'my_exec'
end
def old_ruby_required
- spec = quick_gem 'old_ruby_required', '0.0.1' do |s|
+ spec = quick_gem 'old_ruby_required', '1' do |s|
s.required_ruby_version = '= 1.4.6'
end
@@ -790,4 +883,3 @@ load 'my_exec'
end
-