From 0dc342de848a642ecce8db697b8fecd83a63e117 Mon Sep 17 00:00:00 2001 From: yugui Date: Mon, 25 Aug 2008 15:02:05 +0000 Subject: added tag v1_9_0_4 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- trunk/test/rubygems/test_gem.rb | 449 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 449 insertions(+) create mode 100644 trunk/test/rubygems/test_gem.rb (limited to 'trunk/test/rubygems/test_gem.rb') diff --git a/trunk/test/rubygems/test_gem.rb b/trunk/test/rubygems/test_gem.rb new file mode 100644 index 0000000000..c26eeb573d --- /dev/null +++ b/trunk/test/rubygems/test_gem.rb @@ -0,0 +1,449 @@ +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') +require 'rubygems' +require 'rubygems/gem_openssl' +require 'rubygems/installer' +require 'pathname' +require 'tmpdir' + +class TestGem < RubyGemTestCase + + def setup + super + + @additional = %w[a b].map { |d| File.join @tempdir, d } + @default_dir_re = %r|/[Rr]uby/[Gg]ems/[0-9.]+| + end + + def test_self_all_load_paths + util_make_gems + + expected = [ + File.join(@gemhome, *%W[gems #{@a1.full_name} lib]), + File.join(@gemhome, *%W[gems #{@a2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]), + File.join(@gemhome, *%W[gems #{@b2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]), + ] + + assert_equal expected, Gem.all_load_paths.sort + end + + def test_self_available? + util_make_gems + assert(Gem.available?("a")) + assert(Gem.available?("a", "1")) + assert(Gem.available?("a", ">1")) + assert(!Gem.available?("monkeys")) + 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 + bindir = (defined? RUBY_FRAMEWORK_VERSION) ? '/usr/bin' : Config::CONFIG['bindir'] + assert_equal bindir, Gem.bindir(default) + assert_equal bindir, Gem.bindir(Pathname.new(default)) + 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 + assert_not_equal source_index.object_id, Gem.source_index.object_id + 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 + + Gem.source_index = nil + + 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 + + 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 + + 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 = [ + File.join(@gemhome, *%W[gems #{@a2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]), + File.join(@gemhome, *%W[gems #{@b2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]), + File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]), + ] + + 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 + + Gem.activate 'foo' + + assert_equal true, Gem.loaded_specs.keys.include?('foo') + end + + def test_self_path + assert_equal [Gem.dir], Gem.path + end + + def test_self_path_default + if defined? APPLE_GEM_HOME + orig_APPLE_GEM_HOME = APPLE_GEM_HOME + Object.send :remove_const, :APPLE_GEM_HOME + end + Gem.instance_variable_set :@gem_path, nil + + assert_equal [Gem.default_path, Gem.dir].flatten, Gem.path + ensure + Object.const_set :APPLE_GEM_HOME, orig_APPLE_GEM_HOME + end + + unless win_platform? + def test_self_path_APPLE_GEM_HOME + Gem.clear_paths + Dir.mktmpdir("apple_gem_home") {|d| + Gem.const_set :APPLE_GEM_HOME, d + assert Gem.path.include?(d) + } + 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 + end + + def test_self_path_ENV_PATH + Gem.send :set_paths, nil + path_count = Gem.path.size + Gem.clear_paths + + ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR) + + assert_equal @additional, Gem.path[0,2] + + assert_equal path_count + @additional.size, Gem.path.size, + "extra path components: #{Gem.path[2..-1].inspect}" + 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 + + paths = [Gem.dir] + assert_equal @additional + paths, Gem.path + 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 + + paths = [Gem.dir] + assert_equal @additional + paths, Gem.path + 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__ + + prefix = File.dirname File.dirname(file_name) + prefix = File.dirname prefix if File.basename(prefix) == 'test' + + assert_equal prefix, Gem.prefix + end + + def test_self_prefix_libdir + orig_libdir = Gem::ConfigMap[:libdir] + + file_name = File.expand_path __FILE__ + prefix = File.dirname File.dirname(file_name) + prefix = File.dirname prefix if File.basename(prefix) == 'test' + + Gem::ConfigMap[:libdir] = prefix + + assert_nil Gem.prefix + ensure + Gem::ConfigMap[:libdir] = orig_libdir + end + + def test_self_prefix_sitelibdir + orig_sitelibdir = Gem::ConfigMap[:sitelibdir] + + file_name = File.expand_path __FILE__ + prefix = File.dirname File.dirname(file_name) + prefix = File.dirname prefix if File.basename(prefix) == 'test' + + Gem::ConfigMap[:sitelibdir] = prefix + + assert_nil Gem.prefix + ensure + Gem::ConfigMap[:sitelibdir] = orig_sitelibdir + end + + def test_self_refresh + util_make_gems + + a1_spec = File.join @gemhome, "specifications", "#{@a1.full_name}.gemspec" + + FileUtils.mv a1_spec, @tempdir + + assert !Gem.source_index.gems.include?(@a1.full_name) + + FileUtils.mv File.join(@tempdir, "#{@a1.full_name}.gemspec"), a1_spec + + Gem.refresh + + assert Gem.source_index.gems.include?(@a1.full_name) + assert_equal nil, Gem.instance_variable_get(:@searcher) + end + + 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") + 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") + end + + 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 + + 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 + -- cgit v1.2.3