aboutsummaryrefslogtreecommitdiffstats
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.rb212
1 files changed, 194 insertions, 18 deletions
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index 3c6fb45589..d40fbc93bf 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -2,26 +2,23 @@ require 'rubygems/installer_test_case'
class TestGemInstaller < Gem::InstallerTestCase
- def setup
- super
+ def util_setup_install
+ @gemhome = @installer_tmp
+ Gem.use_paths @installer_tmp
- if __name__ !~ /^test_install(_|$)/ then
- @gemhome = @installer_tmp
- Gem.use_paths @installer_tmp
+ @spec = Gem::Specification.find_by_name 'a'
+ @user_spec = Gem::Specification.find_by_name 'b'
- @spec = Gem::Specification.find_by_name 'a'
- @user_spec = Gem::Specification.find_by_name 'b'
-
- @installer.spec = @spec
- @installer.gem_home = @installer_tmp
- @installer.gem_dir = @spec.gem_dir
- @user_installer.spec = @user_spec
- @user_installer.gem_home = @installer_tmp
- end
+ @installer.spec = @spec
+ @installer.gem_home = @installer_tmp
+ @installer.gem_dir = @spec.gem_dir
+ @user_installer.spec = @user_spec
+ @user_installer.gem_home = @installer_tmp
end
-
def test_app_script_text
+ util_setup_install
+
@spec.version = 2
util_make_exec @spec, ''
@@ -38,9 +35,13 @@ require 'rubygems'
version = \">= 0\"
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
- version = $1
- ARGV.shift
+if ARGV.first
+ str = ARGV.first
+ str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
+ if str =~ /\\A_(.*)_\\z/
+ version = $1
+ ARGV.shift
+ end
end
gem 'a', version
@@ -52,6 +53,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_none
+ util_setup_install
+
use_ui @ui do
@installer.build_extensions
end
@@ -63,6 +66,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_extconf_bad
+ util_setup_install
+
@spec.extensions << 'extconf.rb'
e = assert_raises Gem::Installer::ExtensionBuildError do
@@ -86,6 +91,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_unsupported
+ util_setup_install
+
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
@spec.extensions << nil
@@ -107,6 +114,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_ensure_dependency
+ util_setup_install
+
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.ensure_dependency(@spec, dep)
@@ -119,6 +128,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files
+ util_setup_install
+
format = Object.new
def format.file_entries
[[{'size' => 7, 'mode' => 0400, 'path' => 'thefile'}, 'content']]
@@ -137,6 +148,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_bad_dest
+ util_setup_install
+
@installer.gem_dir = 'somedir'
@installer.format = nil
e = assert_raises ArgumentError do
@@ -147,6 +160,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_relative
+ util_setup_install
+
format = Object.new
def format.file_entries
[[{'size' => 10, 'mode' => 0644, 'path' => '../thefile'}, '../thefile']]
@@ -166,6 +181,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_absolute
+ util_setup_install
+
format = Object.new
def format.file_entries
[[{'size' => 8, 'mode' => 0644, 'path' => '/thefile'}, '/thefile']]
@@ -183,6 +200,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_bindir
+ util_setup_install
+
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -208,6 +227,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_bindir_with_user_install_warning
+ util_setup_install
+
bin_dir = Gem.win_platform? ? File.expand_path(ENV["WINDIR"]) : "/usr/bin"
options = {
@@ -227,6 +248,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script
+ util_setup_install
+
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -242,6 +265,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_format
+ util_setup_install
+
@installer.format_executable = true
@installer.wrappers = true
util_make_exec
@@ -257,6 +282,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_format_disabled
+ util_setup_install
+
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -271,6 +298,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_install_dir
+ util_setup_install
+
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -295,6 +324,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_execs
+ util_setup_install
+
util_execless
@installer.wrappers = true
@@ -304,6 +335,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_perms
+ util_setup_install
+
@installer.wrappers = true
util_make_exec
@@ -323,6 +356,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_shebang
+ util_setup_install
+
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -346,6 +381,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_wrappers
+ util_setup_install
+
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -371,6 +408,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink
+ util_setup_install
+
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -386,6 +425,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_no_execs
+ util_setup_install
+
util_execless
@installer.wrappers = false
@@ -395,6 +436,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_no_perms
+ util_setup_install
+
@installer.wrappers = false
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -415,6 +458,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_newer
+ util_setup_install
+
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -446,6 +491,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_older
+ util_setup_install
+
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -482,6 +529,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_remove_wrapper
+ util_setup_install
+
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = true
@@ -513,6 +562,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_win32
+ util_setup_install
+
old_win_platform = Gem.win_platform?
Gem.win_platform = true
@installer.wrappers = false
@@ -537,6 +588,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_uses_default_shebang
+ util_setup_install
+
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = true
@@ -620,6 +673,95 @@ load Gem.bin_path('a', 'executable', version)
assert_same @installer, @pre_install_hook_arg
end
+ def test_install_creates_working_binstub
+ Dir.mkdir util_inst_bindir
+ util_setup_gem
+ util_clear_gems
+
+ @installer.wrappers = true
+
+ gemdir = File.join @gemhome, 'gems', @spec.full_name
+
+ @newspec = nil
+ build_rake_in do
+ use_ui @ui do
+ @newspec = @installer.install
+ end
+ end
+
+ exe = File.join gemdir, 'bin', 'executable'
+
+ e = assert_raises RuntimeError do
+ instance_eval File.read(exe)
+ end
+
+ assert_match(/ran executable/, e.message)
+ end
+
+ def test_install_creates_binstub_that_understand_version
+ Dir.mkdir util_inst_bindir
+ util_setup_gem
+ util_clear_gems
+
+ @installer.wrappers = true
+
+ @newspec = nil
+ build_rake_in do
+ use_ui @ui do
+ @newspec = @installer.install
+ end
+ end
+
+ exe = File.join @gemhome, 'bin', 'executable'
+
+ ARGV.unshift "_3.0_"
+
+ begin
+ Gem::Specification.reset
+
+ e = assert_raises Gem::LoadError do
+ instance_eval File.read(exe)
+ end
+ ensure
+ ARGV.shift if ARGV.first == "_3.0_"
+ end
+
+ assert_match(/\(= 3\.0\)/, e.message)
+ end
+
+ def test_install_creates_binstub_that_dont_trust_encoding
+ skip unless "".respond_to?(:force_encoding)
+
+ Dir.mkdir util_inst_bindir
+ util_setup_gem
+ util_clear_gems
+
+ @installer.wrappers = true
+
+ @newspec = nil
+ build_rake_in do
+ use_ui @ui do
+ @newspec = @installer.install
+ end
+ end
+
+ exe = File.join @gemhome, 'bin', 'executable'
+
+ ARGV.unshift "\xE4pfel".force_encoding("UTF-8")
+
+ begin
+ Gem::Specification.reset
+
+ e = assert_raises RuntimeError do
+ instance_eval File.read(exe)
+ end
+ ensure
+ ARGV.shift if ARGV.first == "\xE4pfel"
+ end
+
+ assert_match(/ran executable/, e.message)
+ end
+
def test_install_with_no_prior_files
Dir.mkdir util_inst_bindir
util_clear_gems
@@ -889,6 +1031,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_installation_satisfies_dependency_eh
+ util_setup_install
+
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.installation_satisfies_dependency?(dep)
@@ -897,6 +1041,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/ruby"
shebang = @installer.shebang 'executable'
@@ -905,6 +1051,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_arguments
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/ruby -ws"
shebang = @installer.shebang 'executable'
@@ -913,6 +1061,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_empty
+ util_setup_install
+
util_make_exec @spec, ''
shebang = @installer.shebang 'executable'
@@ -920,6 +1070,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/env ruby"
shebang = @installer.shebang 'executable'
@@ -928,6 +1080,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env_arguments
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/env ruby -ws"
shebang = @installer.shebang 'executable'
@@ -936,6 +1090,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env_shebang
+ util_setup_install
+
util_make_exec @spec, ''
@installer.env_shebang = true
@@ -948,6 +1104,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_nested
+ util_setup_install
+
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
shebang = @installer.shebang 'executable'
@@ -956,6 +1114,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_nested_arguments
+ util_setup_install
+
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
shebang = @installer.shebang 'executable'
@@ -964,6 +1124,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/ruby18"
shebang = @installer.shebang 'executable'
@@ -972,6 +1134,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_arguments
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
shebang = @installer.shebang 'executable'
@@ -980,6 +1144,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_env
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/env ruby18"
shebang = @installer.shebang 'executable'
@@ -988,6 +1154,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_env_arguments
+ util_setup_install
+
util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
shebang = @installer.shebang 'executable'
@@ -996,6 +1164,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_unpack
+ util_setup_install
+
util_setup_gem
dest = File.join @gemhome, 'gems', @spec.full_name
@@ -1007,6 +1177,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_write_spec
+ util_setup_install
+
spec_dir = File.join @gemhome, 'specifications'
spec_file = File.join spec_dir, @spec.spec_name
FileUtils.rm spec_file
@@ -1022,6 +1194,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_write_spec_writes_cached_spec
+ util_setup_install
+
spec_dir = File.join @gemhome, 'specifications'
spec_file = File.join spec_dir, @spec.spec_name
FileUtils.rm spec_file
@@ -1041,6 +1215,8 @@ load Gem.bin_path('a', 'executable', version)
end
def test_dir
+ util_setup_install
+
assert_match @installer.dir, %r!/installer/gems/a-2$!
end