2007-11-10 10:48:56 +03:00
|
|
|
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
|
|
|
|
require 'rubygems'
|
|
|
|
require 'rubygems/gem_openssl'
|
2007-12-20 11:39:12 +03:00
|
|
|
require 'rubygems/installer'
|
2007-11-10 10:48:56 +03:00
|
|
|
require 'pathname'
|
|
|
|
|
|
|
|
class TestGem < RubyGemTestCase
|
|
|
|
|
|
|
|
def setup
|
|
|
|
super
|
|
|
|
|
|
|
|
@additional = %w[a b].map { |d| File.join @tempdir, d }
|
2007-11-20 08:56:43 +03:00
|
|
|
@default_dir_re = %r|/[Rr]uby/[Gg]ems/[0-9.]+|
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_all_load_paths
|
|
|
|
util_make_gems
|
|
|
|
|
|
|
|
expected = [
|
2007-12-20 11:39:12 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@a1.full_name} lib]),
|
|
|
|
File.join(@gemhome, *%W[gems #{@a2.full_name} lib]),
|
2008-04-01 02:40:06 +04:00
|
|
|
File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
|
2007-12-20 11:39:12 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
|
2007-11-20 08:56:43 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
|
|
|
|
File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]),
|
2007-11-10 10:48:56 +03:00
|
|
|
]
|
|
|
|
|
|
|
|
assert_equal expected, Gem.all_load_paths.sort
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_bindir
|
|
|
|
assert_equal File.join(@gemhome, 'bin'), Gem.bindir
|
|
|
|
assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Gem.dir)
|
|
|
|
assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Pathname.new(Gem.dir))
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_bindir_default_dir
|
|
|
|
default = Gem.default_dir
|
2007-11-20 08:56:43 +03:00
|
|
|
bindir = (defined? RUBY_FRAMEWORK_VERSION) ? '/usr/bin' : Config::CONFIG['bindir']
|
|
|
|
assert_equal bindir, Gem.bindir(default)
|
|
|
|
assert_equal bindir, Gem.bindir(Pathname.new(default))
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_clear_paths
|
|
|
|
Gem.dir
|
|
|
|
Gem.path
|
|
|
|
searcher = Gem.searcher
|
|
|
|
source_index = Gem.source_index
|
|
|
|
|
|
|
|
Gem.clear_paths
|
|
|
|
|
|
|
|
assert_equal nil, Gem.instance_variable_get(:@gem_home)
|
|
|
|
assert_equal nil, Gem.instance_variable_get(:@gem_path)
|
|
|
|
assert_not_equal searcher, Gem.searcher
|
2007-12-21 11:45:07 +03:00
|
|
|
assert_not_equal source_index.object_id, Gem.source_index.object_id
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_configuration
|
|
|
|
expected = Gem::ConfigFile.new []
|
|
|
|
Gem.configuration = nil
|
|
|
|
|
|
|
|
assert_equal expected, Gem.configuration
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_datadir
|
|
|
|
foo = nil
|
|
|
|
|
|
|
|
Dir.chdir @tempdir do
|
|
|
|
FileUtils.mkdir_p 'data'
|
|
|
|
File.open File.join('data', 'foo.txt'), 'w' do |fp|
|
|
|
|
fp.puts 'blah'
|
|
|
|
end
|
|
|
|
|
|
|
|
foo = quick_gem 'foo' do |s| s.files = %w[data/foo.txt] end
|
|
|
|
install_gem foo
|
|
|
|
end
|
|
|
|
|
2008-02-10 11:00:19 +03:00
|
|
|
Gem.source_index = nil
|
|
|
|
|
2007-11-10 10:48:56 +03:00
|
|
|
gem 'foo'
|
|
|
|
|
|
|
|
expected = File.join @gemhome, 'gems', foo.full_name, 'data', 'foo'
|
|
|
|
|
|
|
|
assert_equal expected, Gem.datadir('foo')
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_datadir_nonexistent_package
|
|
|
|
assert_nil Gem.datadir('xyzzy')
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_default_dir
|
|
|
|
assert_match @default_dir_re, Gem.default_dir
|
|
|
|
end
|
|
|
|
|
2007-12-20 11:39:12 +03:00
|
|
|
def test_self_default_exec_format
|
|
|
|
orig_BASERUBY = Gem::ConfigMap[:BASERUBY]
|
|
|
|
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:RUBY_INSTALL_NAME]
|
|
|
|
Gem::ConfigMap[:BASERUBY] = 'ruby'
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = 'ruby'
|
|
|
|
|
|
|
|
assert_equal '%s', Gem.default_exec_format
|
|
|
|
ensure
|
|
|
|
Gem::ConfigMap[:BASERUBY] = orig_BASERUBY
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = orig_RUBY_INSTALL_NAME
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_default_exec_format_18
|
|
|
|
orig_BASERUBY = Gem::ConfigMap[:BASERUBY]
|
|
|
|
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:RUBY_INSTALL_NAME]
|
|
|
|
Gem::ConfigMap[:BASERUBY] = 'ruby'
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = 'ruby18'
|
|
|
|
|
|
|
|
assert_equal '%s18', Gem.default_exec_format
|
|
|
|
ensure
|
|
|
|
Gem::ConfigMap[:BASERUBY] = orig_BASERUBY
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = orig_RUBY_INSTALL_NAME
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_default_exec_format_jruby
|
|
|
|
orig_BASERUBY = Gem::ConfigMap[:BASERUBY]
|
|
|
|
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:RUBY_INSTALL_NAME]
|
|
|
|
Gem::ConfigMap[:BASERUBY] = 'ruby'
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = 'jruby'
|
|
|
|
|
|
|
|
assert_equal 'j%s', Gem.default_exec_format
|
|
|
|
ensure
|
|
|
|
Gem::ConfigMap[:BASERUBY] = orig_BASERUBY
|
|
|
|
Gem::ConfigMap[:RUBY_INSTALL_NAME] = orig_RUBY_INSTALL_NAME
|
|
|
|
end
|
|
|
|
|
2007-11-10 10:48:56 +03:00
|
|
|
def test_self_default_sources
|
|
|
|
assert_equal %w[http://gems.rubyforge.org], Gem.default_sources
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_dir
|
|
|
|
assert_equal @gemhome, Gem.dir
|
|
|
|
|
|
|
|
Gem::DIRECTORIES.each do |filename|
|
|
|
|
assert File.directory?(File.join(Gem.dir, filename)),
|
|
|
|
"expected #{filename} to exist"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_ensure_gem_directories
|
|
|
|
FileUtils.rm_r @gemhome
|
|
|
|
Gem.use_paths @gemhome
|
|
|
|
|
|
|
|
Gem.ensure_gem_subdirectories @gemhome
|
|
|
|
|
|
|
|
assert File.directory?(File.join(@gemhome, "cache"))
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_ensure_gem_directories_missing_parents
|
|
|
|
gemdir = File.join @tempdir, 'a/b/c/gemdir'
|
|
|
|
FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
|
|
|
|
assert !File.exist?(File.join(@tempdir, 'a')),
|
|
|
|
"manually remove #{File.join @tempdir, 'a'}, tests are broken"
|
|
|
|
Gem.use_paths gemdir
|
|
|
|
|
|
|
|
Gem.ensure_gem_subdirectories gemdir
|
|
|
|
|
|
|
|
assert File.directory?("#{gemdir}/cache")
|
|
|
|
end
|
|
|
|
|
|
|
|
unless win_platform? then # only for FS that support write protection
|
|
|
|
def test_self_ensure_gem_directories_write_protected
|
|
|
|
gemdir = File.join @tempdir, "egd"
|
|
|
|
FileUtils.rm_r gemdir rescue nil
|
|
|
|
assert !File.exist?(gemdir), "manually remove #{gemdir}, tests are broken"
|
|
|
|
FileUtils.mkdir_p gemdir
|
|
|
|
FileUtils.chmod 0400, gemdir
|
|
|
|
Gem.use_paths gemdir
|
|
|
|
|
|
|
|
Gem.ensure_gem_subdirectories gemdir
|
|
|
|
|
|
|
|
assert !File.exist?("#{gemdir}/cache")
|
|
|
|
ensure
|
|
|
|
FileUtils.chmod 0600, gemdir
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_ensure_gem_directories_write_protected_parents
|
|
|
|
parent = File.join(@tempdir, "egd")
|
|
|
|
gemdir = "#{parent}/a/b/c"
|
|
|
|
|
|
|
|
FileUtils.rm_r parent rescue nil
|
|
|
|
assert !File.exist?(parent), "manually remove #{parent}, tests are broken"
|
|
|
|
FileUtils.mkdir_p parent
|
|
|
|
FileUtils.chmod 0400, parent
|
|
|
|
Gem.use_paths(gemdir)
|
|
|
|
|
|
|
|
Gem.ensure_gem_subdirectories gemdir
|
|
|
|
|
|
|
|
assert !File.exist?("#{gemdir}/cache")
|
|
|
|
ensure
|
|
|
|
FileUtils.chmod 0600, parent
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_ensure_ssl_available
|
|
|
|
orig_Gem_ssl_available = Gem.ssl_available?
|
|
|
|
|
|
|
|
Gem.ssl_available = true
|
|
|
|
assert_nothing_raised do Gem.ensure_ssl_available end
|
|
|
|
|
|
|
|
Gem.ssl_available = false
|
|
|
|
e = assert_raise Gem::Exception do Gem.ensure_ssl_available end
|
|
|
|
assert_equal 'SSL is not installed on this system', e.message
|
|
|
|
ensure
|
|
|
|
Gem.ssl_available = orig_Gem_ssl_available
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_latest_load_paths
|
|
|
|
util_make_gems
|
|
|
|
|
|
|
|
expected = [
|
2007-12-20 11:39:12 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@a2.full_name} lib]),
|
2008-04-01 02:40:06 +04:00
|
|
|
File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
|
2007-12-20 11:39:12 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
|
2007-11-20 08:56:43 +03:00
|
|
|
File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
|
|
|
|
File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]),
|
2007-11-10 10:48:56 +03:00
|
|
|
]
|
|
|
|
|
|
|
|
assert_equal expected, Gem.latest_load_paths.sort
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_loaded_specs
|
|
|
|
foo = quick_gem 'foo'
|
|
|
|
install_gem foo
|
|
|
|
Gem.source_index = nil
|
|
|
|
|
2008-04-01 02:40:06 +04:00
|
|
|
Gem.activate 'foo'
|
2007-11-10 10:48:56 +03:00
|
|
|
|
|
|
|
assert_equal true, Gem.loaded_specs.keys.include?('foo')
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_path
|
|
|
|
assert_equal [Gem.dir], Gem.path
|
|
|
|
end
|
|
|
|
|
2008-04-01 02:40:06 +04:00
|
|
|
def test_self_path_APPLE_GEM_HOME
|
|
|
|
Gem.clear_paths
|
|
|
|
Gem.const_set :APPLE_GEM_HOME, '/tmp/apple_gem_home'
|
|
|
|
|
|
|
|
assert Gem.path.include?('/tmp/apple_gem_home')
|
|
|
|
ensure
|
|
|
|
Gem.send :remove_const, :APPLE_GEM_HOME
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_path_APPLE_GEM_HOME_GEM_PATH
|
|
|
|
Gem.clear_paths
|
|
|
|
ENV['GEM_PATH'] = @gemhome
|
|
|
|
Gem.const_set :APPLE_GEM_HOME, '/tmp/apple_gem_home'
|
|
|
|
|
|
|
|
assert !Gem.path.include?('/tmp/apple_gem_home')
|
|
|
|
ensure
|
|
|
|
Gem.send :remove_const, :APPLE_GEM_HOME
|
|
|
|
end
|
|
|
|
|
2007-11-10 10:48:56 +03:00
|
|
|
def test_self_path_ENV_PATH
|
2007-11-20 08:56:43 +03:00
|
|
|
Gem.clear_paths
|
|
|
|
path_count = Gem.path.size
|
2008-04-01 02:40:06 +04:00
|
|
|
path_count -= 1 if defined? APPLE_GEM_HOME
|
2007-11-10 10:48:56 +03:00
|
|
|
Gem.clear_paths
|
|
|
|
util_ensure_gem_dirs
|
|
|
|
|
|
|
|
ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
|
|
|
|
|
|
|
|
assert_equal @additional, Gem.path[0,2]
|
2007-11-20 08:56:43 +03:00
|
|
|
assert_equal path_count + @additional.size, Gem.path.size
|
2007-11-10 10:48:56 +03:00
|
|
|
assert_match Gem.dir, Gem.path.last
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_path_duplicate
|
|
|
|
Gem.clear_paths
|
|
|
|
util_ensure_gem_dirs
|
|
|
|
dirs = @additional + [@gemhome] + [File.join(@tempdir, 'a')]
|
|
|
|
|
|
|
|
ENV['GEM_HOME'] = @gemhome
|
|
|
|
ENV['GEM_PATH'] = dirs.join File::PATH_SEPARATOR
|
|
|
|
|
|
|
|
assert_equal @gemhome, Gem.dir
|
2008-04-01 02:40:06 +04:00
|
|
|
|
2007-11-20 08:56:43 +03:00
|
|
|
paths = [Gem.dir]
|
|
|
|
assert_equal @additional + paths, Gem.path
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_path_overlap
|
|
|
|
Gem.clear_paths
|
|
|
|
|
|
|
|
util_ensure_gem_dirs
|
|
|
|
ENV['GEM_HOME'] = @gemhome
|
|
|
|
ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
|
|
|
|
|
|
|
|
assert_equal @gemhome, Gem.dir
|
2008-04-01 02:40:06 +04:00
|
|
|
|
2007-11-20 08:56:43 +03:00
|
|
|
paths = [Gem.dir]
|
|
|
|
assert_equal @additional + paths, Gem.path
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_platforms
|
|
|
|
assert_equal [Gem::Platform::RUBY, Gem::Platform.local], Gem.platforms
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_prefix
|
|
|
|
file_name = File.expand_path __FILE__
|
2008-02-10 11:00:19 +03:00
|
|
|
assert_equal File.dirname(File.dirname(file_name)), Gem.prefix
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
2008-04-01 02:40:06 +04:00
|
|
|
def test_self_prefix_odd
|
|
|
|
orig_sitelibdir = Gem::ConfigMap[:sitelibdir]
|
|
|
|
|
|
|
|
file_name = File.expand_path __FILE__
|
|
|
|
prefix = File.join File.dirname(File.dirname(file_name)), 'lib'
|
|
|
|
Gem::ConfigMap[:sitelibdir] = prefix.sub(/[\w]\//, '\&/')
|
|
|
|
|
|
|
|
assert_nil Gem.prefix
|
|
|
|
ensure
|
|
|
|
Gem::ConfigMap[:sitelibdir] = orig_sitelibdir
|
|
|
|
end
|
|
|
|
|
2007-11-10 10:48:56 +03:00
|
|
|
def test_self_required_location
|
|
|
|
util_make_gems
|
|
|
|
|
|
|
|
assert_equal File.join(@tempdir, *%w[gemhome gems c-1.2 lib code.rb]),
|
|
|
|
Gem.required_location("c", "code.rb")
|
2007-12-20 11:39:12 +03:00
|
|
|
assert_equal File.join(@tempdir, *%w[gemhome gems a-1 lib code.rb]),
|
|
|
|
Gem.required_location("a", "code.rb", "< 2")
|
|
|
|
assert_equal File.join(@tempdir, *%w[gemhome gems a-2 lib code.rb]),
|
|
|
|
Gem.required_location("a", "code.rb", "= 2")
|
2007-11-10 10:48:56 +03:00
|
|
|
end
|
|
|
|
|
2008-04-01 02:40:06 +04:00
|
|
|
def test_self_ruby_version
|
|
|
|
version = RUBY_VERSION.dup
|
|
|
|
version << ".#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
|
|
|
|
|
|
|
|
assert_equal Gem::Version.new(version), Gem.ruby_version
|
|
|
|
end
|
|
|
|
|
2007-11-10 10:48:56 +03:00
|
|
|
def test_self_searcher
|
|
|
|
assert_kind_of Gem::GemPathSearcher, Gem.searcher
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_source_index
|
|
|
|
assert_kind_of Gem::SourceIndex, Gem.source_index
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_sources
|
|
|
|
assert_equal %w[http://gems.example.com], Gem.sources
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_ssl_available_eh
|
|
|
|
orig_Gem_ssl_available = Gem.ssl_available?
|
|
|
|
|
|
|
|
Gem.ssl_available = true
|
|
|
|
assert_equal true, Gem.ssl_available?
|
|
|
|
|
|
|
|
Gem.ssl_available = false
|
|
|
|
assert_equal false, Gem.ssl_available?
|
|
|
|
ensure
|
|
|
|
Gem.ssl_available = orig_Gem_ssl_available
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_use_paths
|
|
|
|
util_ensure_gem_dirs
|
|
|
|
|
|
|
|
Gem.use_paths @gemhome, @additional
|
|
|
|
|
|
|
|
assert_equal @gemhome, Gem.dir
|
|
|
|
assert_equal @additional + [Gem.dir], Gem.path
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_self_user_home
|
|
|
|
if ENV['HOME'] then
|
|
|
|
assert_equal ENV['HOME'], Gem.user_home
|
|
|
|
else
|
|
|
|
assert true, 'count this test'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def util_ensure_gem_dirs
|
|
|
|
Gem.ensure_gem_subdirectories @gemhome
|
|
|
|
@additional.each do |dir|
|
|
|
|
Gem.ensure_gem_subdirectories @gemhome
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|