From 8289771e326006cc4e15a667e3eff3a72cfb3327 Mon Sep 17 00:00:00 2001 From: drbrain Date: Thu, 20 Dec 2007 08:39:12 +0000 Subject: Import RubyGems 1.0.0, r1575 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14361 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem_installer.rb | 198 ++++++++++++++++++++++++++---------- 1 file changed, 145 insertions(+), 53 deletions(-) (limited to 'test/rubygems/test_gem_installer.rb') 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 - -- cgit v1.2.3