mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
a7fa4d5d9a
Compatibly renamed Gem::DependencyResolver to Gem::Resolver. Added support for git gems in gem.deps.rb and Gemfile. Fixed resolver bugs. * test/rubygems: ditto. * lib/rubygems/LICENSE.txt: Updated to license from RubyGems trunk. [ruby-trunk - Bug #9086] * lib/rubygems/commands/which_command.rb: RubyGems now indicates failure when any file is missing. [ruby-trunk - Bug #9004] * lib/rubygems/ext/builder: Extensions are now installed into the extension install directory and the first directory in the require path from the gem. This allows backwards compatibility with msgpack and other gems that calculate full require paths. [ruby-trunk - Bug #9106] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1444 lines
36 KiB
Ruby
1444 lines
36 KiB
Ruby
require 'rubygems/installer_test_case'
|
|
|
|
class TestGemInstaller < Gem::InstallerTestCase
|
|
|
|
def setup
|
|
super
|
|
common_installer_setup
|
|
|
|
if __name__ =~ /^test_install(_|$)/ then
|
|
FileUtils.rm_r @spec.gem_dir
|
|
FileUtils.rm_r @user_spec.gem_dir
|
|
end
|
|
|
|
@config = Gem.configuration
|
|
end
|
|
|
|
def teardown
|
|
common_installer_teardown
|
|
|
|
super
|
|
|
|
Gem.configuration = @config
|
|
end
|
|
|
|
def test_app_script_text
|
|
util_make_exec @spec, ''
|
|
|
|
expected = <<-EOF
|
|
#!#{Gem.ruby}
|
|
#
|
|
# This file was generated by RubyGems.
|
|
#
|
|
# The application 'a' is installed as part of a gem, and
|
|
# this file is here to facilitate running it.
|
|
#
|
|
|
|
require 'rubygems'
|
|
|
|
version = \">= 0\"
|
|
|
|
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
|
|
load Gem.bin_path('a', 'executable', version)
|
|
EOF
|
|
|
|
wrapper = @installer.app_script_text 'executable'
|
|
assert_equal expected, wrapper
|
|
end
|
|
|
|
def test_check_executable_overwrite
|
|
@installer.generate_bin
|
|
|
|
@spec = Gem::Specification.new do |s|
|
|
s.files = ['lib/code.rb']
|
|
s.name = "a"
|
|
s.version = "3"
|
|
s.summary = "summary"
|
|
s.description = "desc"
|
|
s.require_path = 'lib'
|
|
end
|
|
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir @spec
|
|
@installer.wrappers = true
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
|
|
wrapper = File.read installed_exec
|
|
assert_match %r|generated by RubyGems|, wrapper
|
|
end
|
|
|
|
def test_check_executable_overwrite_default_bin_dir
|
|
if defined?(RUBY_FRAMEWORK_VERSION)
|
|
orig_RUBY_FRAMEWORK_VERSION = RUBY_FRAMEWORK_VERSION
|
|
Object.send :remove_const, :RUBY_FRAMEWORK_VERSION
|
|
end
|
|
orig_bindir = Gem::ConfigMap[:bindir]
|
|
Gem::ConfigMap[:bindir] = Gem.bindir
|
|
|
|
util_conflict_executable false
|
|
|
|
ui = Gem::MockGemUi.new "n\n"
|
|
use_ui ui do
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.generate_bin
|
|
end
|
|
|
|
conflicted = File.join @gemhome, 'bin', 'executable'
|
|
assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
|
|
e.message
|
|
end
|
|
ensure
|
|
Object.const_set :RUBY_FRAMEWORK_VERSION, orig_RUBY_FRAMEWORK_VERSION if
|
|
orig_RUBY_FRAMEWORK_VERSION
|
|
Gem::ConfigMap[:bindir] = orig_bindir
|
|
end
|
|
|
|
def test_check_executable_overwrite_format_executable
|
|
@installer.generate_bin
|
|
|
|
@spec = Gem::Specification.new do |s|
|
|
s.files = ['lib/code.rb']
|
|
s.name = "a"
|
|
s.version = "3"
|
|
s.summary = "summary"
|
|
s.description = "desc"
|
|
s.require_path = 'lib'
|
|
end
|
|
|
|
open File.join(util_inst_bindir, 'executable'), 'w' do |io|
|
|
io.write <<-EXEC
|
|
#!/usr/local/bin/ruby
|
|
#
|
|
# This file was generated by RubyGems
|
|
|
|
gem 'other', version
|
|
EXEC
|
|
end
|
|
|
|
util_make_exec
|
|
Gem::Installer.exec_format = 'foo-%s-bar'
|
|
@installer.gem_dir = @spec.gem_dir
|
|
@installer.wrappers = true
|
|
@installer.format_executable = true
|
|
|
|
@installer.generate_bin # should not raise
|
|
|
|
installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
|
|
assert_path_exists installed_exec
|
|
|
|
wrapper = File.read installed_exec
|
|
assert_match %r|generated by RubyGems|, wrapper
|
|
end
|
|
|
|
def test_check_executable_overwrite_other_gem
|
|
util_conflict_executable true
|
|
|
|
ui = Gem::MockGemUi.new "n\n"
|
|
|
|
use_ui ui do
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.generate_bin
|
|
end
|
|
|
|
assert_equal '"executable" from a conflicts with installed executable from conflict',
|
|
e.message
|
|
end
|
|
end
|
|
|
|
def test_check_executable_overwrite_other_gem_force
|
|
util_conflict_executable true
|
|
@installer.wrappers = true
|
|
@installer.force = true
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
|
|
wrapper = File.read installed_exec
|
|
assert_match %r|generated by RubyGems|, wrapper
|
|
end
|
|
|
|
def test_check_executable_overwrite_other_non_gem
|
|
util_conflict_executable false
|
|
@installer.wrappers = true
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
|
|
wrapper = File.read installed_exec
|
|
assert_match %r|generated by RubyGems|, wrapper
|
|
end unless Gem.win_platform?
|
|
|
|
def test_ensure_dependency
|
|
util_spec 'a'
|
|
|
|
dep = Gem::Dependency.new 'a', '>= 2'
|
|
assert @installer.ensure_dependency(@spec, dep)
|
|
|
|
dep = Gem::Dependency.new 'b', '> 2'
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.ensure_dependency @spec, dep
|
|
end
|
|
|
|
assert_equal 'a requires b (> 2)', e.message
|
|
end
|
|
|
|
def test_ensure_loadable_spec
|
|
a, a_gem = util_gem 'a', 2 do |s|
|
|
s.add_dependency 'garbage ~> 5'
|
|
end
|
|
|
|
installer = Gem::Installer.new a_gem
|
|
|
|
e = assert_raises Gem::InstallError do
|
|
installer.ensure_loadable_spec
|
|
end
|
|
|
|
assert_equal "The specification for #{a.full_name} is corrupt " +
|
|
"(SyntaxError)", e.message
|
|
end
|
|
|
|
def test_ensure_loadable_spec_security_policy
|
|
skip 'openssl is missing' unless defined?(OpenSSL::SSL)
|
|
|
|
_, a_gem = util_gem 'a', 2 do |s|
|
|
s.add_dependency 'garbage ~> 5'
|
|
end
|
|
|
|
policy = Gem::Security::HighSecurity
|
|
installer = Gem::Installer.new a_gem, :security_policy => policy
|
|
|
|
assert_raises Gem::Security::Exception do
|
|
installer.ensure_loadable_spec
|
|
end
|
|
end
|
|
|
|
def test_extract_files
|
|
@installer.extract_files
|
|
|
|
assert_path_exists File.join util_gem_dir, 'bin/executable'
|
|
end
|
|
|
|
def test_generate_bin_bindir
|
|
@installer.wrappers = true
|
|
|
|
@spec.executables = %w[executable]
|
|
@spec.bindir = '.'
|
|
|
|
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
|
|
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
|
|
assert_equal true, File.directory?(util_inst_bindir)
|
|
installed_exec = File.join(util_inst_bindir, 'executable')
|
|
assert_path_exists installed_exec
|
|
assert_equal mask, 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_bindir_with_user_install_warning
|
|
bin_dir = Gem.win_platform? ? File.expand_path(ENV["WINDIR"]).upcase :
|
|
"/usr/bin"
|
|
|
|
options = {
|
|
:bin_dir => bin_dir,
|
|
:install_dir => "/non/existant"
|
|
}
|
|
|
|
inst = Gem::Installer.new '', options
|
|
|
|
Gem::Installer.path_warning = false
|
|
|
|
use_ui @ui do
|
|
inst.check_that_user_bin_dir_is_in_path
|
|
end
|
|
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_generate_bin_script
|
|
@installer.wrappers = true
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
assert File.directory? util_inst_bindir
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
assert_equal mask, 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_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-executable-bar'
|
|
assert_path_exists 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, 'executable'
|
|
assert_path_exists installed_exec
|
|
ensure
|
|
Gem::Installer.exec_format = nil
|
|
end
|
|
|
|
def test_generate_bin_script_install_dir
|
|
@installer.wrappers = true
|
|
|
|
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, 'executable'), 'w' do |f|
|
|
f.puts "#!/bin/ruby"
|
|
end
|
|
|
|
@installer.gem_home = "#{@gemhome}2"
|
|
@installer.gem_dir = gem_dir
|
|
@installer.bin_dir = File.join "#{@gemhome}2", 'bin'
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join("#{@gemhome}2", "bin", 'executable')
|
|
assert_path_exists installed_exec
|
|
assert_equal mask, 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_no_execs
|
|
util_execless
|
|
|
|
@installer.wrappers = true
|
|
@installer.generate_bin
|
|
|
|
refute_path_exists util_inst_bindir, 'bin dir was created when not needed'
|
|
end
|
|
|
|
def test_generate_bin_script_no_perms
|
|
@installer.wrappers = true
|
|
util_make_exec
|
|
|
|
Dir.mkdir util_inst_bindir
|
|
|
|
if win_platform?
|
|
skip('test_generate_bin_script_no_perms skipped on MS Windows')
|
|
else
|
|
FileUtils.chmod 0000, util_inst_bindir
|
|
|
|
assert_raises Gem::FilePermissionError do
|
|
@installer.generate_bin
|
|
end
|
|
end
|
|
ensure
|
|
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?)
|
|
end
|
|
|
|
def test_generate_bin_script_no_shebang
|
|
@installer.wrappers = true
|
|
@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, 'executable'), 'w' do |f|
|
|
f.puts "blah blah blah"
|
|
end
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join @gemhome, 'bin', 'executable'
|
|
assert_path_exists installed_exec
|
|
assert_equal mask, 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_script_wrappers
|
|
@installer.wrappers = true
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
installed_exec = File.join(util_inst_bindir, 'executable')
|
|
|
|
real_exec = File.join util_gem_dir, 'bin', 'executable'
|
|
|
|
# fake --no-wrappers for previous install
|
|
unless Gem.win_platform? then
|
|
FileUtils.mkdir_p File.dirname(installed_exec)
|
|
FileUtils.ln_s real_exec, installed_exec
|
|
end
|
|
|
|
@installer.generate_bin
|
|
assert_equal true, File.directory?(util_inst_bindir)
|
|
assert_path_exists installed_exec
|
|
assert_equal mask, File.stat(installed_exec).mode unless win_platform?
|
|
|
|
assert_match %r|generated by RubyGems|, File.read(installed_exec)
|
|
|
|
refute_match %r|generated by RubyGems|, File.read(real_exec),
|
|
'real executable overwritten'
|
|
end
|
|
|
|
def test_generate_bin_symlink
|
|
return if win_platform? #Windows FS do not support symlinks
|
|
|
|
@installer.wrappers = false
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
assert_equal true, File.directory?(util_inst_bindir)
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_equal true, File.symlink?(installed_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
|
|
|
|
refute_path_exists util_inst_bindir
|
|
end
|
|
|
|
def test_generate_bin_symlink_no_perms
|
|
@installer.wrappers = false
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
Dir.mkdir util_inst_bindir
|
|
|
|
if win_platform?
|
|
skip('test_generate_bin_symlink_no_perms skipped on MS Windows')
|
|
else
|
|
FileUtils.chmod 0000, util_inst_bindir
|
|
|
|
assert_raises Gem::FilePermissionError do
|
|
@installer.generate_bin
|
|
end
|
|
end
|
|
ensure
|
|
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?)
|
|
end
|
|
|
|
def test_generate_bin_symlink_update_newer
|
|
return if win_platform? #Windows FS do not support symlinks
|
|
|
|
@installer.wrappers = false
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
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|
|
|
s.files = ['lib/code.rb']
|
|
s.name = "a"
|
|
s.version = "3"
|
|
s.summary = "summary"
|
|
s.description = "desc"
|
|
s.require_path = 'lib'
|
|
end
|
|
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir @spec
|
|
@installer.generate_bin
|
|
installed_exec = File.join(util_inst_bindir, 'executable')
|
|
assert_equal(@spec.bin_file('executable'),
|
|
File.readlink(installed_exec),
|
|
"Ensure symlink moved to latest version")
|
|
end
|
|
|
|
def test_generate_bin_symlink_update_older
|
|
return if win_platform? #Windows FS do not support symlinks
|
|
|
|
@installer.wrappers = false
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
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|
|
|
s.files = ['lib/code.rb']
|
|
s.name = "a"
|
|
s.version = "1"
|
|
s.summary = "summary"
|
|
s.description = "desc"
|
|
s.require_path = 'lib'
|
|
end
|
|
|
|
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, 'executable'
|
|
expected = File.join util_gem_dir, 'bin', 'executable'
|
|
assert_equal(expected,
|
|
File.readlink(installed_exec),
|
|
"Ensure symlink not moved")
|
|
end
|
|
|
|
def test_generate_bin_symlink_update_remove_wrapper
|
|
return if win_platform? #Windows FS do not support symlinks
|
|
|
|
@installer.wrappers = true
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
|
|
@spec = Gem::Specification.new do |s|
|
|
s.files = ['lib/code.rb']
|
|
s.name = "a"
|
|
s.version = "3"
|
|
s.summary = "summary"
|
|
s.description = "desc"
|
|
s.require_path = 'lib'
|
|
end
|
|
util_make_exec
|
|
|
|
util_installer @spec, @gemhome
|
|
@installer.wrappers = false
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
@installer.generate_bin
|
|
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_equal(@spec.bin_file('executable'),
|
|
File.readlink(installed_exec),
|
|
"Ensure symlink moved to latest version")
|
|
end
|
|
|
|
def test_generate_bin_symlink_win32
|
|
old_win_platform = Gem.win_platform?
|
|
Gem.win_platform = true
|
|
@installer.wrappers = false
|
|
util_make_exec
|
|
@installer.gem_dir = util_gem_dir
|
|
|
|
use_ui @ui do
|
|
@installer.generate_bin
|
|
end
|
|
|
|
assert_equal true, File.directory?(util_inst_bindir)
|
|
installed_exec = File.join(util_inst_bindir, 'executable')
|
|
assert_path_exists installed_exec
|
|
|
|
assert_match(/Unable to use symlinks on Windows, installing wrapper/i,
|
|
@ui.error)
|
|
|
|
wrapper = File.read installed_exec
|
|
assert_match(/generated by RubyGems/, wrapper)
|
|
ensure
|
|
Gem.win_platform = old_win_platform
|
|
end
|
|
|
|
def test_generate_bin_uses_default_shebang
|
|
return if win_platform? #Windows FS do not support symlinks
|
|
|
|
@installer.wrappers = true
|
|
util_make_exec
|
|
|
|
@installer.generate_bin
|
|
|
|
default_shebang = Gem.ruby
|
|
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 = util_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 spec.cache_file, @tempdir
|
|
|
|
installer = Gem::Installer.new gem
|
|
|
|
assert_equal File.join(@gemhome, 'gems', spec.full_name), installer.gem_dir
|
|
assert_equal File.join(@gemhome, 'bin'), installer.bin_dir
|
|
end
|
|
|
|
def test_initialize_user_install
|
|
installer = Gem::Installer.new @gem, :user_install => true
|
|
|
|
assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
|
|
installer.gem_dir
|
|
assert_equal Gem.bindir(Gem.user_dir), installer.bin_dir
|
|
end
|
|
|
|
def test_initialize_user_install_bin_dir
|
|
installer =
|
|
Gem::Installer.new @gem, :user_install => true, :bin_dir => @tempdir
|
|
|
|
assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
|
|
installer.gem_dir
|
|
assert_equal @tempdir, installer.bin_dir
|
|
end
|
|
|
|
def test_install
|
|
Dir.mkdir util_inst_bindir
|
|
util_setup_gem
|
|
util_clear_gems
|
|
|
|
gemdir = File.join @gemhome, 'gems', @spec.full_name
|
|
cache_file = File.join @gemhome, 'cache', @spec.file_name
|
|
stub_exe = File.join @gemhome, 'bin', 'executable'
|
|
rakefile = File.join gemdir, 'ext', 'a', 'Rakefile'
|
|
|
|
Gem.pre_install do |installer|
|
|
refute_path_exists cache_file, 'cache file must not exist yet'
|
|
true
|
|
end
|
|
|
|
Gem.post_build do |installer|
|
|
assert_path_exists gemdir, 'gem install dir must exist'
|
|
assert_path_exists rakefile, 'gem executable must exist'
|
|
refute_path_exists stub_exe, 'gem executable must not exist'
|
|
true
|
|
end
|
|
|
|
Gem.post_install do |installer|
|
|
assert_path_exists cache_file, 'cache file must exist'
|
|
end
|
|
|
|
@newspec = nil
|
|
build_rake_in do
|
|
use_ui @ui do
|
|
@newspec = @installer.install
|
|
end
|
|
end
|
|
|
|
assert_equal @spec, @newspec
|
|
assert_path_exists gemdir
|
|
assert_path_exists stub_exe, 'gem executable must exist'
|
|
|
|
exe = File.join gemdir, 'bin', 'executable'
|
|
assert_path_exists exe
|
|
|
|
exe_mode = File.stat(exe).mode & 0111
|
|
assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
|
|
|
|
assert_path_exists File.join gemdir, 'lib', 'code.rb'
|
|
|
|
assert_path_exists rakefile
|
|
|
|
spec_file = File.join(@gemhome, 'specifications', @spec.spec_name)
|
|
|
|
assert_equal spec_file, @newspec.loaded_from
|
|
assert_path_exists spec_file
|
|
|
|
assert_same @installer, @post_build_hook_arg
|
|
assert_same @installer, @post_install_hook_arg
|
|
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'
|
|
|
|
extra_arg = "\xE4pfel".force_encoding("UTF-8")
|
|
ARGV.unshift extra_arg
|
|
|
|
begin
|
|
Gem::Specification.reset
|
|
|
|
e = assert_raises RuntimeError do
|
|
instance_eval File.read(exe)
|
|
end
|
|
ensure
|
|
ARGV.shift if ARGV.first == extra_arg
|
|
end
|
|
|
|
assert_match(/ran executable/, e.message)
|
|
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_path_exists 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::Package.build @spec
|
|
end
|
|
end
|
|
@installer = Gem::Installer.new @gem
|
|
build_rake_in do
|
|
use_ui @ui do
|
|
assert_equal @spec, @installer.install
|
|
end
|
|
end
|
|
|
|
assert_path_exists File.join gemdir, 'lib', 'other.rb'
|
|
refute_path_exists File.join gemdir, 'lib', 'code.rb',
|
|
"code.rb from prior install of same gem shouldn't remain here"
|
|
end
|
|
|
|
def test_install_force
|
|
use_ui @ui do
|
|
installer = Gem::Installer.new old_ruby_required, :force => true
|
|
installer.install
|
|
end
|
|
|
|
gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
|
|
assert_path_exists gem_dir
|
|
end
|
|
|
|
def test_install_missing_dirs
|
|
FileUtils.rm_f File.join(Gem.dir, 'cache')
|
|
FileUtils.rm_f File.join(Gem.dir, 'docs')
|
|
FileUtils.rm_f File.join(Gem.dir, 'specifications')
|
|
|
|
use_ui @ui do
|
|
@installer.install
|
|
end
|
|
|
|
File.directory? File.join(Gem.dir, 'cache')
|
|
File.directory? File.join(Gem.dir, 'docs')
|
|
File.directory? File.join(Gem.dir, 'specifications')
|
|
|
|
assert_path_exists File.join @gemhome, 'cache', @spec.file_name
|
|
assert_path_exists File.join @gemhome, 'specifications', @spec.spec_name
|
|
end
|
|
|
|
def test_install_post_build_false
|
|
util_clear_gems
|
|
|
|
Gem.post_build do
|
|
false
|
|
end
|
|
|
|
use_ui @ui do
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.install
|
|
end
|
|
|
|
location = "#{__FILE__}:#{__LINE__ - 9}"
|
|
|
|
assert_equal "post-build hook at #{location} failed for a-2", e.message
|
|
end
|
|
|
|
spec_file = File.join @gemhome, 'specifications', @spec.spec_name
|
|
refute_path_exists spec_file
|
|
|
|
gem_dir = File.join @gemhome, 'gems', @spec.full_name
|
|
refute_path_exists gem_dir
|
|
end
|
|
|
|
def test_install_post_build_nil
|
|
util_clear_gems
|
|
|
|
Gem.post_build do
|
|
nil
|
|
end
|
|
|
|
use_ui @ui do
|
|
@installer.install
|
|
end
|
|
|
|
spec_file = File.join @gemhome, 'specifications', @spec.spec_name
|
|
assert_path_exists spec_file
|
|
|
|
gem_dir = File.join @gemhome, 'gems', @spec.full_name
|
|
assert_path_exists gem_dir
|
|
end
|
|
|
|
def test_install_pre_install_false
|
|
util_clear_gems
|
|
|
|
Gem.pre_install do
|
|
false
|
|
end
|
|
|
|
use_ui @ui do
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.install
|
|
end
|
|
|
|
location = "#{__FILE__}:#{__LINE__ - 9}"
|
|
|
|
assert_equal "pre-install hook at #{location} failed for a-2", e.message
|
|
end
|
|
|
|
spec_file = File.join @gemhome, 'specifications', @spec.spec_name
|
|
refute_path_exists spec_file
|
|
end
|
|
|
|
def test_install_pre_install_nil
|
|
util_clear_gems
|
|
|
|
Gem.pre_install do
|
|
nil
|
|
end
|
|
|
|
use_ui @ui do
|
|
@installer.install
|
|
end
|
|
|
|
spec_file = File.join @gemhome, 'specifications', @spec.spec_name
|
|
assert_path_exists spec_file
|
|
end
|
|
|
|
def test_install_with_message
|
|
@spec.post_install_message = 'I am a shiny gem!'
|
|
|
|
use_ui @ui do
|
|
path = Gem::Package.build @spec
|
|
|
|
@installer = Gem::Installer.new path
|
|
@installer.install
|
|
end
|
|
|
|
assert_match %r|I am a shiny gem!|, @ui.output
|
|
end
|
|
|
|
def test_install_extension_install_dir
|
|
gemhome2 = "#{@gemhome}2"
|
|
|
|
@spec.extensions << "extconf.rb"
|
|
write_file File.join(@tempdir, "extconf.rb") do |io|
|
|
io.write <<-RUBY
|
|
require "mkmf"
|
|
create_makefile("#{@spec.name}")
|
|
RUBY
|
|
end
|
|
|
|
@spec.files += %w[extconf.rb]
|
|
|
|
use_ui @ui do
|
|
path = Gem::Package.build @spec
|
|
|
|
installer = Gem::Installer.new path, :install_dir => gemhome2
|
|
installer.install
|
|
end
|
|
|
|
expected_makefile = File.join gemhome2, 'gems', @spec.full_name, 'Makefile'
|
|
|
|
assert_path_exists expected_makefile
|
|
end
|
|
|
|
def test_install_extension_and_script
|
|
@spec.extensions << "extconf.rb"
|
|
write_file File.join(@tempdir, "extconf.rb") do |io|
|
|
io.write <<-RUBY
|
|
require "mkmf"
|
|
create_makefile("#{@spec.name}")
|
|
RUBY
|
|
end
|
|
|
|
rb = File.join("lib", "#{@spec.name}.rb")
|
|
@spec.files += [rb]
|
|
write_file File.join(@tempdir, rb) do |io|
|
|
io.write <<-RUBY
|
|
# #{@spec.name}.rb
|
|
RUBY
|
|
end
|
|
|
|
Dir.mkdir(File.join("lib", @spec.name))
|
|
rb2 = File.join("lib", @spec.name, "#{@spec.name}.rb")
|
|
@spec.files << rb2
|
|
write_file File.join(@tempdir, rb2) do |io|
|
|
io.write <<-RUBY
|
|
# #{@spec.name}/#{@spec.name}.rb
|
|
RUBY
|
|
end
|
|
|
|
refute_path_exists File.join @spec.gem_dir, rb
|
|
refute_path_exists File.join @spec.gem_dir, rb2
|
|
use_ui @ui do
|
|
path = Gem::Package.build @spec
|
|
|
|
@installer = Gem::Installer.new path
|
|
@installer.install
|
|
end
|
|
assert_path_exists File.join @spec.gem_dir, rb
|
|
assert_path_exists File.join @spec.gem_dir, rb2
|
|
end
|
|
|
|
def test_install_extension_flat
|
|
skip '1.9.2 and earlier mkmf.rb does not create TOUCH' if
|
|
RUBY_VERSION < '1.9.3'
|
|
|
|
if RUBY_VERSION == "1.9.3" and RUBY_PATCHLEVEL <= 194
|
|
skip "TOUCH was introduced into 1.9.3 after p194"
|
|
end
|
|
|
|
@spec.require_paths = ["."]
|
|
|
|
@spec.extensions << "extconf.rb"
|
|
|
|
write_file File.join(@tempdir, "extconf.rb") do |io|
|
|
io.write <<-RUBY
|
|
require "mkmf"
|
|
|
|
CONFIG['CC'] = '$(TOUCH) $@ ||'
|
|
CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
|
|
$ruby = '#{Gem.ruby}'
|
|
|
|
create_makefile("#{@spec.name}")
|
|
RUBY
|
|
end
|
|
|
|
# empty depend file for no auto dependencies
|
|
@spec.files += %W"depend #{@spec.name}.c".each {|file|
|
|
write_file File.join(@tempdir, file)
|
|
}
|
|
|
|
so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
|
|
refute_path_exists so
|
|
use_ui @ui do
|
|
path = Gem::Package.build @spec
|
|
|
|
@installer = Gem::Installer.new path
|
|
@installer.install
|
|
end
|
|
assert_path_exists so
|
|
rescue
|
|
puts '-' * 78
|
|
puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile')
|
|
puts '-' * 78
|
|
|
|
path = File.join(@gemhome, 'gems', 'a-2', 'gem_make.out')
|
|
|
|
if File.exists?(path)
|
|
puts File.read(path)
|
|
puts '-' * 78
|
|
end
|
|
|
|
raise
|
|
end
|
|
|
|
def test_installation_satisfies_dependency_eh
|
|
util_spec 'a'
|
|
|
|
dep = Gem::Dependency.new 'a', '>= 2'
|
|
assert @installer.installation_satisfies_dependency?(dep)
|
|
|
|
dep = Gem::Dependency.new 'a', '> 2'
|
|
refute @installer.installation_satisfies_dependency?(dep)
|
|
end
|
|
|
|
def test_pre_install_checks_dependencies
|
|
@spec.add_dependency 'b', '> 5'
|
|
util_setup_gem
|
|
|
|
use_ui @ui do
|
|
assert_raises Gem::InstallError do
|
|
@installer.install
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_pre_install_checks_dependencies_ignore
|
|
@spec.add_dependency 'b', '> 5'
|
|
@installer.ignore_dependencies = true
|
|
|
|
build_rake_in do
|
|
use_ui @ui do
|
|
assert @installer.pre_install_checks
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_pre_install_checks_dependencies_install_dir
|
|
gemhome2 = "#{@gemhome}2"
|
|
@spec.add_dependency 'd'
|
|
|
|
quick_gem 'd', 2
|
|
|
|
gem = File.join @gemhome, @spec.file_name
|
|
|
|
FileUtils.mv @gemhome, gemhome2
|
|
FileUtils.mkdir @gemhome
|
|
|
|
FileUtils.mv File.join(gemhome2, 'cache', @spec.file_name), gem
|
|
|
|
# Don't leak any already activated gems into the installer, require
|
|
# that it work everything out on it's own.
|
|
Gem::Specification.reset
|
|
|
|
installer = Gem::Installer.new gem, :install_dir => gemhome2
|
|
|
|
build_rake_in do
|
|
use_ui @ui do
|
|
assert installer.pre_install_checks
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_pre_install_checks_ruby_version
|
|
use_ui @ui do
|
|
installer = Gem::Installer.new old_ruby_required
|
|
e = assert_raises Gem::InstallError do
|
|
installer.pre_install_checks
|
|
end
|
|
assert_equal 'old_ruby_required requires Ruby version = 1.4.6.',
|
|
e.message
|
|
end
|
|
end
|
|
|
|
def test_pre_install_checks_wrong_rubygems_version
|
|
spec = util_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)
|
|
|
|
use_ui @ui do
|
|
@installer = Gem::Installer.new gem
|
|
e = assert_raises Gem::InstallError do
|
|
@installer.pre_install_checks
|
|
end
|
|
assert_equal 'old_rubygems_required requires RubyGems version < 0. ' +
|
|
"Try 'gem update --system' to update RubyGems itself.", e.message
|
|
end
|
|
end
|
|
|
|
def test_shebang
|
|
util_make_exec @spec, "#!/usr/bin/ruby"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_arguments
|
|
util_make_exec @spec, "#!/usr/bin/ruby -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby} -ws", shebang
|
|
end
|
|
|
|
def test_shebang_empty
|
|
util_make_exec @spec, ''
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_env
|
|
util_make_exec @spec, "#!/usr/bin/env ruby"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_env_arguments
|
|
util_make_exec @spec, "#!/usr/bin/env ruby -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby} -ws", shebang
|
|
end
|
|
|
|
def test_shebang_env_shebang
|
|
util_make_exec @spec, ''
|
|
@installer.env_shebang = true
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
env_shebang = "/usr/bin/env" unless Gem.win_platform?
|
|
|
|
assert_equal("#!#{env_shebang} #{Gem::ConfigMap[:ruby_install_name]}",
|
|
shebang)
|
|
end
|
|
|
|
def test_shebang_nested
|
|
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_nested_arguments
|
|
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby} -ws", shebang
|
|
end
|
|
|
|
def test_shebang_version
|
|
util_make_exec @spec, "#!/usr/bin/ruby18"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_version_arguments
|
|
util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby} -ws", shebang
|
|
end
|
|
|
|
def test_shebang_version_env
|
|
util_make_exec @spec, "#!/usr/bin/env ruby18"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby}", shebang
|
|
end
|
|
|
|
def test_shebang_version_env_arguments
|
|
util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!#{Gem.ruby} -ws", shebang
|
|
end
|
|
|
|
def test_shebang_custom
|
|
conf = Gem::ConfigFile.new []
|
|
conf[:custom_shebang] = 'test'
|
|
|
|
Gem.configuration = conf
|
|
|
|
util_make_exec @spec, "#!/usr/bin/ruby"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!test", shebang
|
|
end
|
|
|
|
def test_shebang_custom_with_expands
|
|
bin_env = win_platform? ? '' : '/usr/bin/env'
|
|
conf = Gem::ConfigFile.new []
|
|
conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
|
|
|
|
Gem.configuration = conf
|
|
|
|
util_make_exec @spec, "#!/usr/bin/ruby"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} 3 executable 4 a", shebang
|
|
end
|
|
|
|
def test_shebang_custom_with_expands_and_arguments
|
|
bin_env = win_platform? ? '' : '/usr/bin/env'
|
|
conf = Gem::ConfigFile.new []
|
|
conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
|
|
|
|
Gem.configuration = conf
|
|
|
|
util_make_exec @spec, "#!/usr/bin/ruby -ws"
|
|
|
|
shebang = @installer.shebang 'executable'
|
|
|
|
assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} -ws 3 executable", shebang
|
|
end
|
|
|
|
def test_unpack
|
|
util_setup_gem
|
|
|
|
dest = File.join @gemhome, 'gems', @spec.full_name
|
|
|
|
@installer.unpack dest
|
|
|
|
assert_path_exists File.join dest, 'lib', 'code.rb'
|
|
assert_path_exists File.join dest, 'bin', 'executable'
|
|
end
|
|
|
|
def test_write_build_info_file
|
|
refute_path_exists @spec.build_info_file
|
|
|
|
@installer.build_args = %w[
|
|
--with-libyaml-dir /usr/local/Cellar/libyaml/0.1.4
|
|
]
|
|
|
|
@installer.write_build_info_file
|
|
|
|
assert_path_exists @spec.build_info_file
|
|
|
|
expected = "--with-libyaml-dir\n/usr/local/Cellar/libyaml/0.1.4\n"
|
|
|
|
assert_equal expected, File.read(@spec.build_info_file)
|
|
end
|
|
|
|
def test_write_build_info_file_empty
|
|
refute_path_exists @spec.build_info_file
|
|
|
|
@installer.write_build_info_file
|
|
|
|
refute_path_exists @spec.build_info_file
|
|
end
|
|
|
|
def test_write_build_info_file_install_dir
|
|
installer = Gem::Installer.new @gem, :install_dir => "#{@gemhome}2"
|
|
|
|
installer.build_args = %w[
|
|
--with-libyaml-dir /usr/local/Cellar/libyaml/0.1.4
|
|
]
|
|
|
|
installer.write_build_info_file
|
|
|
|
refute_path_exists @spec.build_info_file
|
|
assert_path_exists \
|
|
File.join("#{@gemhome}2", 'build_info', "#{@spec.full_name}.info")
|
|
end
|
|
|
|
def test_write_cache_file
|
|
cache_file = File.join @gemhome, 'cache', @spec.file_name
|
|
gem = File.join @gemhome, @spec.file_name
|
|
|
|
FileUtils.mv cache_file, gem
|
|
refute_path_exists cache_file
|
|
|
|
installer = Gem::Installer.new gem
|
|
installer.spec = @spec
|
|
installer.gem_home = @gemhome
|
|
|
|
installer.write_cache_file
|
|
|
|
assert_path_exists cache_file
|
|
end
|
|
|
|
def test_write_spec
|
|
FileUtils.rm @spec.spec_file
|
|
refute_path_exists @spec.spec_file
|
|
|
|
@installer.spec = @spec
|
|
@installer.gem_home = @gemhome
|
|
|
|
@installer.write_spec
|
|
|
|
assert_path_exists @spec.spec_file
|
|
|
|
loaded = Gem::Specification.load @spec.spec_file
|
|
|
|
assert_equal @spec, loaded
|
|
|
|
assert_equal Gem.rubygems_version, @spec.installed_by_version
|
|
end
|
|
|
|
def test_write_spec_writes_cached_spec
|
|
FileUtils.rm @spec.spec_file
|
|
refute_path_exists @spec.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.spec_file))
|
|
end
|
|
|
|
def test_dir
|
|
assert_match %r!/gemhome/gems/a-2$!, @installer.dir
|
|
end
|
|
|
|
def test_default_gem
|
|
FileUtils.rm_f File.join(Gem.dir, 'specifications')
|
|
|
|
@installer.wrappers = true
|
|
@installer.options[:install_as_default] = true
|
|
@installer.gem_dir = util_gem_dir @spec
|
|
@installer.generate_bin
|
|
|
|
use_ui @ui do
|
|
@installer.install
|
|
end
|
|
|
|
assert File.directory? util_inst_bindir
|
|
installed_exec = File.join util_inst_bindir, 'executable'
|
|
assert_path_exists installed_exec
|
|
|
|
assert File.directory? File.join(Gem.dir, 'specifications')
|
|
assert File.directory? File.join(Gem.dir, 'specifications', 'default')
|
|
|
|
default_spec = eval File.read File.join(Gem.dir, 'specifications', 'default', 'a-2.gemspec')
|
|
assert_equal Gem::Version.new("2"), default_spec.version
|
|
assert_equal ['bin/executable'], default_spec.files
|
|
end
|
|
|
|
def old_ruby_required
|
|
spec = util_spec 'old_ruby_required', '1' do |s|
|
|
s.required_ruby_version = '= 1.4.6'
|
|
end
|
|
|
|
util_build_gem spec
|
|
|
|
spec.cache_file
|
|
end
|
|
|
|
def util_execless
|
|
@spec = util_spec 'z'
|
|
util_build_gem @spec
|
|
|
|
@installer = util_installer @spec, @gemhome
|
|
end
|
|
|
|
def util_conflict_executable wrappers
|
|
conflict = quick_gem 'conflict' do |spec|
|
|
util_make_exec spec
|
|
end
|
|
|
|
util_build_gem conflict
|
|
|
|
installer = util_installer conflict, @gemhome
|
|
installer.wrappers = wrappers
|
|
installer.generate_bin
|
|
end
|
|
|
|
def mask
|
|
0100755 & (~File.umask)
|
|
end
|
|
end
|