From d22130922e7842226d38d59680e4bbb48a28a5f0 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 1 Jun 2011 03:45:05 +0000 Subject: Import rubygems 1.8.5 (released @ 137c80f) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/functional.rb | 98 ----- test/rubygems/test_gem.rb | 277 ++++++------ test/rubygems/test_gem_builder.rb | 19 +- test/rubygems/test_gem_command_manager.rb | 2 + test/rubygems/test_gem_commands_build_command.rb | 34 +- test/rubygems/test_gem_commands_cleanup_command.rb | 57 +++ .../rubygems/test_gem_commands_contents_command.rb | 49 +-- .../test_gem_commands_dependency_command.rb | 29 +- test/rubygems/test_gem_commands_fetch_command.rb | 9 +- test/rubygems/test_gem_commands_help_command.rb | 64 +++ test/rubygems/test_gem_commands_install_command.rb | 49 +-- test/rubygems/test_gem_commands_list_command.rb | 5 +- .../rubygems/test_gem_commands_outdated_command.rb | 19 +- .../rubygems/test_gem_commands_pristine_command.rb | 115 ++++- test/rubygems/test_gem_commands_push_command.rb | 2 +- test/rubygems/test_gem_commands_query_command.rb | 97 +---- test/rubygems/test_gem_commands_sources_command.rb | 17 +- .../test_gem_commands_specification_command.rb | 16 +- test/rubygems/test_gem_commands_stale_command.rb | 8 +- test/rubygems/test_gem_commands_unpack_command.rb | 57 ++- test/rubygems/test_gem_commands_update_command.rb | 69 +-- test/rubygems/test_gem_commands_which_command.rb | 11 +- test/rubygems/test_gem_dependency.rb | 29 +- test/rubygems/test_gem_dependency_installer.rb | 120 ++++-- test/rubygems/test_gem_dependency_list.rb | 12 +- test/rubygems/test_gem_doc_manager.rb | 6 +- test/rubygems/test_gem_format.rb | 2 +- test/rubygems/test_gem_gem_path_searcher.rb | 74 ++-- test/rubygems/test_gem_gem_runner.rb | 5 +- test/rubygems/test_gem_indexer.rb | 95 ++--- test/rubygems/test_gem_install_update_options.rb | 11 +- test/rubygems/test_gem_installer.rb | 102 +++-- test/rubygems/test_gem_package_tar_output.rb | 1 + test/rubygems/test_gem_path_support.rb | 64 +++ test/rubygems/test_gem_platform.rb | 2 +- test/rubygems/test_gem_remote_fetcher.rb | 194 +++++++-- test/rubygems/test_gem_requirement.rb | 13 + test/rubygems/test_gem_server.rb | 38 +- test/rubygems/test_gem_silent_ui.rb | 4 +- test/rubygems/test_gem_source_index.rb | 463 +++++++-------------- test/rubygems/test_gem_spec_fetcher.rb | 91 ++-- test/rubygems/test_gem_specification.rb | 437 +++++++++++-------- test/rubygems/test_gem_text.rb | 15 + test/rubygems/test_gem_uninstaller.rb | 66 +-- test/rubygems/test_kernel.rb | 3 +- 45 files changed, 1664 insertions(+), 1286 deletions(-) delete mode 100644 test/rubygems/functional.rb create mode 100644 test/rubygems/test_gem_commands_cleanup_command.rb create mode 100644 test/rubygems/test_gem_commands_help_command.rb create mode 100644 test/rubygems/test_gem_path_support.rb (limited to 'test/rubygems') diff --git a/test/rubygems/functional.rb b/test/rubygems/functional.rb deleted file mode 100644 index 6b7131f9d6..0000000000 --- a/test/rubygems/functional.rb +++ /dev/null @@ -1,98 +0,0 @@ -###################################################################### -# This file is imported from the rubygems project. -# DO NOT make modifications in this repo. They _will_ be reverted! -# File a patch instead and assign it to Ryan Davis or Eric Hodel. -###################################################################### - -require 'rubygems' -require 'minitest/unit' -require 'test/insure_session' -require 'rubygems/format' -require 'rubygems/command_manager' - -class FunctionalTest < MiniTest::Unit::TestCase - - def setup - @gem_path = File.expand_path("bin/gem") - lib_path = File.expand_path("lib") - @ruby_options = "-I#{lib_path} -I." - @verbose = false - end - - def test_gem_help_options - gem_nossl 'help options' - assert_match(/Usage:/, @out, @err) - assert_status - end - - def test_gem_help_commands - gem_nossl 'help commands' - assert_match(/gem install/, @out) - assert_status - end - - def test_gem_no_args_shows_help - gem_nossl - assert_match(/Usage:/, @out) - assert_status 1 - end - - # This test is disabled because of the insanely long time it takes - # to time out. - def xtest_bogus_source_hoses_up_remote_install_but_gem_command_gives_decent_error_message - @ruby_options << " -rtest/bogussources" - gem_nossl "install asdf --remote" - assert_match(/error/im, @err) - assert_status 1 - end - - def test_all_command_helps - mgr = Gem::CommandManager.new - mgr.command_names.each do |cmdname| - gem_nossl "help #{cmdname}" - assert_match(/Usage: gem #{cmdname}/, @out, - "should see help for #{cmdname}") - end - end - - # :section: Help Methods - - # Run a gem command without the SSL library. - def gem_nossl(options="") - old_options = @ruby_options.dup - @ruby_options << " -Itest/fake_certlib" - gem(options) - ensure - @ruby_options = old_options - end - - # Run a gem command with the SSL library. - def gem_withssl(options="") - gem(options) - end - - # Run a gem command for the functional test. - def gem(options="") - shell = Session::Shell.new - options = options + " --config-file missing_file" if options !~ /--config-file/ - command = "#{Gem.ruby} #{@ruby_options} #{@gem_path} #{options}" - puts "\n\nCOMMAND: [#{command}]" if @verbose - @out, @err = shell.execute command - @status = shell.exit_status - puts "STATUS: [#{@status}]" if @verbose - puts "OUTPUT: [#{@out}]" if @verbose - puts "ERROR: [#{@err}]" if @verbose - puts "PWD: [#{Dir.pwd}]" if @verbose - shell.close - end - - private - - def assert_status(expected_status=0) - assert_equal expected_status, @status - end - -end - -MiniTest::Unit.autorun - diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 118066b957..96077117e2 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -29,12 +29,12 @@ class TestGem < Gem::TestCase def assert_activate expected, *specs specs.each do |spec| case spec - when Array - Gem.activate(*spec) - when String - Gem.activate spec + when String then + Gem::Specification.find_by_name(spec).activate + when Gem::Specification then + spec.activate else - Gem.activate spec.name + flunk spec.inspect end end @@ -57,17 +57,21 @@ class TestGem < Gem::TestCase Gem.unresolved_deps.values.map(&:to_s).sort end + # TODO: move these to specification def test_self_activate_via_require - new_spec "a", "1", "b" => "= 1" - new_spec "b", "1", nil, "lib/b/c.rb" - new_spec "b", "2", nil, "lib/b/c.rb" + a1 = new_spec "a", "1", "b" => "= 1" + b1 = new_spec "b", "1", nil, "lib/b/c.rb" + b2 = new_spec "b", "2", nil, "lib/b/c.rb" + + install_specs a1, b1, b2 - Gem.activate "a", "= 1" + a1.activate require "b/c" assert_equal %w(a-1 b-1), loaded_spec_names end + # TODO: move these to specification def test_self_activate_deep_unambiguous a1 = new_spec "a", "1", "b" => "= 1" b1 = new_spec "b", "1", "c" => "= 1" @@ -77,7 +81,7 @@ class TestGem < Gem::TestCase install_specs a1, b1, b2, c1, c2 - Gem.activate "a", "= 1" + a1.activate assert_equal %w(a-1 b-1 c-1), loaded_spec_names end @@ -88,6 +92,7 @@ class TestGem < Gem::TestCase $LOADED_FEATURES.replace old_loaded_features end + # TODO: move these to specification def test_self_activate_ambiguous_direct save_loaded_features do a1 = new_spec "a", "1", "b" => "> 0" @@ -96,9 +101,10 @@ class TestGem < Gem::TestCase c1 = new_spec "c", "1" c2 = new_spec "c", "2" + Gem::Specification.reset install_specs a1, b1, b2, c1, c2 - Gem.activate "a", "= 1" + a1.activate assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -109,6 +115,7 @@ class TestGem < Gem::TestCase end end + # TODO: move these to specification def test_self_activate_ambiguous_indirect save_loaded_features do a1 = new_spec "a", "1", "b" => "> 0" @@ -119,7 +126,7 @@ class TestGem < Gem::TestCase install_specs a1, b1, b2, c1, c2 - Gem.activate "a", "= 1" + a1.activate assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -130,6 +137,7 @@ class TestGem < Gem::TestCase end end + # TODO: move these to specification def test_self_activate_ambiguous_unrelated save_loaded_features do a1 = new_spec "a", "1", "b" => "> 0" @@ -141,7 +149,7 @@ class TestGem < Gem::TestCase install_specs a1, b1, b2, c1, c2, d1 - Gem.activate "a", "= 1" + a1.activate assert_equal %w(a-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -152,6 +160,7 @@ class TestGem < Gem::TestCase end end + # TODO: move these to specification def test_self_activate_ambiguous_indirect_conflict save_loaded_features do a1 = new_spec "a", "1", "b" => "> 0" @@ -163,7 +172,7 @@ class TestGem < Gem::TestCase install_specs a1, a2, b1, b2, c1, c2 - Gem.activate "a", "= 2" + a2.activate assert_equal %w(a-2), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -174,13 +183,14 @@ class TestGem < Gem::TestCase end end + # TODO: move these to specification def test_require_already_activated save_loaded_features do a1 = new_spec "a", "1", nil, "lib/d.rb" install_specs a1 # , a2, b1, b2, c1, c2 - Gem.activate "a", "= 1" + a1.activate assert_equal %w(a-1), loaded_spec_names assert_equal [], unresolved_names @@ -191,6 +201,7 @@ class TestGem < Gem::TestCase end end + # TODO: move these to specification def test_require_already_activated_indirect_conflict save_loaded_features do a1 = new_spec "a", "1", "b" => "> 0" @@ -202,8 +213,8 @@ class TestGem < Gem::TestCase install_specs a1, a2, b1, b2, c1, c2 - Gem.activate "a", "= 1" - Gem.activate "c", "= 1" + a1.activate + c1.activate assert_equal %w(a-1 c-1), loaded_spec_names assert_equal ["b (> 0)"], unresolved_names @@ -222,11 +233,26 @@ class TestGem < Gem::TestCase end end + def test_require_does_not_glob + save_loaded_features do + a1 = new_spec "a", "1", nil, "lib/a1.rb" + + install_specs a1 + + assert_raises ::LoadError do + require "a*" + end + + assert_equal [], loaded_spec_names + end + end + + # TODO: move these to specification def test_self_activate_loaded - util_spec 'foo', '1' + foo = util_spec 'foo', '1' - assert Gem.activate 'foo' - refute Gem.activate 'foo' + assert foo.activate + refute foo.activate end ## @@ -249,15 +275,16 @@ class TestGem < Gem::TestCase # [B] ~> 1.0 # # and should resolve using b-1.0 + # TODO: move these to specification def test_self_activate_over - util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '= 1.0' + a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '= 1.0' util_spec 'b', '1.0' util_spec 'b', '1.1' util_spec 'b', '2.0' util_spec 'c', '1.0', 'b' => '~> 1.0' - Gem.activate "a" + a.activate assert_equal %w[a-1.0 c-1.0], loaded_spec_names assert_equal ["b (>= 1.0, ~> 1.0)"], unresolved_names @@ -412,28 +439,22 @@ class TestGem < Gem::TestCase assert_activate %w[d-1 e-1], e1, "d" end - def test_self_all_load_paths + def test_self_available? 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 #{@a3a.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 + Deprecate.skip_during do + assert(Gem.available?("a")) + assert(Gem.available?("a", "1")) + assert(Gem.available?("a", ">1")) + assert(!Gem.available?("monkeys")) + end 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")) + def test_self_bin_path_no_exec_name + e = assert_raises ArgumentError do + Gem.bin_path 'a' + end + + assert_equal 'you must supply exec_name', e.message end def test_self_bin_path_bin_name @@ -446,16 +467,6 @@ class TestGem < Gem::TestCase assert_equal @abin_path, Gem.bin_path('a', 'abin', '4') end - def test_self_bin_path_name - util_exec_gem - assert_equal @exec_path, Gem.bin_path('a') - end - - def test_self_bin_path_name_version - util_exec_gem - assert_equal @exec_path, Gem.bin_path('a', nil, '4') - end - def test_self_bin_path_nonexistent_binfile quick_spec 'a', '2' do |s| s.executables = ['exec'] @@ -467,14 +478,14 @@ class TestGem < Gem::TestCase def test_self_bin_path_no_bin_file quick_spec 'a', '1' - assert_raises(Gem::Exception) do + assert_raises(ArgumentError) do Gem.bin_path('a', nil, '1') end end def test_self_bin_path_not_found assert_raises(Gem::GemNotFoundException) do - Gem.bin_path('non-existent') + Gem.bin_path('non-existent', 'blah') end end @@ -482,7 +493,6 @@ class TestGem < Gem::TestCase util_exec_gem quick_spec 'a', '10' do |s| s.executables = [] - s.default_executable = nil end # Should not find a-10's non-abin (bug) assert_equal @abin_path, Gem.bin_path('a', 'abin') @@ -507,17 +517,12 @@ class TestGem < Gem::TestCase end def test_self_clear_paths - Gem.dir - Gem.path - searcher = Gem.searcher - source_index = Gem.source_index + assert_match(/gemhome$/, Gem.dir) + assert_match(/gemhome$/, Gem.path.first) Gem.clear_paths - assert_equal nil, Gem.instance_variable_get(:@gem_home) - assert_equal nil, Gem.instance_variable_get(:@gem_path) - refute_equal searcher, Gem.searcher - refute_equal source_index.object_id, Gem.source_index.object_id + assert_nil Gem::Specification.send(:class_variable_get, :@@all) end def test_self_configuration @@ -540,8 +545,6 @@ class TestGem < Gem::TestCase install_gem foo end - Gem.source_index = nil - gem 'foo' expected = File.join @gemhome, 'gems', foo.full_name, 'data', 'foo' @@ -598,7 +601,7 @@ class TestGem < Gem::TestCase Gem.ensure_gem_subdirectories @gemhome - assert File.directory?(Gem.cache_dir(@gemhome)) + assert File.directory? File.join(@gemhome, "cache") end def test_self_ensure_gem_directories_missing_parents @@ -610,7 +613,7 @@ class TestGem < Gem::TestCase Gem.ensure_gem_subdirectories gemdir - assert File.directory?(Gem.cache_dir(gemdir)) + assert File.directory?(util_cache_dir) end unless win_platform? then # only for FS that support write protection @@ -624,7 +627,7 @@ class TestGem < Gem::TestCase Gem.ensure_gem_subdirectories gemdir - refute File.exist?(Gem.cache_dir(gemdir)) + refute File.exist?(util_cache_dir) ensure FileUtils.chmod 0600, gemdir end @@ -641,7 +644,7 @@ class TestGem < Gem::TestCase Gem.ensure_gem_subdirectories gemdir - refute File.exist?(Gem.cache_dir(gemdir)) + refute File.exist? File.join(gemdir, "gems") ensure FileUtils.chmod 0600, parent end @@ -661,30 +664,26 @@ class TestGem < Gem::TestCase end def test_self_find_files - discover_path = File.join 'lib', 'sff', 'discover.rb' cwd = File.expand_path("test/rubygems", @@project_dir) $LOAD_PATH.unshift cwd - foo1 = quick_gem 'sff', '1' do |s| - s.files << discover_path - end - - foo2 = quick_gem 'sff', '2' do |s| - s.files << discover_path - end - - path = File.join 'gems', foo1.full_name, discover_path - write_file(path) { |fp| fp.puts "# #{path}" } + discover_path = File.join 'lib', 'sff', 'discover.rb' - path = File.join 'gems', foo2.full_name, discover_path - write_file(path) { |fp| fp.puts "# #{path}" } + foo1, foo2 = %w(1 2).map { |version| + spec = quick_gem 'sff', version do |s| + s.files << discover_path + end - @fetcher = Gem::FakeFetcher.new - Gem::RemoteFetcher.fetcher = @fetcher + write_file(File.join 'gems', spec.full_name, discover_path) do |fp| + fp.puts "# #{spec.full_name}" + end - Gem.source_index = util_setup_spec_fetcher foo1, foo2 + spec + } + # HACK should be Gem.refresh Gem.searcher = nil + Gem::Specification.reset expected = [ File.expand_path('test/rubygems/sff/discover.rb', @@project_dir), @@ -698,26 +697,11 @@ class TestGem < Gem::TestCase assert_equal cwd, $LOAD_PATH.shift end - def test_self_latest_load_paths - util_make_gems - - expected = [ - File.join(@gemhome, *%W[gems #{@a3a.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_spec 'foo' install_gem foo - Gem.source_index = nil - Gem.activate 'foo' + foo.activate assert_equal true, Gem.loaded_specs.keys.include?('foo') end @@ -738,9 +722,10 @@ class TestGem < Gem::TestCase 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 + Gem.instance_variable_set :@paths, nil + + assert_equal [Gem.default_path, Gem.dir].flatten.uniq, Gem.path ensure Object.const_set :APPLE_GEM_HOME, orig_APPLE_GEM_HOME end @@ -771,7 +756,6 @@ class TestGem < Gem::TestCase end def test_self_path_ENV_PATH - Gem.send :set_paths, nil path_count = Gem.path.size Gem.clear_paths @@ -840,29 +824,20 @@ class TestGem < Gem::TestCase def test_self_refresh util_make_gems - a1_spec = File.join @gemhome, "specifications", @a1.spec_name - - FileUtils.mv a1_spec, @tempdir + a1_spec = @a1.spec_file + moved_path = File.join @tempdir, File.basename(a1_spec) - refute Gem.source_index.gems.include?(@a1.full_name) - - FileUtils.mv File.join(@tempdir, @a1.spec_name), a1_spec + FileUtils.mv a1_spec, moved_path Gem.refresh - assert_includes Gem.source_index.gems, @a1.full_name - assert_equal nil, Gem.instance_variable_get(:@searcher) - end + refute_includes Gem::Specification.all_names, @a1.full_name - def test_self_required_location - util_make_gems + FileUtils.mv moved_path, a1_spec + + Gem.refresh - 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") + assert_includes Gem::Specification.all_names, @a1.full_name end def test_self_ruby_escaping_spaces_in_path @@ -927,19 +902,20 @@ class TestGem < Gem::TestCase util_restore_RUBY_VERSION end - def test_self_searcher - assert_kind_of Gem::GemPathSearcher, Gem.searcher - end - - def test_self_set_paths + def test_self_paths_eq other = File.join @tempdir, 'other' path = [@userhome, other].join File::PATH_SEPARATOR - Gem.send :set_paths, path + + # + # FIXME remove after fixing test_case + # + ENV["GEM_HOME"] = @gemhome + Gem.paths = { "GEM_PATH" => path } assert_equal [@userhome, other, @gemhome], Gem.path end - def test_self_set_paths_nonexistent_home + def test_self_paths_eq_nonexistent_home ENV['GEM_HOME'] = @gemhome Gem.clear_paths @@ -947,19 +923,37 @@ class TestGem < Gem::TestCase ENV['HOME'] = other - Gem.send :set_paths, other + Gem.paths = { "GEM_PATH" => other } assert_equal [other, @gemhome], Gem.path end def test_self_source_index - assert_kind_of Gem::SourceIndex, Gem.source_index + Deprecate.skip_during do + assert_kind_of Gem::SourceIndex, Gem.source_index + end end def test_self_sources assert_equal %w[http://gems.example.com/], Gem.sources end + def test_self_try_activate_missing_dep + a = util_spec 'a', '1.0', 'b' => '>= 1.0' + + a_file = File.join a.gem_dir, 'lib', 'a_file.rb' + + write_file a_file do |io| + io.puts '# a_file.rb' + end + + e = assert_raises Gem::LoadError do + Gem.try_activate 'a_file' + end + + assert_match %r%Could not find b %, e.message + end + def test_ssl_available_eh orig_Gem_ssl_available = Gem.ssl_available? @@ -994,20 +988,6 @@ class TestGem < Gem::TestCase end end - def test_self_cache_dir - util_ensure_gem_dirs - - assert_equal File.join(@gemhome, 'cache'), Gem.cache_dir - assert_equal File.join(@userhome, '.gem', Gem.ruby_engine, Gem::ConfigMap[:ruby_version], 'cache'), Gem.cache_dir(Gem.user_dir) - end - - def test_self_cache_gem - util_ensure_gem_dirs - - assert_equal File.join(@gemhome, 'cache', 'test.gem'), Gem.cache_gem('test.gem') - assert_equal File.join(@userhome, '.gem', Gem.ruby_engine, Gem::ConfigMap[:ruby_version], 'cache', 'test.gem'), Gem.cache_gem('test.gem', Gem.user_dir) - end - if Gem.win_platform? then def test_self_user_home_userprofile skip 'Ruby 1.9 properly handles ~ path expansion' unless '1.9' > RUBY_VERSION @@ -1069,8 +1049,8 @@ class TestGem < Gem::TestCase install_gem foo end - Gem.source_index = nil Gem.searcher = nil + Gem::Specification.reset gem 'foo' @@ -1114,6 +1094,10 @@ class TestGem < Gem::TestCase def util_ensure_gem_dirs Gem.ensure_gem_subdirectories @gemhome + + # + # FIXME what does this solve precisely? -ebh + # @additional.each do |dir| Gem.ensure_gem_subdirectories @gemhome end @@ -1121,7 +1105,6 @@ class TestGem < Gem::TestCase def util_exec_gem spec, _ = quick_spec 'a', '4' do |s| - s.default_executable = 'exec' s.executables = ['exec', 'abin'] end @@ -1164,5 +1147,9 @@ class TestGem < Gem::TestCase Gem::Commands.send :remove_const, :InterruptCommand if Gem::Commands.const_defined? :InterruptCommand end + + def util_cache_dir + File.join Gem.dir, "cache" + end end diff --git a/test/rubygems/test_gem_builder.rb b/test/rubygems/test_gem_builder.rb index f95472f626..5895b5f458 100644 --- a/test/rubygems/test_gem_builder.rb +++ b/test/rubygems/test_gem_builder.rb @@ -6,6 +6,7 @@ require 'rubygems/test_case' require 'rubygems/builder' +require 'rubygems/package' class TestGemBuilder < Gem::TestCase @@ -29,5 +30,21 @@ class TestGemBuilder < Gem::TestCase end end -end + def test_build_specification_result + util_make_gems + + spec = build_gem_and_yield_spec @a1 + + assert_operator @a1, :eql?, spec + end + def build_gem_and_yield_spec(spec) + builder = Gem::Builder.new spec + + spec = Dir.chdir @tempdir do + FileUtils.mkdir 'lib' + File.open('lib/code.rb', 'w') { |f| f << "something" } + Gem::Package.open(File.open(builder.build, 'rb')) { |x| x.metadata } + end + end +end diff --git a/test/rubygems/test_gem_command_manager.rb b/test/rubygems/test_gem_command_manager.rb index 3769c250d5..54b26e1b9e 100644 --- a/test/rubygems/test_gem_command_manager.rb +++ b/test/rubygems/test_gem_command_manager.rb @@ -29,6 +29,7 @@ class TestGemCommandManager < Gem::TestCase end ensure $:.replace old_load_path + Gem::CommandManager.reset end def test_run_crash_command @@ -46,6 +47,7 @@ class TestGemCommandManager < Gem::TestCase end ensure $:.replace old_load_path + @command_manager.unregister_command :crash end def test_process_args_bad_arg diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb index 5c38a1a5e8..d4d7c29b72 100644 --- a/test/rubygems/test_gem_commands_build_command.rb +++ b/test/rubygems/test_gem_commands_build_command.rb @@ -40,10 +40,38 @@ class TestGemCommandsBuildCommand < Gem::TestCase util_test_build_gem @gem, gemspec_file end - def test_execute_bad_gem + def test_execute_bad_spec + @gem.date = "2010-11-08" + + gemspec_file = File.join(@tempdir, @gem.spec_name) + + File.open gemspec_file, 'w' do |gs| + gs.write @gem.to_ruby.sub(/11-08/, "11-8") + end + + @cmd.options[:args] = [gemspec_file] + + out, err = use_ui @ui do + capture_io do + assert_raises Gem::MockGemUi::TermError do + @cmd.execute + end + end + end + + assert_equal "", out + assert_match(/invalid date format in specification/, err) + + assert_equal '', @ui.output + assert_equal "ERROR: Error loading gemspec. Aborting.\n", @ui.error + end + + def test_execute_missing_file @cmd.options[:args] = %w[some_gem] use_ui @ui do - @cmd.execute + assert_raises Gem::MockGemUi::TermError do + @cmd.execute + end end assert_equal '', @ui.output @@ -67,7 +95,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase assert_equal [], output assert_equal '', @ui.error - gem_file = File.join @tempdir, gem.file_name + gem_file = File.join @tempdir, File.basename(gem.cache_file) assert File.exist?(gem_file) spec = Gem::Format.from_file_by_path(gem_file).spec diff --git a/test/rubygems/test_gem_commands_cleanup_command.rb b/test/rubygems/test_gem_commands_cleanup_command.rb new file mode 100644 index 0000000000..14224c4752 --- /dev/null +++ b/test/rubygems/test_gem_commands_cleanup_command.rb @@ -0,0 +1,57 @@ +###################################################################### +# This file is imported from the rubygems project. +# DO NOT make modifications in this repo. They _will_ be reverted! +# File a patch instead and assign it to Ryan Davis or Eric Hodel. +###################################################################### + +require 'rubygems/test_case' +require 'rubygems/commands/cleanup_command' + +class TestGemCommandsCleanupCommand < Gem::TestCase + + def setup + super + + @cmd = Gem::Commands::CleanupCommand.new + + @a_1 = quick_spec 'a', 1 + @a_2 = quick_spec 'a', 2 + + install_gem @a_1 + install_gem @a_2 + end + + def test_execute + @cmd.options[:args] = %w[a] + + @cmd.execute + + refute_path_exists @a_1.gem_dir + end + + def test_execute_all + @b_1 = quick_spec 'b', 1 + @b_2 = quick_spec 'b', 2 + + install_gem @b_1 + install_gem @b_2 + + @cmd.options[:args] = [] + + @cmd.execute + + refute_path_exists @a_1.gem_dir + refute_path_exists @b_1.gem_dir + end + + def test_execute_dry_run + @cmd.options[:args] = %w[a] + @cmd.options[:dryrun] = true + + @cmd.execute + + assert_path_exists @a_1.gem_dir + end + +end + diff --git a/test/rubygems/test_gem_commands_contents_command.rb b/test/rubygems/test_gem_commands_contents_command.rb index 6b9750e861..cf927e73dd 100644 --- a/test/rubygems/test_gem_commands_contents_command.rb +++ b/test/rubygems/test_gem_commands_contents_command.rb @@ -15,11 +15,18 @@ class TestGemCommandsContentsCommand < Gem::TestCase @cmd = Gem::Commands::ContentsCommand.new end + def gem name + spec = quick_gem name do |gem| + gem.files = %W[lib/#{name}.rb Rakefile] + end + write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb]) + write_file File.join(*%W[gems #{spec.full_name} Rakefile]) + end + def test_execute @cmd.options[:args] = %w[foo] - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end + + gem 'foo' use_ui @ui do @cmd.execute @@ -33,13 +40,8 @@ class TestGemCommandsContentsCommand < Gem::TestCase def test_execute_all @cmd.options[:all] = true - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end - - quick_gem 'bar' do |gem| - gem.files = %w[lib/bar.rb Rakefile] - end + gem 'foo' + gem 'bar' use_ui @ui do @cmd.execute @@ -67,13 +69,8 @@ class TestGemCommandsContentsCommand < Gem::TestCase def test_execute_exact_match @cmd.options[:args] = %w[foo] - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end - - quick_gem 'foo_bar' do |gem| - gem.files = %w[lib/foo_bar.rb Rakefile] - end + gem 'foo' + gem 'bar' use_ui @ui do @cmd.execute @@ -88,9 +85,7 @@ class TestGemCommandsContentsCommand < Gem::TestCase @cmd.options[:args] = %w[foo] @cmd.options[:lib_only] = true - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end + gem 'foo' use_ui @ui do @cmd.execute @@ -104,13 +99,9 @@ class TestGemCommandsContentsCommand < Gem::TestCase def test_execute_multiple @cmd.options[:args] = %w[foo bar] - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end - quick_gem 'bar' do |gem| - gem.files = %w[lib/bar.rb Rakefile] - end + gem 'foo' + gem 'bar' use_ui @ui do @cmd.execute @@ -126,17 +117,15 @@ class TestGemCommandsContentsCommand < Gem::TestCase @cmd.options[:args] = %w[foo] @cmd.options[:prefix] = false - quick_gem 'foo' do |gem| - gem.files = %w[lib/foo.rb Rakefile] - end + gem 'foo' use_ui @ui do @cmd.execute end expected = <<-EOF -lib/foo.rb Rakefile +lib/foo.rb EOF assert_equal expected, @ui.output diff --git a/test/rubygems/test_gem_commands_dependency_command.rb b/test/rubygems/test_gem_commands_dependency_command.rb index 665cd98c4d..d3f2b68640 100644 --- a/test/rubygems/test_gem_commands_dependency_command.rb +++ b/test/rubygems/test_gem_commands_dependency_command.rb @@ -24,8 +24,6 @@ class TestGemCommandsDependencyCommand < Gem::TestCase gem.add_dependency 'baz', '> 1' end - Gem.source_index = nil - @cmd.options[:args] = %w[foo] use_ui @ui do @@ -38,8 +36,6 @@ class TestGemCommandsDependencyCommand < Gem::TestCase end def test_execute_no_args - Gem.source_index = nil - @cmd.options[:args] = [] use_ui @ui do @@ -99,8 +95,6 @@ Gem pl-1-x86-linux end def test_execute_regexp - Gem.source_index = nil - @cmd.options[:args] = %w[/[ab]/] use_ui @ui do @@ -136,8 +130,6 @@ Gem b-2 gem.add_dependency 'foo' end - Gem.source_index = nil - @cmd.options[:args] = %w[foo] @cmd.options[:reverse_dependencies] = true @@ -199,14 +191,31 @@ ERROR: Only reverse dependencies for local gems are supported. assert_equal '', @ui.error end + def test_execute_remote_version + @fetcher = Gem::FakeFetcher.new + Gem::RemoteFetcher.fetcher = @fetcher + + util_setup_spec_fetcher @a1, @a2 + + @cmd.options[:args] = %w[a] + @cmd.options[:domain] = :remote + @cmd.options[:version] = req '= 1' + + use_ui @ui do + @cmd.execute + end + + assert_equal "Gem a-1\n\n", @ui.output + assert_equal '', @ui.error + end + def test_execute_prerelease @fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @fetcher + util_clear_gems util_setup_spec_fetcher @a2_pre - FileUtils.rm File.join(@gemhome, 'specifications', @a2_pre.spec_name) - @cmd.options[:args] = %w[a] @cmd.options[:domain] = :remote @cmd.options[:prerelease] = true diff --git a/test/rubygems/test_gem_commands_fetch_command.rb b/test/rubygems/test_gem_commands_fetch_command.rb index 173a33572f..926e9e97e0 100644 --- a/test/rubygems/test_gem_commands_fetch_command.rb +++ b/test/rubygems/test_gem_commands_fetch_command.rb @@ -22,7 +22,7 @@ class TestGemCommandsFetchCommand < Gem::TestCase util_setup_spec_fetcher @a2 @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - File.read(Gem.cache_gem(@a2.file_name, @gemhome)) + File.read(@a2.cache_file) @cmd.options[:args] = [@a2.name] @@ -38,12 +38,13 @@ class TestGemCommandsFetchCommand < Gem::TestCase def test_execute_prerelease util_setup_fake_fetcher true + util_clear_gems util_setup_spec_fetcher @a2, @a2_pre @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - File.read(Gem.cache_gem(@a2.file_name, @gemhome)) + File.read(@a2.cache_file) @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = - File.read(Gem.cache_gem(@a2_pre.file_name, @gemhome)) + File.read(@a2_pre.cache_file) @cmd.options[:args] = [@a2.name] @cmd.options[:prerelease] = true @@ -63,7 +64,7 @@ class TestGemCommandsFetchCommand < Gem::TestCase util_setup_spec_fetcher @a1, @a2 @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = - File.read(Gem.cache_gem(@a1.file_name, @gemhome)) + File.read(@a1.cache_file) @cmd.options[:args] = [@a2.name] @cmd.options[:version] = Gem::Requirement.new '1' diff --git a/test/rubygems/test_gem_commands_help_command.rb b/test/rubygems/test_gem_commands_help_command.rb new file mode 100644 index 0000000000..acfc2daefc --- /dev/null +++ b/test/rubygems/test_gem_commands_help_command.rb @@ -0,0 +1,64 @@ +###################################################################### +# This file is imported from the rubygems project. +# DO NOT make modifications in this repo. They _will_ be reverted! +# File a patch instead and assign it to Ryan Davis or Eric Hodel. +###################################################################### + +require "rubygems" +require "rubygems/test_case" +require "rubygems/commands/help_command" +require "rubygems/format" +require "rubygems/command_manager" + +class TestGemCommandsHelpCommand < Gem::TestCase + def setup + super + + @cmd = Gem::Commands::HelpCommand.new + end + + def test_gem_help_bad + util_gem 'bad' do |out, err| + assert_equal('', out) + assert_match(/Unknown command bad. Try gem help commands\n/, err) + end + end + + def test_gem_help_platforms + util_gem 'platforms' do |out, err| + assert_match(/x86-freebsd/, out) + assert_equal '', err + end + end + + def test_gem_help_commands + mgr = Gem::CommandManager.new + + util_gem 'commands' do |out, err| + mgr.command_names.each do |cmd| + assert_match(/\s+#{cmd}\s+\S+/, out) + end + assert_equal '', err + end + end + + def test_gem_no_args_shows_help + util_gem do |out, err| + assert_match(/Usage:/, out) + assert_match(/gem install/, out) + assert_equal '', err + end + end + + def util_gem *args + @cmd.options[:args] = args + + use_ui @ui do + Dir.chdir @tempdir do + @cmd.execute + end + end + + yield @ui.output, @ui.error + end +end diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb index adc66aa911..522731b60e 100644 --- a/test/rubygems/test_gem_commands_install_command.rb +++ b/test/rubygems/test_gem_commands_install_command.rb @@ -24,13 +24,13 @@ class TestGemCommandsInstallCommand < Gem::TestCase end def test_execute_exclude_prerelease - util_setup_fake_fetcher(:prerelease) - util_setup_spec_fetcher @a2, @a2_pre + util_setup_fake_fetcher :prerelease + util_setup_spec_fetcher @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - read_binary(Gem.cache_gem(@a2.file_name, @gemhome)) + read_binary(@a2.cache_file) @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = - read_binary(Gem.cache_gem(@a2_pre.file_name, @gemhome)) + read_binary(@a2_pre.cache_file) @cmd.options[:args] = [@a2.name] @@ -46,13 +46,13 @@ class TestGemCommandsInstallCommand < Gem::TestCase end def test_execute_explicit_version_includes_prerelease - util_setup_fake_fetcher(:prerelease) - util_setup_spec_fetcher @a2, @a2_pre + util_setup_fake_fetcher :prerelease + util_setup_spec_fetcher @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - read_binary(Gem.cache_gem(@a2.file_name, @gemhome)) + read_binary(@a2.cache_file) @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = - read_binary(Gem.cache_gem(@a2_pre.file_name, @gemhome)) + read_binary(@a2_pre.cache_file) @cmd.handle_options [@a2_pre.name, '--version', @a2_pre.version.to_s, "--no-ri", "--no-rdoc"] @@ -92,7 +92,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase util_setup_fake_fetcher @cmd.options[:domain] = :local - FileUtils.mv Gem.cache_gem(@a2.file_name, @gemhome), @tempdir + FileUtils.mv @a2.cache_file, @tempdir @cmd.options[:args] = [@a2.name] @@ -121,15 +121,15 @@ class TestGemCommandsInstallCommand < Gem::TestCase util_setup_fake_fetcher @cmd.options[:user_install] = false - FileUtils.mv Gem.cache_gem(@a2.file_name, @gemhome), @tempdir + FileUtils.mv @a2.cache_file, @tempdir @cmd.options[:args] = [@a2.name] use_ui @ui do orig_dir = Dir.pwd begin - File.chmod 0755, @userhome - File.chmod 0555, @gemhome + FileUtils.chmod 0755, @userhome + FileUtils.chmod 0555, @gemhome Dir.chdir @tempdir assert_raises Gem::FilePermissionError do @@ -137,7 +137,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase end ensure Dir.chdir orig_dir - File.chmod 0755, @gemhome + FileUtils.chmod 0755, @gemhome end end end @@ -208,13 +208,14 @@ ERROR: Possible alternatives: non_existent_with_hint end def test_execute_prerelease - util_setup_fake_fetcher(:prerelease) + util_setup_fake_fetcher :prerelease + util_clear_gems util_setup_spec_fetcher @a2, @a2_pre @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - read_binary(Gem.cache_gem(@a2.file_name, @gemhome)) + read_binary(@a2.cache_file) @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = - read_binary(Gem.cache_gem(@a2_pre.file_name, @gemhome)) + read_binary(@a2_pre.cache_file) @cmd.options[:prerelease] = true @cmd.options[:args] = [@a2_pre.name] @@ -235,10 +236,10 @@ ERROR: Possible alternatives: non_existent_with_hint @cmd.options[:generate_ri] = true util_setup_fake_fetcher - util_setup_spec_fetcher @a2 + util_setup_spec_fetcher @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = - read_binary(Gem.cache_gem(@a2.file_name, @gemhome)) + read_binary(@a2.cache_file) @cmd.options[:args] = [@a2.name] @@ -265,9 +266,9 @@ ERROR: Possible alternatives: non_existent_with_hint util_setup_fake_fetcher @cmd.options[:domain] = :local - FileUtils.mv Gem.cache_gem(@a2.file_name, @gemhome), @tempdir + FileUtils.mv @a2.cache_file, @tempdir - FileUtils.mv Gem.cache_gem(@b2.file_name, @gemhome), @tempdir + FileUtils.mv @b2.cache_file, @tempdir @cmd.options[:args] = [@a2.name, @b2.name] @@ -293,10 +294,10 @@ ERROR: Possible alternatives: non_existent_with_hint def test_execute_conservative util_setup_fake_fetcher - util_setup_spec_fetcher @b2 + util_setup_spec_fetcher @fetcher.data["#{@gem_repo}gems/#{@b2.file_name}"] = - read_binary(Gem.cache_gem(@b2.file_name, @gemhome)) + read_binary(@b2.cache_file) uninstall_gem(@b2) @@ -308,16 +309,16 @@ ERROR: Possible alternatives: non_existent_with_hint orig_dir = Dir.pwd begin Dir.chdir @tempdir - e = assert_raises Gem::SystemExitException do + assert_raises Gem::SystemExitException do @cmd.execute end - assert_equal 0, e.exit_code ensure Dir.chdir orig_dir end end out = @ui.output.split "\n" + assert_equal "", @ui.error assert_equal "Successfully installed #{@b2.full_name}", out.shift assert_equal "1 gem installed", out.shift assert out.empty?, out.inspect diff --git a/test/rubygems/test_gem_commands_list_command.rb b/test/rubygems/test_gem_commands_list_command.rb index 9a56ebc779..1339737391 100644 --- a/test/rubygems/test_gem_commands_list_command.rb +++ b/test/rubygems/test_gem_commands_list_command.rb @@ -26,16 +26,13 @@ class TestGemCommandsListCommand < Gem::TestCase def test_execute_installed @cmd.handle_options %w[c --installed] - e = assert_raises Gem::SystemExitException do + assert_raises Gem::MockGemUi::SystemExitException do use_ui @ui do @cmd.execute end end - assert_equal 0, e.exit_code - assert_equal "true\n", @ui.output - assert_equal '', @ui.error end diff --git a/test/rubygems/test_gem_commands_outdated_command.rb b/test/rubygems/test_gem_commands_outdated_command.rb index 632e9a5548..ae15efee70 100644 --- a/test/rubygems/test_gem_commands_outdated_command.rb +++ b/test/rubygems/test_gem_commands_outdated_command.rb @@ -20,24 +20,25 @@ class TestGemCommandsOutdatedCommand < Gem::TestCase end def test_execute - quick_gem 'foo', '0.1' - quick_gem 'foo', '0.2' remote_10 = quick_spec 'foo', '1.0' remote_20 = quick_spec 'foo', '2.0' - remote_spec_file = File.join @gemhome, 'specifications', remote_10.spec_name - remote_spec_file = File.join @gemhome, 'specifications', remote_20.spec_name - - @fetcher = Gem::FakeFetcher.new - Gem::RemoteFetcher.fetcher = @fetcher + Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new + util_clear_gems util_setup_spec_fetcher remote_10, remote_20 - use_ui @ui do @cmd.execute end + quick_gem 'foo', '0.1' + quick_gem 'foo', '0.2' + + Gem::Specification.reset + + use_ui @ui do + @cmd.execute + end assert_equal "foo (0.2 < 2.0)\n", @ui.output assert_equal "", @ui.error end - end diff --git a/test/rubygems/test_gem_commands_pristine_command.rb b/test/rubygems/test_gem_commands_pristine_command.rb index 4decdf81b9..aa1f3bf7a6 100644 --- a/test/rubygems/test_gem_commands_pristine_command.rb +++ b/test/rubygems/test_gem_commands_pristine_command.rb @@ -16,8 +16,8 @@ class TestGemCommandsPristineCommand < Gem::TestCase def test_execute a = quick_spec 'a' do |s| s.executables = %w[foo] end - FileUtils.mkdir_p File.join(@tempdir, 'bin') - File.open File.join(@tempdir, 'bin', 'foo'), 'w' do |fp| + + write_file File.join(@tempdir, 'bin', 'foo') do |fp| fp.puts "#!/usr/bin/ruby" end @@ -25,7 +25,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase foo_path = File.join @gemhome, 'gems', a.full_name, 'bin', 'foo' - File.open foo_path, 'w' do |io| + write_file foo_path do |io| io.puts 'I changed it!' end @@ -39,15 +39,14 @@ class TestGemCommandsPristineCommand < Gem::TestCase out = @ui.output.split "\n" - assert_equal "Restoring gem(s) to pristine condition...", out.shift + assert_equal "Restoring gems to pristine condition...", out.shift assert_equal "Restored #{a.full_name}", out.shift assert_empty out, out.inspect end def test_execute_all a = quick_spec 'a' do |s| s.executables = %w[foo] end - FileUtils.mkdir_p File.join(@tempdir, 'bin') - File.open File.join(@tempdir, 'bin', 'foo'), 'w' do |fp| + write_file File.join(@tempdir, 'bin', 'foo') do |fp| fp.puts "#!/usr/bin/ruby" end @@ -67,35 +66,106 @@ class TestGemCommandsPristineCommand < Gem::TestCase out = @ui.output.split "\n" - assert_equal "Restoring gem(s) to pristine condition...", out.shift + assert_equal "Restoring gems to pristine condition...", out.shift assert_equal "Restored #{a.full_name}", out.shift assert_empty out, out.inspect end - def test_execute_missing_cache_gem - a = quick_spec 'a' do |s| - s.executables = %w[foo] + def test_execute_no_exetension + a = quick_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end + + ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb' + write_file ext_path do |io| + io.write '# extconf.rb' end - FileUtils.mkdir_p File.join(@tempdir, 'bin') + util_build_gem a - File.open File.join(@tempdir, 'bin', 'foo'), 'w' do |fp| - fp.puts "#!/usr/bin/ruby" + @cmd.options[:args] = %w[a] + @cmd.options[:extensions] = false + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + + assert_equal 'Restoring gems to pristine condition...', out.shift + assert_equal "Skipped #{a.full_name}, it needs to compile an extension", + out.shift + assert_empty out, out.inspect + end + + def test_execute_many + a = quick_spec 'a' + b = quick_spec 'b' + + install_gem a + install_gem b + + @cmd.options[:args] = %w[a b] + + use_ui @ui do + @cmd.execute end + out = @ui.output.split "\n" + + assert_equal "Restoring gems to pristine condition...", out.shift + assert_equal "Restored #{a.full_name}", out.shift + assert_equal "Restored #{b.full_name}", out.shift + assert_empty out, out.inspect + end + + def test_execute_many_multi_repo + a = quick_spec 'a' install_gem a - a_data = nil - open File.join(@gemhome, 'cache', a.file_name), 'rb' do |fp| - a_data = fp.read + Gem.clear_paths + gemhome2 = File.join @tempdir, 'gemhome2' + Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 } + + b = quick_spec 'b' + install_gem b + + @cmd.options[:args] = %w[a b] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + + assert_equal "Restoring gems to pristine condition...", out.shift + assert_equal "Restored #{a.full_name}", out.shift + assert_equal "Restored #{b.full_name}", out.shift + assert_empty out, out.inspect + + assert_path_exists File.join(@gemhome, "gems", 'a-2') + refute_path_exists File.join(gemhome2, "gems", 'a-2') + assert_path_exists File.join(gemhome2, "gems", 'b-2') + refute_path_exists File.join(@gemhome, "gems", 'b-2') + end + + def test_execute_missing_cache_gem + a_2 = quick_spec 'a', 2 + a_3 = quick_spec 'a', 3 + + install_gem a_2 + install_gem a_3 + + a_2_data = nil + open File.join(@gemhome, 'cache', a_2.file_name), 'rb' do |fp| + a_2_data = fp.read end util_setup_fake_fetcher - util_setup_spec_fetcher a + util_setup_spec_fetcher a_2 - Gem::RemoteFetcher.fetcher.data["http://gems.example.com/gems/#{a.file_name}"] = a_data + url = "http://gems.example.com/gems/#{a_2.file_name}" + Gem::RemoteFetcher.fetcher.data[url] = a_2_data - FileUtils.rm Gem.cache_gem(a.file_name, @gemhome) + FileUtils.rm a_2.cache_file @cmd.options[:args] = %w[a] @@ -106,11 +176,12 @@ class TestGemCommandsPristineCommand < Gem::TestCase out = @ui.output.split "\n" [ - "Restoring gem\(s\) to pristine condition...", + "Restoring gems to pristine condition...", "Restored a-1", "Cached gem for a-2 not found, attempting to fetch...", "Restored a-2", - "Restored a-3.a" + "Restored a-3.a", + "Restored a-3", ].each do |line| assert_equal line, out.shift end @@ -127,7 +198,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase end end - assert_match %r|specify a gem name|, e.message + assert_match %r|at least one gem name|, e.message end end diff --git a/test/rubygems/test_gem_commands_push_command.rb b/test/rubygems/test_gem_commands_push_command.rb index 917407dc32..7aa7109c45 100644 --- a/test/rubygems/test_gem_commands_push_command.rb +++ b/test/rubygems/test_gem_commands_push_command.rb @@ -21,7 +21,7 @@ class TestGemCommandsPushCommand < Gem::TestCase super @gems_dir = File.join @tempdir, 'gems' - @cache_dir = Gem.cache_dir @gemhome + @cache_dir = File.join @gemhome, "cache" FileUtils.mkdir @gems_dir diff --git a/test/rubygems/test_gem_commands_query_command.rb b/test/rubygems/test_gem_commands_query_command.rb index 91868b848b..4f06968344 100644 --- a/test/rubygems/test_gem_commands_query_command.rb +++ b/test/rubygems/test_gem_commands_query_command.rb @@ -15,8 +15,8 @@ class TestGemCommandsQueryCommand < Gem::TestCase @cmd = Gem::Commands::QueryCommand.new util_setup_fake_fetcher - - @si = util_setup_spec_fetcher @a1, @a2, @pl1, @a3a + util_clear_gems + util_setup_spec_fetcher @a1, @a2, @pl1, @a3a @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do raise Gem::RemoteFetcher::FetchError @@ -48,7 +48,8 @@ pl (1 i386-linux) @a1.platform = 'x86-linux' @a2.platform = 'universal-darwin' - @si = util_setup_spec_fetcher @a1, @a1r, @a2, @b2, @pl1 + util_clear_gems + util_setup_spec_fetcher @a1, @a1r, @a2, @b2, @pl1 @cmd.handle_options %w[-r -a] @@ -113,7 +114,8 @@ pl (1 i386-linux) @a2.homepage = 'http://a.example.com/' @a2.rubyforge_project = 'rubygems' - @si = util_setup_spec_fetcher @a1, @a2, @pl1 + util_clear_gems + util_setup_spec_fetcher @a1, @a2, @pl1 @cmd.handle_options %w[-r -d] @@ -154,7 +156,8 @@ pl (1) @a2.rubyforge_project = 'rubygems' @a2.platform = 'universal-darwin' - @si = util_setup_spec_fetcher @a1, @a2, @pl1 + util_clear_gems + util_setup_spec_fetcher @a1, @a2, @pl1 @cmd.handle_options %w[-r -d] @@ -190,25 +193,22 @@ pl (1) end def test_execute_installed - @cmd.handle_options %w[-n c --installed] + @cmd.handle_options %w[-n a --installed] - e = assert_raises Gem::SystemExitException do + assert_raises Gem::MockGemUi::SystemExitException do use_ui @ui do @cmd.execute end end - assert_equal 0, e.exit_code - assert_equal "true\n", @ui.output - assert_equal '', @ui.error end def test_execute_installed_no_name @cmd.handle_options %w[--installed] - e = assert_raises Gem::SystemExitException do + e = assert_raises Gem::MockGemUi::TermError do use_ui @ui do @cmd.execute end @@ -223,7 +223,7 @@ pl (1) def test_execute_installed_not_installed @cmd.handle_options %w[-n not_installed --installed] - e = assert_raises Gem::SystemExitException do + e = assert_raises Gem::MockGemUi::TermError do use_ui @ui do @cmd.execute end @@ -236,9 +236,9 @@ pl (1) end def test_execute_installed_version - @cmd.handle_options %w[-n c --installed --version 1.2] + @cmd.handle_options %w[-n a --installed --version 2] - e = assert_raises Gem::SystemExitException do + assert_raises Gem::MockGemUi::SystemExitException do use_ui @ui do @cmd.execute end @@ -246,14 +246,12 @@ pl (1) assert_equal "true\n", @ui.output assert_equal '', @ui.error - - assert_equal 0, e.exit_code end def test_execute_installed_version_not_installed @cmd.handle_options %w[-n c --installed --version 2] - e = assert_raises Gem::SystemExitException do + e = assert_raises Gem::MockGemUi::TermError do use_ui @ui do @cmd.execute end @@ -265,65 +263,6 @@ pl (1) assert_equal 1, e.exit_code end - def test_execute_local_details - @a3a.summary = 'This is a lot of text. ' * 4 - @a3a.authors = ['Abraham Lincoln', 'Hirohito'] - @a3a.homepage = 'http://a.example.com/' - @a3a.rubyforge_project = 'rubygems' - - @cmd.handle_options %w[--local --details] - - use_ui @ui do - @cmd.execute - end - - expected = <<-EOF - -*** LOCAL GEMS *** - -a (3.a, 2, 1) - Author: A User - Homepage: http://example.com - Installed at (3.a): #{@gemhome} - (2): #{@gemhome} - (1): #{@gemhome} - - this is a summary - -a_evil (9) - Author: A User - Homepage: http://example.com - Installed at: #{@gemhome} - - this is a summary - -b (2) - Author: A User - Homepage: http://example.com - Installed at: #{@gemhome} - - this is a summary - -c (1.2) - Author: A User - Homepage: http://example.com - Installed at: #{@gemhome} - - this is a summary - -pl (1) - Platform: i386-linux - Author: A User - Homepage: http://example.com - Installed at: #{@gemhome} - - this is a summary - EOF - - assert_equal expected, @ui.output - assert_equal '', @ui.error - end - def test_execute_local_notty @cmd.handle_options %w[] @@ -335,9 +274,6 @@ pl (1) expected = <<-EOF a (3.a, 2, 1) -a_evil (9) -b (2) -c (1.2) pl (1 i386-linux) EOF @@ -412,9 +348,6 @@ a (3.a) *** LOCAL GEMS *** a (3.a, 2, 1) -a_evil (9) -b (2) -c (1.2) pl (1 i386-linux) EOF diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb index 40449bec22..7dea7971d2 100644 --- a/test/rubygems/test_gem_commands_sources_command.rb +++ b/test/rubygems/test_gem_commands_sources_command.rb @@ -42,12 +42,11 @@ class TestGemCommandsSourcesCommand < Gem::TestCase def test_execute_add util_setup_fake_fetcher - si = Gem::SourceIndex.new - si.add_spec @a1 + install_specs @a1 - specs = si.map do |_, spec| + specs = Gem::Specification.map { |spec| [spec.name, spec.version, spec.original_platform] - end + } specs_dump_gz = StringIO.new Zlib::GzipWriter.wrap specs_dump_gz do |io| @@ -187,18 +186,18 @@ beta-gems.example.com is not a URI @cmd.handle_options %w[--update] util_setup_fake_fetcher - source_index = util_setup_spec_fetcher @a1 + util_setup_spec_fetcher @a1 - specs = source_index.map do |name, spec| + specs = Gem::Specification.map { |spec| [spec.name, spec.version, spec.original_platform] - end + } @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] = util_gzip Marshal.dump(specs) - latest_specs = source_index.latest_specs.map do |spec| + latest_specs = Gem::Specification.latest_specs.map { |spec| [spec.name, spec.version, spec.original_platform] - end + } @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = util_gzip Marshal.dump(latest_specs) diff --git a/test/rubygems/test_gem_commands_specification_command.rb b/test/rubygems/test_gem_commands_specification_command.rb index 767992f240..512b9f50cf 100644 --- a/test/rubygems/test_gem_commands_specification_command.rb +++ b/test/rubygems/test_gem_commands_specification_command.rb @@ -17,7 +17,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase def test_execute foo = quick_spec 'foo' - Gem.source_index.add_spec foo + + install_specs foo @cmd.options[:args] = %w[foo] @@ -77,8 +78,9 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase end def test_execute_field - foo = quick_spec 'foo' - Gem.source_index.add_spec foo + foo = new_spec 'foo', '2' + + install_specs foo @cmd.options[:args] = %w[foo name] @@ -90,8 +92,9 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase end def test_execute_marshal - foo = quick_spec 'foo' - Gem.source_index.add_spec foo + foo = new_spec 'foo', '2' + + install_specs foo @cmd.options[:args] = %w[foo] @cmd.options[:format] = :marshal @@ -127,7 +130,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase def test_execute_ruby foo = quick_spec 'foo' - Gem.source_index.add_spec foo + + install_specs foo @cmd.options[:args] = %w[foo] @cmd.options[:format] = :ruby diff --git a/test/rubygems/test_gem_commands_stale_command.rb b/test/rubygems/test_gem_commands_stale_command.rb index d5aad6ce0c..05cc9d234b 100644 --- a/test/rubygems/test_gem_commands_stale_command.rb +++ b/test/rubygems/test_gem_commands_stale_command.rb @@ -25,12 +25,12 @@ class TestGemCommandsStaleCommand < Gem::TestCase end files.each do |file| - filename = bar_baz.full_gem_path + "/#{file}" - FileUtils.mkdir_p(File.dirname(filename)) + filename = File.join(bar_baz.full_gem_path, file) + FileUtils.mkdir_p File.dirname filename FileUtils.touch(filename, :mtime => Time.now) - filename = foo_bar.full_gem_path + "/#{file}" - FileUtils.mkdir_p(File.dirname(filename)) + filename = File.join(foo_bar.full_gem_path, file) + FileUtils.mkdir_p File.dirname filename FileUtils.touch(filename, :mtime => Time.now - 86400) end diff --git a/test/rubygems/test_gem_commands_unpack_command.rb b/test/rubygems/test_gem_commands_unpack_command.rb index 8764a4017b..3f072277f1 100644 --- a/test/rubygems/test_gem_commands_unpack_command.rb +++ b/test/rubygems/test_gem_commands_unpack_command.rb @@ -21,20 +21,20 @@ class TestGemCommandsUnpackCommand < Gem::TestCase util_make_gems assert_equal( - @cmd.find_in_cache(@a1.file_name), - Gem.cache_gem(@a1.file_name, @gemhome), + @cmd.find_in_cache(File.basename @a1.cache_file), + @a1.cache_file, 'found a-1.gem in the cache' ) end def test_get_path - util_make_gems util_setup_fake_fetcher + util_clear_gems util_setup_spec_fetcher @a1 a1_data = nil - open Gem.cache_gem(@a1.file_name, @gemhome), 'rb' do |fp| + open @a1.cache_file, 'rb' do |fp| a1_data = fp.read end @@ -44,15 +44,15 @@ class TestGemCommandsUnpackCommand < Gem::TestCase dep = Gem::Dependency.new(@a1.name, @a1.version) assert_equal( @cmd.get_path(dep), - Gem.cache_gem(@a1.file_name, @gemhome), + @a1.cache_file, 'fetches a-1 and returns the cache path' ) - FileUtils.rm Gem.cache_gem(@a1.file_name, @gemhome) + FileUtils.rm @a1.cache_file assert_equal( @cmd.get_path(dep), - Gem.cache_gem(@a1.file_name, @gemhome), + @a1.cache_file, 'when removed from cache, refetches a-1' ) end @@ -73,16 +73,14 @@ class TestGemCommandsUnpackCommand < Gem::TestCase end def test_execute_gem_path - util_make_gems - util_setup_spec_fetcher util_setup_fake_fetcher + util_setup_spec_fetcher Gem.clear_paths gemhome2 = File.join @tempdir, 'gemhome2' - Gem.send :set_paths, [gemhome2, @gemhome].join(File::PATH_SEPARATOR) - Gem.send :set_home, gemhome2 + Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 } @cmd.options[:args] = %w[a] @@ -96,15 +94,14 @@ class TestGemCommandsUnpackCommand < Gem::TestCase end def test_execute_gem_path_missing - util_make_gems + util_setup_fake_fetcher util_setup_spec_fetcher Gem.clear_paths gemhome2 = File.join @tempdir, 'gemhome2' - Gem.send :set_paths, [gemhome2, @gemhome].join(File::PATH_SEPARATOR) - Gem.send :set_home, gemhome2 + Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 } @cmd.options[:args] = %w[z] @@ -123,7 +120,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase util_clear_gems a2_data = nil - open Gem.cache_gem(@a2.file_name, @gemhome), 'rb' do |fp| + open @a2.cache_file, 'rb' do |fp| a2_data = fp.read end @@ -142,10 +139,28 @@ class TestGemCommandsUnpackCommand < Gem::TestCase assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be unpacked' end + def test_execute_spec + util_make_gems + + @cmd.options[:args] = %w[a b] + @cmd.options[:spec] = true + + use_ui @ui do + Dir.chdir @tempdir do + @cmd.execute + end + end + + assert File.exist?(File.join(@tempdir, 'a-3.a.gemspec')) + assert File.exist?(File.join(@tempdir, 'b-2.gemspec')) + end + def test_execute_sudo + skip 'Cannot perform this test on windows (chmod)' if win_platform? + util_make_gems - File.chmod 0555, @gemhome + FileUtils.chmod 0555, @gemhome @cmd.options[:args] = %w[b] @@ -157,7 +172,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked' ensure - File.chmod 0755, @gemhome + FileUtils.chmod 0755, @gemhome end def test_execute_with_target_option @@ -203,5 +218,13 @@ class TestGemCommandsUnpackCommand < Gem::TestCase assert File.exist?(File.join(@tempdir, foo_spec.full_name)) end + def test_handle_options_metadata + refute @cmd.options[:spec] + + @cmd.send :handle_options, %w[--spec a] + + assert @cmd.options[:spec] + end + end diff --git a/test/rubygems/test_gem_commands_update_command.rb b/test/rubygems/test_gem_commands_update_command.rb index 24966a3a84..b43be11843 100644 --- a/test/rubygems/test_gem_commands_update_command.rb +++ b/test/rubygems/test_gem_commands_update_command.rb @@ -24,15 +24,15 @@ class TestGemCommandsUpdateCommand < Gem::TestCase @cmd.options[:generate_ri] = false util_setup_fake_fetcher - - @a1_path = Gem.cache_gem(@a1.file_name, @gemhome) - @a2_path = Gem.cache_gem(@a2.file_name, @gemhome) - + util_clear_gems util_setup_spec_fetcher @a1, @a2 - @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = + @a1_path = @a1.cache_file + @a2_path = @a2.cache_file + + @fetcher.data["#{@gem_repo}gems/#{File.basename @a1_path}"] = read_binary @a1_path - @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + @fetcher.data["#{@gem_repo}gems/#{File.basename @a2_path}"] = read_binary @a2_path end @@ -81,18 +81,19 @@ class TestGemCommandsUpdateCommand < Gem::TestCase def util_add_to_fetcher *specs specs.each do |spec| - gem_file = Gem.cache_gem(spec.file_name, @gemhome) + gem_file = spec.cache_file + file_name = File.basename gem_file - @fetcher.data["http://gems.example.com/gems/#{spec.file_name}"] = + @fetcher.data["http://gems.example.com/gems/#{file_name}"] = Gem.read_binary gem_file end end def test_execute_system + util_clear_gems util_setup_rubygem9 util_setup_spec_fetcher @rubygem9 util_add_to_fetcher @rubygem9 - util_clear_gems @cmd.options[:args] = [] @cmd.options[:system] = true @@ -113,17 +114,17 @@ class TestGemCommandsUpdateCommand < Gem::TestCase end def test_execute_system_at_latest + util_clear_gems util_setup_rubygem_current util_setup_spec_fetcher @rubygem_current util_add_to_fetcher @rubygem_current - util_clear_gems @cmd.options[:args] = [] @cmd.options[:system] = true @cmd.options[:generate_rdoc] = false @cmd.options[:generate_ri] = false - assert_raises Gem::SystemExitException do + assert_raises Gem::MockGemUi::SystemExitException do use_ui @ui do @cmd.execute end @@ -135,11 +136,11 @@ class TestGemCommandsUpdateCommand < Gem::TestCase end def test_execute_system_multiple + util_clear_gems util_setup_rubygem9 util_setup_rubygem8 util_setup_spec_fetcher @rubygem8, @rubygem9 util_add_to_fetcher @rubygem8, @rubygem9 - util_clear_gems @cmd.options[:args] = [] @cmd.options[:system] = true @@ -184,6 +185,31 @@ class TestGemCommandsUpdateCommand < Gem::TestCase assert_empty out end + def test_execute_system_specifically_to_latest_version + util_clear_gems + util_setup_rubygem9 + util_setup_rubygem8 + util_setup_spec_fetcher @rubygem8, @rubygem9 + util_add_to_fetcher @rubygem8, @rubygem9 + + @cmd.options[:args] = [] + @cmd.options[:system] = "9" + @cmd.options[:generate_rdoc] = false + @cmd.options[:generate_ri] = false + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating rubygems-update", out.shift + assert_equal "Successfully installed rubygems-update-9", out.shift + assert_equal "Installing RubyGems 9", out.shift + assert_equal "RubyGems system software updated", out.shift + + assert_empty out + end + def test_execute_system_with_gems @cmd.options[:args] = %w[gem] @cmd.options[:system] = true @@ -218,16 +244,11 @@ class TestGemCommandsUpdateCommand < Gem::TestCase @a2.add_dependency 'c', '2' @a2.add_dependency 'b', '2' - @b2_path = Gem.cache_gem(@b2.file_name, @gemhome) - @c1_2_path = Gem.cache_gem(@c1_2.file_name, @gemhome) - @c2_path = Gem.cache_gem(@c2.file_name, @gemhome) + @b2_path = @b2.cache_file + @c1_2_path = @c1_2.cache_file + @c2_path = @c2.cache_file - @source_index = Gem::SourceIndex.new - @source_index.add_spec @a1 - @source_index.add_spec @a2 - @source_index.add_spec @b2 - @source_index.add_spec @c1_2 - @source_index.add_spec @c2 + install_specs @a1, @a2, @b2, @c1_2, @c2 util_build_gem @a1 util_build_gem @a2 @@ -236,16 +257,16 @@ class TestGemCommandsUpdateCommand < Gem::TestCase @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = read_binary @a1_path @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = read_binary @a2_path @fetcher.data["#{@gem_repo}gems/#{@b2.file_name}"] = read_binary @b2_path - @fetcher.data["#{@gem_repo}gems/#{@c1_2.file_name}"] = - read_binary @c1_2_path + @fetcher.data["#{@gem_repo}gems/#{@c1_2.file_name}"] = read_binary @c1_2_path @fetcher.data["#{@gem_repo}gems/#{@c2.file_name}"] = read_binary @c2_path util_setup_spec_fetcher @a1, @a2, @b2, @c1_2, @c2 - util_clear_gems Gem::Installer.new(@c1_2_path).install Gem::Installer.new(@a1_path).install + Gem::Specification.reset + @cmd.options[:args] = [] use_ui @ui do diff --git a/test/rubygems/test_gem_commands_which_command.rb b/test/rubygems/test_gem_commands_which_command.rb index 8f9a2926db..7a21f7cc05 100644 --- a/test/rubygems/test_gem_commands_which_command.rb +++ b/test/rubygems/test_gem_commands_which_command.rb @@ -11,6 +11,7 @@ class TestGemCommandsWhichCommand < Gem::TestCase def setup super + Gem::Specification.reset @cmd = Gem::Commands::WhichCommand.new end @@ -28,6 +29,8 @@ class TestGemCommandsWhichCommand < Gem::TestCase end def test_execute_one_missing + # TODO: this test fails in isolation + util_foo_bar @cmd.handle_options %w[foo_bar missing] @@ -37,7 +40,7 @@ class TestGemCommandsWhichCommand < Gem::TestCase end assert_equal "#{@foo_bar.full_gem_path}/lib/foo_bar.rb\n", @ui.output - assert_match %r%Can't find ruby library file or shared library missing\n%, + assert_match %r%Can.t find ruby library file or shared library missing\n%, @ui.error end @@ -51,7 +54,7 @@ class TestGemCommandsWhichCommand < Gem::TestCase end assert_equal '', @ui.output - assert_match %r%Can't find ruby library file or shared library missing\n%, + assert_match %r%Can.t find ruby library file or shared library missing\n%, @ui.error end @@ -62,8 +65,8 @@ class TestGemCommandsWhichCommand < Gem::TestCase end files.each do |file| - filename = @foo_bar.full_gem_path + "/#{file}" - FileUtils.mkdir_p File.dirname(filename) + filename = File.join(@foo_bar.full_gem_path, file) + FileUtils.mkdir_p File.dirname filename FileUtils.touch filename end end diff --git a/test/rubygems/test_gem_dependency.rb b/test/rubygems/test_gem_dependency.rb index b4a21b896c..a77ddf5e2d 100644 --- a/test/rubygems/test_gem_dependency.rb +++ b/test/rubygems/test_gem_dependency.rb @@ -67,16 +67,20 @@ class TestGemDependency < Gem::TestCase assert_match d, d, "match self" assert_match dep("a", ">= 0"), d, "match version exact" assert_match dep("a", ">= 0"), dep("a", "1"), "match version" - assert_match dep(/a/, ">= 0"), d, "match simple regexp" - assert_match dep(/a|b/, ">= 0"), d, "match scary regexp" - - refute_match dep(/a/), dep("b") refute_match dep("a"), Object.new + + Deprecate.skip_during do + assert_match dep(/a/, ">= 0"), d, "match simple regexp" + assert_match dep(/a|b/, ">= 0"), d, "match scary regexp" + refute_match dep(/a/), dep("b") + end end def test_equals_tilde_escape refute_match dep("a|b"), dep("a", "1") - assert_match dep(/a|b/), dep("a", "1") + Deprecate.skip_during do + assert_match dep(/a|b/), dep("a", "1") + end end def test_equals_tilde_object @@ -90,9 +94,11 @@ class TestGemDependency < Gem::TestCase def test_equals_tilde_spec assert_match dep("a", ">= 0"), spec("a", "0") assert_match dep("a", "1"), spec("a", "1") - assert_match dep(/a/, ">= 0"), spec("a", "0") - assert_match dep(/a|b/, ">= 0"), spec("b", "0") - refute_match dep(/a/, ">= 0"), spec("b", "0") + Deprecate.skip_during do + assert_match dep(/a/, ">= 0"), spec("a", "0") + assert_match dep(/a|b/, ">= 0"), spec("b", "0") + refute_match dep(/a/, ">= 0"), spec("b", "0") + end end def test_hash @@ -166,5 +172,12 @@ class TestGemDependency < Gem::TestCase assert d.prerelease? end + + def test_specific + refute dep('a', '> 1').specific? + + assert dep('a', '= 1').specific? + end + end diff --git a/test/rubygems/test_gem_dependency_installer.rb b/test/rubygems/test_gem_dependency_installer.rb index 5cf79d3c59..48d85b8ed4 100644 --- a/test/rubygems/test_gem_dependency_installer.rb +++ b/test/rubygems/test_gem_dependency_installer.rb @@ -14,10 +14,14 @@ class TestGemDependencyInstaller < Gem::TestCase super @gems_dir = File.join @tempdir, 'gems' - @cache_dir = Gem.cache_dir(@gemhome) + @cache_dir = File.join @gemhome, 'cache' FileUtils.mkdir @gems_dir + Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new + end + + def util_setup_gems @a1, @a1_gem = util_gem 'a', '1' do |s| s.executables << 'a_bin' end @a1_pre, @a1_pre_gem = util_gem 'a', '1.a' @b1, @b1_gem = util_gem 'b', '1' do |s| @@ -25,12 +29,13 @@ class TestGemDependencyInstaller < Gem::TestCase s.add_development_dependency 'aa' end - Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new - + util_clear_gems util_reset_gems end def test_install + util_setup_gems + FileUtils.mv @a1_gem, @tempdir inst = nil @@ -39,13 +44,13 @@ class TestGemDependencyInstaller < Gem::TestCase inst.install 'a' end - assert_equal Gem::SourceIndex.new(@a1.full_name => @a1), - Gem::SourceIndex.from_installed_gems - + assert_equal %w[a-1], Gem::Specification.map(&:full_name) assert_equal [@a1], inst.installed_gems end def test_install_all_dependencies + util_setup_gems + _, e1_gem = util_gem 'e', '1' do |s| s.add_dependency 'b' end @@ -71,6 +76,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_cache_dir + util_setup_gems + FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir inst = nil @@ -82,15 +89,18 @@ class TestGemDependencyInstaller < Gem::TestCase assert_equal %w[a-1 b-1], inst.installed_gems.map { |s| s.full_name } - assert Gem.cache_gem(@a1.file_name, @gemhome) - assert Gem.cache_gem(@b1.file_name, @gemhome) + assert File.exist? File.join(@gemhome, "cache", @a1.file_name) + assert File.exist? File.join(@gemhome, "cache", @b1.file_name) end def test_install_dependencies_satisfied + util_setup_gems + a2, a2_gem = util_gem 'a', '2' FileUtils.rm_rf File.join(@gemhome, 'gems') - Gem.source_index.refresh! + + Gem::Specification.reset FileUtils.mv @a1_gem, @tempdir FileUtils.mv a2_gem, @tempdir # not in index @@ -109,14 +119,13 @@ class TestGemDependencyInstaller < Gem::TestCase inst.install 'b' end - installed = Gem::SourceIndex.from_installed_gems.map { |n,s| s.full_name } - - assert_equal %w[a-2 b-1], installed.sort - + assert_equal %w[a-2 b-1], Gem::Specification.map(&:full_name) assert_equal %w[b-1], inst.installed_gems.map { |s| s.full_name } end def test_install_dependency + util_setup_gems + FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir inst = nil @@ -130,6 +139,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_dependency_development + util_setup_gems + @aa1, @aa1_gem = util_gem 'aa', '1' util_reset_gems @@ -148,6 +159,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_dependency_existing + util_setup_gems + Gem::Installer.new(@a1_gem).install FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir @@ -180,6 +193,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_local + util_setup_gems + FileUtils.mv @a1_gem, @tempdir inst = nil @@ -192,6 +207,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_local_dependency + util_setup_gems + FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir @@ -206,6 +223,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_local_dependency_installed + util_setup_gems + FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir @@ -222,6 +241,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_local_subdir + util_setup_gems + inst = nil Dir.chdir @tempdir do @@ -233,11 +254,13 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_env_shebang + util_setup_gems + FileUtils.mv @a1_gem, @tempdir inst = nil Dir.chdir @tempdir do - inst = Gem::DependencyInstaller.new :env_shebang => true, :wrappers => true + inst = Gem::DependencyInstaller.new :env_shebang => true, :wrappers => true, :format_executable => false inst.install 'a' end @@ -248,6 +271,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_force + util_setup_gems + FileUtils.mv @b1_gem, @tempdir si = util_setup_spec_fetcher @b1 @fetcher.data['http://gems.example.com/gems/yaml'] = si.to_yaml @@ -262,6 +287,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_ignore_dependencies + util_setup_gems + FileUtils.mv @b1_gem, @tempdir inst = nil @@ -274,6 +301,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_install_dir + util_setup_gems + FileUtils.mv @a1_gem, @tempdir gemhome2 = File.join @tempdir, 'gemhome2' Dir.mkdir gemhome2 @@ -287,10 +316,12 @@ class TestGemDependencyInstaller < Gem::TestCase assert_equal %w[a-1], inst.installed_gems.map { |s| s.full_name } assert File.exist?(File.join(gemhome2, 'specifications', @a1.spec_name)) - assert File.exist?(Gem.cache_gem(@a1.file_name, gemhome2)) + assert File.exist?(File.join(gemhome2, 'cache', @a1.file_name)) end def test_install_domain_both + util_setup_gems + a1_data = nil File.open @a1_gem, 'rb' do |fp| a1_data = fp.read @@ -309,14 +340,13 @@ class TestGemDependencyInstaller < Gem::TestCase assert_equal %w[a-1 b-1], inst.installed_gems.map { |s| s.full_name } a1, b1 = inst.installed_gems - a1_expected = File.join(@gemhome, 'specifications', a1.spec_name) - b1_expected = File.join(@gemhome, 'specifications', b1.spec_name) - - assert_equal a1_expected, a1.loaded_from - assert_equal b1_expected, b1.loaded_from + assert_equal a1.spec_file, a1.loaded_from + assert_equal b1.spec_file, b1.loaded_from end def test_install_domain_both_no_network + util_setup_gems + @fetcher.data["http://gems.example.com/gems/Marshal.#{@marshal_version}"] = proc do raise Gem::RemoteFetcher::FetchError @@ -335,12 +365,11 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_domain_local + util_setup_gems + FileUtils.mv @b1_gem, @tempdir inst = nil - Gem.source_index.remove_spec @a1.full_name - Gem.source_index.remove_spec @a1_pre.full_name - Dir.chdir @tempdir do e = assert_raises Gem::DependencyError do inst = Gem::DependencyInstaller.new :domain => :local @@ -355,6 +384,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_domain_remote + util_setup_gems + a1_data = nil File.open @a1_gem, 'rb' do |fp| a1_data = fp.read @@ -369,6 +400,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_dual_repository + util_setup_gems + FileUtils.mv @a1_gem, @tempdir FileUtils.mv @b1_gem, @tempdir inst = nil @@ -393,6 +426,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_reinstall + util_setup_gems + Gem::Installer.new(@a1_gem).install FileUtils.mv @a1_gem, @tempdir inst = nil @@ -402,13 +437,13 @@ class TestGemDependencyInstaller < Gem::TestCase inst.install 'a' end - assert_equal Gem::SourceIndex.new(@a1.full_name => @a1), - Gem::SourceIndex.from_installed_gems - - assert_equal %w[a-1], inst.installed_gems.map { |s| s.full_name } + assert_equal %w[a-1], Gem::Specification.map(&:full_name) + assert_equal %w[a-1], inst.installed_gems.map(&:full_name) end def test_install_remote + util_setup_gems + a1_data = nil File.open @a1_gem, 'rb' do |fp| a1_data = fp.read @@ -426,6 +461,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_remote_dep + util_setup_gems + a1_data = nil File.open @a1_gem, 'rb' do |fp| a1_data = fp.read @@ -444,6 +481,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_install_remote_platform_newer + util_setup_gems + a2_o, a2_o_gem = util_gem 'a', '2' do |s| s.platform = Gem::Platform.new %w[cpu other_platform 1] end @@ -473,6 +512,8 @@ class TestGemDependencyInstaller < Gem::TestCase if defined? OpenSSL then def test_install_security_policy + util_setup_gems + data = File.open(@a1_gem, 'rb') { |f| f.read } @fetcher.data['http://gems.example.com/gems/a-1.gem'] = data @@ -495,9 +536,11 @@ class TestGemDependencyInstaller < Gem::TestCase # Wrappers don't work on mswin unless win_platform? then def test_install_no_wrappers + util_setup_gems + @fetcher.data['http://gems.example.com/gems/a-1.gem'] = read_binary(@a1_gem) - inst = Gem::DependencyInstaller.new :wrappers => false + inst = Gem::DependencyInstaller.new :wrappers => false, :format_executable => false inst.install 'a' refute_match(%r|This file was generated by RubyGems.|, @@ -537,14 +580,19 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_find_gems_gems_with_sources + util_setup_gems + inst = Gem::DependencyInstaller.new dep = Gem::Dependency.new 'b', '>= 0' - assert_equal [[@b1, @gem_repo]], - inst.find_gems_with_sources(dep) + Gem::Specification.reset + + assert_equal [[@b1, @gem_repo]], inst.find_gems_with_sources(dep) end def test_find_gems_with_sources_local + util_setup_gems + FileUtils.mv @a1_gem, @tempdir inst = Gem::DependencyInstaller.new dep = Gem::Dependency.new 'a', '>= 0' @@ -566,6 +614,8 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_find_gems_with_sources_prerelease + util_setup_gems + installer = Gem::DependencyInstaller.new dependency = Gem::Dependency.new('a', Gem::Requirement.default) @@ -586,8 +636,8 @@ class TestGemDependencyInstaller < Gem::TestCase def assert_resolve expected, *specs util_clear_gems - util_setup_spec_fetcher(*specs) + Gem::Specification.reset inst = Gem::DependencyInstaller.new inst.find_spec_by_name_and_version specs.first.name @@ -601,6 +651,7 @@ class TestGemDependencyInstaller < Gem::TestCase util_clear_gems util_setup_spec_fetcher(*specs) + Gem::Specification.reset spec = specs.first @@ -613,6 +664,9 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_gather_dependencies + util_setup_gems + util_reset_gems + inst = Gem::DependencyInstaller.new inst.find_spec_by_name_and_version 'b' inst.gather_dependencies @@ -725,6 +779,7 @@ class TestGemDependencyInstaller < Gem::TestCase end def test_gather_dependencies_prerelease + util_setup_gems util_setup_c1_pre assert_resolve_pre %w[a-1.a b-1 c-1.a], @c1_pre, @a1_pre, @b1 @@ -782,6 +837,9 @@ class TestGemDependencyInstaller < Gem::TestCase end def util_reset_gems + @a1 ||= nil + @b1 ||= nil + @a1_pre ||= nil @c1_pre ||= nil @d1 ||= nil @d2 ||= nil diff --git a/test/rubygems/test_gem_dependency_list.rb b/test/rubygems/test_gem_dependency_list.rb index 4201a31cdd..348f111391 100644 --- a/test/rubygems/test_gem_dependency_list.rb +++ b/test/rubygems/test_gem_dependency_list.rb @@ -12,8 +12,11 @@ class TestGemDependencyList < Gem::TestCase def setup super + util_clear_gems + @deplist = Gem::DependencyList.new + # TODO: switch to new_spec @a1 = quick_spec 'a', '1' @a2 = quick_spec 'a', '2' @a3 = quick_spec 'a', '3' @@ -28,13 +31,10 @@ class TestGemDependencyList < Gem::TestCase end def test_self_from_source_index - hash = { - 'a-1' => @a1, - 'b-2' => @b2, - } + util_clear_gems + install_specs @a1, @b2 - si = Gem::SourceIndex.new hash - deps = Gem::DependencyList.from_source_index si + deps = Deprecate.skip_during { Gem::DependencyList.from_source_index } assert_equal %w[b-2 a-1], deps.dependency_order.map { |s| s.full_name } end diff --git a/test/rubygems/test_gem_doc_manager.rb b/test/rubygems/test_gem_doc_manager.rb index f52f1f87f1..f7ab6416c0 100644 --- a/test/rubygems/test_gem_doc_manager.rb +++ b/test/rubygems/test_gem_doc_manager.rb @@ -17,21 +17,21 @@ class TestGemDocManager < Gem::TestCase end def test_uninstall_doc_unwritable - path = @spec.installation_path + path = @spec.base_dir orig_mode = File.stat(path).mode # File.chmod has no effect on MS Windows directories (it needs ACL). if win_platform? skip("test_uninstall_doc_unwritable skipped on MS Windows") else - File.chmod 0000, path + FileUtils.chmod 0000, path end assert_raises Gem::FilePermissionError do @manager.uninstall_doc end ensure - File.chmod orig_mode, path + FileUtils.chmod orig_mode, path end end diff --git a/test/rubygems/test_gem_format.rb b/test/rubygems/test_gem_format.rb index 6f169588eb..85fb521c67 100644 --- a/test/rubygems/test_gem_format.rb +++ b/test/rubygems/test_gem_format.rb @@ -20,7 +20,7 @@ class TestGemFormat < Gem::Package::TarTestCase def test_class_from_file_by_path util_make_gems - gems = Dir[Gem.cache_gem('*.gem', @gemhome)] + gems = Dir[File.join(@gemhome, "cache", "*.gem")] names = [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2, @pl1].map do |spec| spec.original_name diff --git a/test/rubygems/test_gem_gem_path_searcher.rb b/test/rubygems/test_gem_gem_path_searcher.rb index cb4516eaca..c7f5af777c 100644 --- a/test/rubygems/test_gem_gem_path_searcher.rb +++ b/test/rubygems/test_gem_gem_path_searcher.rb @@ -13,72 +13,88 @@ class Gem::GemPathSearcher end class TestGemGemPathSearcher < Gem::TestCase - def setup super - @foo1 = quick_gem 'foo', '0.1' do |s| - s.require_paths << 'lib2' - s.files << 'lib/foo.rb' - end - + @foo1 = new_spec 'foo', '0.1', nil, "lib/foo.rb" + @foo1.require_paths << 'lib2' path = File.join 'gems', @foo1.full_name, 'lib', 'foo.rb' write_file(path) { |fp| fp.puts "# #{path}" } - @foo2 = quick_gem 'foo', '0.2' - @bar1 = quick_gem 'bar', '0.1' - @bar2 = quick_gem 'bar', '0.2' - @nrp = quick_gem 'nil_require_paths', '0.1' - @nrp.require_paths = nil + @foo2 = new_spec 'foo', '0.2' + @bar1 = new_spec 'bar', '0.1' + @bar2 = new_spec 'bar', '0.2' + @nrp = new_spec 'nil_require_paths', '0.1' do |s| + s.require_paths = nil + end + util_setup_fake_fetcher + Gem::Specification.reset + util_setup_spec_fetcher @foo1, @foo2, @bar1, @bar2 @fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @fetcher - Gem.source_index = util_setup_spec_fetcher @foo1, @foo2, @bar1, @bar2 - - @gps = Gem::GemPathSearcher.new + @gps = Deprecate.skip_during { Gem::GemPathSearcher.new } end def test_find - assert_equal @foo1, @gps.find('foo') + Deprecate.skip_during do + assert_equal @foo1, @gps.find('foo') + end end def test_find_all - assert_equal [@foo1], @gps.find_all('foo') + Deprecate.skip_during do + assert_equal [@foo1], @gps.find_all('foo') + end end def test_init_gemspecs - assert_equal [@bar2, @bar1, @foo2, @foo1], @gps.init_gemspecs + Deprecate.skip_during do + util_clear_gems + util_setup_spec_fetcher @foo1, @foo2, @bar1, @bar2 + expected = [@bar2, @bar1, @foo2, @foo1].map(&:full_name) + actual = @gps.init_gemspecs.map(&:full_name) + assert_equal expected, actual + end end def test_lib_dirs_for - lib_dirs = @gps.lib_dirs_for(@foo1) - expected = File.join @gemhome, 'gems', @foo1.full_name, '{lib,lib2}' + Deprecate.skip_during do + lib_dirs = @gps.lib_dirs_for(@foo1) + expected = File.join @gemhome, 'gems', @foo1.full_name, '{lib,lib2}' - assert_equal expected, lib_dirs + assert_equal expected, lib_dirs + end end def test_lib_dirs_for_nil_require_paths - assert_nil @gps.lib_dirs_for(@nrp) + Deprecate.skip_during do + assert_nil @gps.lib_dirs_for(@nrp) + end end def test_matching_file_eh - refute @gps.matching_file?(@foo1, 'bar') - assert @gps.matching_file?(@foo1, 'foo') + Deprecate.skip_during do + refute @gps.matching_file?(@foo1, 'bar') + assert @gps.matching_file?(@foo1, 'foo') + end end def test_matching_files - assert_equal [], @gps.matching_files(@foo1, 'bar') + Deprecate.skip_during do + assert_equal [], @gps.matching_files(@foo1, 'bar') - expected = File.join @foo1.full_gem_path, 'lib', 'foo.rb' + expected = File.join @foo1.full_gem_path, 'lib', 'foo.rb' - assert_equal [expected], @gps.matching_files(@foo1, 'foo') + assert_equal [expected], @gps.matching_files(@foo1, 'foo') + end end def test_matching_files_nil_require_paths - assert_empty @gps.matching_files(@nrp, 'foo') + Deprecate.skip_during do + assert_empty @gps.matching_files(@nrp, 'foo') + end end - end - diff --git a/test/rubygems/test_gem_gem_runner.rb b/test/rubygems/test_gem_gem_runner.rb index 177c71507a..3cb841058d 100644 --- a/test/rubygems/test_gem_gem_runner.rb +++ b/test/rubygems/test_gem_gem_runner.rb @@ -39,10 +39,7 @@ class TestGemGemRunner < Gem::TestCase def test_build_args__are_handled Gem.clear_paths - gr = Gem::GemRunner.new - assert_raises(Gem::SystemExitException) do - gr.run(%W[--help -- --build_arg1 --build_arg2]) - end + Gem::GemRunner.new.run(%W[help -- --build_arg1 --build_arg2]) assert_equal %w[--build_arg1 --build_arg2], Gem::Command.build_args end diff --git a/test/rubygems/test_gem_indexer.rb b/test/rubygems/test_gem_indexer.rb index e3c78ecb70..a4f9bd454b 100644 --- a/test/rubygems/test_gem_indexer.rb +++ b/test/rubygems/test_gem_indexer.rb @@ -16,6 +16,7 @@ class TestGemIndexer < Gem::TestCase def setup super + util_clear_gems util_make_gems @d2_0 = quick_spec 'd', '2.0' do |s| @@ -33,11 +34,12 @@ class TestGemIndexer < Gem::TestCase gems = File.join(@tempdir, 'gems') FileUtils.mkdir_p gems - FileUtils.mv Dir[Gem.cache_gem('*.gem', @gemhome)], gems + FileUtils.mv Dir[File.join(@gemhome, "cache", '*.gem')], gems - @indexer = Gem::Indexer.new @tempdir, :rss_title => 'ExampleForge gems', - :rss_host => 'example.com', - :rss_gems_host => 'gems.example.com' + @indexer = Gem::Indexer.new(@tempdir, + :rss_title => 'ExampleForge gems', + :rss_host => 'example.com', + :rss_gems_host => 'gems.example.com') end def test_initialize @@ -61,36 +63,37 @@ class TestGemIndexer < Gem::TestCase end def test_build_indicies - spec = quick_spec 'd', '2.0' - spec.instance_variable_set :@original_platform, '' - @indexer.make_temp_directories - index = Gem::SourceIndex.new - index.add_spec spec - use_ui @ui do - @indexer.build_indicies index + @indexer.build_indicies end specs_path = File.join @indexer.directory, "specs.#{@marshal_version}" specs_dump = Gem.read_binary specs_path specs = Marshal.load specs_dump - expected = [ - ['d', Gem::Version.new('2.0'), 'ruby'], - ] + expected = [["a", Gem::Version.new("1"), "ruby"], + ["a", Gem::Version.new("2"), "ruby"], + ["a_evil", Gem::Version.new("9"), "ruby"], + ["b", Gem::Version.new("2"), "ruby"], + ["c", Gem::Version.new("1.2"), "ruby"], + ["d", Gem::Version.new("2.0"), "ruby"], + ["pl", Gem::Version.new("1"), "i386-linux"]] - assert_equal expected, specs, 'specs' + assert_equal expected, specs - latest_specs_path = File.join @indexer.directory, - "latest_specs.#{@marshal_version}" + latest_specs_path = File.join(@indexer.directory, + "latest_specs.#{@marshal_version}") latest_specs_dump = Gem.read_binary latest_specs_path latest_specs = Marshal.load latest_specs_dump - expected = [ - ['d', Gem::Version.new('2.0'), 'ruby'], - ] + expected = [["a", Gem::Version.new("2"), "ruby"], + ["a_evil", Gem::Version.new("9"), "ruby"], + ["b", Gem::Version.new("2"), "ruby"], + ["c", Gem::Version.new("1.2"), "ruby"], + ["d", Gem::Version.new("2.0"), "ruby"], + ["pl", Gem::Version.new("1"), "i386-linux"]] assert_equal expected, latest_specs, 'latest_specs' end @@ -109,10 +112,10 @@ class TestGemIndexer < Gem::TestCase assert File.directory?(quickdir) assert File.directory?(marshal_quickdir) - assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz" - refute_indexed marshal_quickdir, @c1_2.spec_name + refute_indexed marshal_quickdir, File.basename(@c1_2.spec_file) assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -230,12 +233,12 @@ class TestGemIndexer < Gem::TestCase <pre>This line is really, really long. So long, in fact, that it is more than eighty characters long! The purpose of this line is for testing wrapping -behavior because sometimes people don't wrap their text to eighty characters. +behavior because sometimes people don't wrap their text to eighty characters. Without the wrapping, the text might not look good in the RSS feed. Also, a list: * An entry that's actually kind of sort - * an entry that's really long, which will probably get wrapped funny. + * an entry that's really long, which will probably get wrapped funny. That's ok, somebody wasn't thinking straight when they made it more than eighty characters.</pre> @@ -272,10 +275,10 @@ eighty characters.</pre> assert File.directory?(quickdir) assert File.directory?(marshal_quickdir) - assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz" - refute_indexed marshal_quickdir, "#{@c1_2.spec_name}" + refute_indexed marshal_quickdir, "#{File.basename(@c1_2.spec_file)}" refute_indexed @tempdir, "specs.#{@marshal_version}" refute_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -308,8 +311,8 @@ eighty characters.</pre> assert File.directory?(marshal_quickdir) - assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -343,19 +346,19 @@ eighty characters.</pre> refute_indexed quickdir, "latest_index" refute_indexed quickdir, "latest_index.rz" - refute_indexed quickdir, "#{@a1.spec_name}.rz" - refute_indexed quickdir, "#{@a2.spec_name}.rz" - refute_indexed quickdir, "#{@b2.spec_name}.rz" - refute_indexed quickdir, "#{@c1_2.spec_name}.rz" + refute_indexed quickdir, "#{File.basename(@a1.spec_file)}.rz" + refute_indexed quickdir, "#{File.basename(@a2.spec_file)}.rz" + refute_indexed quickdir, "#{File.basename(@b2.spec_file)}.rz" + refute_indexed quickdir, "#{File.basename(@c1_2.spec_file)}.rz" refute_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" - refute_indexed quickdir, "#{@pl1.spec_name}.rz" + refute_indexed quickdir, "#{File.basename(@pl1.spec_file)}.rz" - assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz" - refute_indexed quickdir, "#{@c1_2.spec_name}" - refute_indexed marshal_quickdir, "#{@c1_2.spec_name}" + refute_indexed quickdir, "#{File.basename(@c1_2.spec_file)}" + refute_indexed marshal_quickdir, "#{File.basename(@c1_2.spec_file)}" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -389,8 +392,8 @@ eighty characters.</pre> assert File.directory?(quickdir) assert File.directory?(marshal_quickdir) - assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -404,10 +407,7 @@ eighty characters.</pre> @indexer.generate_index end - assert_match %r%^Loading 10 gems from #{Regexp.escape @tempdir}$%, - @ui.output assert_match %r%^\.\.\.\.\.\.\.\.\.\.$%, @ui.output - assert_match %r%^Loaded all gems$%, @ui.output assert_match %r%^Generating Marshal quick index gemspecs for 10 gems$%, @ui.output assert_match %r%^Complete$%, @ui.output @@ -520,14 +520,15 @@ eighty characters.</pre> @d2_1_a_tuple = [@d2_1_a.name, @d2_1_a.version, @d2_1_a.original_platform] gems = File.join @tempdir, 'gems' - FileUtils.mv Gem.cache_gem(@d2_1.file_name, @gemhome), gems - FileUtils.mv Gem.cache_gem(@d2_1_a.file_name, @gemhome), gems + + FileUtils.mv @d2_1.cache_file, gems + FileUtils.mv @d2_1_a.cache_file, gems use_ui @ui do @indexer.update_index end - assert_indexed marshal_quickdir, "#{@d2_1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{File.basename(@d2_1.spec_file)}.rz" specs_index = Marshal.load Gem.read_binary(@indexer.dest_specs_index) diff --git a/test/rubygems/test_gem_install_update_options.rb b/test/rubygems/test_gem_install_update_options.rb index fe10fd4949..2f0b911604 100644 --- a/test/rubygems/test_gem_install_update_options.rb +++ b/test/rubygems/test_gem_install_update_options.rb @@ -46,9 +46,8 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase @installer = Gem::Installer.new @gem, @cmd.options @installer.install - assert File.exist?(File.join(Gem.user_dir, 'gems')) - assert File.exist?(File.join(Gem.user_dir, 'gems', - @spec.full_name)) + assert_path_exists File.join(Gem.user_dir, 'gems') + assert_path_exists File.join(Gem.user_dir, 'gems', @spec.full_name) end def test_user_install_disabled_read_only @@ -59,11 +58,13 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase refute @cmd.options[:user_install] - File.chmod 0755, @userhome + FileUtils.chmod 0755, @userhome FileUtils.chmod 0000, @gemhome + Gem.use_paths @gemhome, @userhome + assert_raises(Gem::FilePermissionError) do - @installer = Gem::Installer.new @gem, @cmd.options + Gem::Installer.new(@gem, @cmd.options).install end end ensure diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 554865da90..249b195fd7 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -8,6 +8,25 @@ require 'rubygems/installer_test_case' class TestGemInstaller < Gem::InstallerTestCase + def setup + super + + 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' + + @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 + end + + def test_app_script_text @spec.version = 2 util_make_exec @spec, '' @@ -108,7 +127,7 @@ load Gem.bin_path('a', 'executable', version) def test_extract_files format = Object.new def format.file_entries - [[{'size' => 7, 'mode' => 0400, 'path' => 'thefile'}, 'thefile']] + [[{'size' => 7, 'mode' => 0400, 'path' => 'thefile'}, 'content']] end @installer.format = format @@ -116,7 +135,7 @@ load Gem.bin_path('a', 'executable', version) @installer.extract_files thefile_path = File.join(util_gem_dir, 'thefile') - assert_equal 'thefile', File.read(thefile_path) + assert_equal 'content', File.read(thefile_path) unless Gem.win_platform? then assert_equal 0400, File.stat(thefile_path).mode & 0777 @@ -145,8 +164,9 @@ load Gem.bin_path('a', 'executable', version) @installer.extract_files end - assert_equal "attempt to install file into \"../thefile\" under #{util_gem_dir.inspect}", - e.message + dir = util_gem_dir + expected = "attempt to install file into \"../thefile\" under #{dir}" + assert_equal expected, e.message assert_equal false, File.file?(File.join(@tempdir, '../thefile')), "You may need to remove this file if you broke the test once" end @@ -163,7 +183,7 @@ load Gem.bin_path('a', 'executable', version) @installer.extract_files end - assert_equal 'attempt to install file into "/thefile"', e.message + assert_equal 'attempt to install file into /thefile', e.message assert_equal false, File.file?(File.join('/thefile')), "You may need to remove this file if you broke the test once" end @@ -241,7 +261,7 @@ load Gem.bin_path('a', 'executable', version) @installer.wrappers = true @spec.executables = %w[executable] - gem_dir = File.join "#{@gemhome}2", 'gems', @spec.full_name + 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| @@ -253,7 +273,7 @@ load Gem.bin_path('a', 'executable', version) @installer.generate_bin - installed_exec = File.join("#{@gemhome}2", 'bin', 'executable') + installed_exec = File.join("#{@gemhome}2", "bin", 'executable') assert_equal true, File.exist?(installed_exec) assert_equal mask, File.stat(installed_exec).mode unless win_platform? @@ -279,14 +299,14 @@ load Gem.bin_path('a', 'executable', version) if win_platform? skip('test_generate_bin_script_no_perms skipped on MS Windows') else - File.chmod 0000, util_inst_bindir + FileUtils.chmod 0000, util_inst_bindir assert_raises Gem::FilePermissionError do @installer.generate_bin end end ensure - File.chmod 0700, util_inst_bindir unless $DEBUG + FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?) end def test_generate_bin_script_no_shebang @@ -346,7 +366,7 @@ load Gem.bin_path('a', 'executable', version) @installer.generate_bin assert_equal true, File.directory?(util_inst_bindir) - installed_exec = File.join(util_inst_bindir, 'executable') + 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)) @@ -371,14 +391,14 @@ load Gem.bin_path('a', 'executable', version) if win_platform? skip('test_generate_bin_symlink_no_perms skipped on MS Windows') else - File.chmod 0000, util_inst_bindir + FileUtils.chmod 0000, util_inst_bindir assert_raises Gem::FilePermissionError do @installer.generate_bin end end ensure - File.chmod 0700, util_inst_bindir unless $DEBUG + FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?) end def test_generate_bin_symlink_update_newer @@ -404,10 +424,10 @@ load Gem.bin_path('a', 'executable', version) @spec.version = 3 util_make_exec - @installer.gem_dir = File.join util_gem_dir @spec + @installer.gem_dir = util_gem_dir @spec @installer.generate_bin installed_exec = File.join(util_inst_bindir, 'executable') - assert_equal(File.join(util_gem_bindir(@spec), 'executable'), + assert_equal(@spec.bin_file('executable'), File.readlink(installed_exec), "Ensure symlink moved to latest version") end @@ -441,8 +461,9 @@ load Gem.bin_path('a', 'executable', version) @installer.generate_bin - installed_exec = File.join(util_inst_bindir, 'executable') - assert_equal(File.join(util_gem_dir, 'bin', 'executable'), + 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 @@ -455,7 +476,7 @@ load Gem.bin_path('a', 'executable', version) @installer.gem_dir = util_gem_dir @installer.generate_bin - installed_exec = File.join(util_inst_bindir, 'executable') + installed_exec = File.join util_inst_bindir, 'executable' assert_equal true, File.exist?(installed_exec) @spec = Gem::Specification.new do |s| @@ -522,7 +543,7 @@ load Gem.bin_path('a', 'executable', version) Dir.mkdir util_inst_bindir util_build_gem spec - FileUtils.mv Gem.cache_gem(spec.file_name, @gemhome), @tempdir + FileUtils.mv spec.cache_file, @tempdir installer = Gem::Installer.new gem @@ -535,7 +556,7 @@ load Gem.bin_path('a', 'executable', version) util_clear_gems gemdir = File.join @gemhome, 'gems', @spec.full_name - cache_file = Gem.cache_gem(@spec.file_name, @gemhome) + cache_file = File.join @gemhome, 'cache', @spec.file_name stub_exe = File.join @gemhome, 'bin', 'executable' rakefile = File.join gemdir, 'ext', 'a', 'Rakefile' @@ -555,12 +576,14 @@ load Gem.bin_path('a', 'executable', version) assert File.exist?(cache_file), 'cache file must exist' end + @newspec = nil build_rake_in do use_ui @ui do - assert_equal @spec, @installer.install + @newspec = @installer.install end end + assert_equal @spec, @newspec assert File.exist? gemdir assert File.exist?(stub_exe), 'gem executable must exist' @@ -576,7 +599,7 @@ load Gem.bin_path('a', 'executable', version) spec_file = File.join(@gemhome, 'specifications', @spec.spec_name) - assert_equal spec_file, @spec.loaded_from + assert_equal spec_file, @newspec.loaded_from assert File.exist?(spec_file) assert_same @installer, @post_build_hook_arg @@ -656,17 +679,17 @@ load Gem.bin_path('a', 'executable', version) gemhome2 = "#{@gemhome}2" @spec.add_dependency 'b' - b2 = quick_spec 'b', 2 + quick_gem 'b', 2 FileUtils.mv @gemhome, gemhome2 - Gem.source_index.gems.delete b2.full_name - source_index = Gem::SourceIndex.from_gems_in File.join(gemhome2, - 'specifications') + + Gem::Specification.dirs = [gemhome2] # TODO: switch all dirs= to use_paths util_setup_gem - @installer = Gem::Installer.new @gem, :install_dir => gemhome2, - :source_index => source_index + @installer = Gem::Installer.new @gem, :install_dir => gemhome2 + + gem_home = Gem.dir build_rake_in do use_ui @ui do @@ -675,6 +698,7 @@ load Gem.bin_path('a', 'executable', version) end assert File.exist?(File.join(gemhome2, 'gems', @spec.full_name)) + assert_equal gem_home, Gem.dir end def test_install_force @@ -712,7 +736,7 @@ load Gem.bin_path('a', 'executable', version) end def test_install_missing_dirs - FileUtils.rm_f Gem.cache_dir + FileUtils.rm_f File.join(Gem.dir, 'cache') FileUtils.rm_f File.join(Gem.dir, 'docs') FileUtils.rm_f File.join(Gem.dir, 'specifications') @@ -722,11 +746,11 @@ load Gem.bin_path('a', 'executable', version) @installer.install end - File.directory? Gem.cache_dir + File.directory? File.join(Gem.dir, 'cache') File.directory? File.join(Gem.dir, 'docs') File.directory? File.join(Gem.dir, 'specifications') - assert File.exist?(Gem.cache_gem(@spec.file_name, @gemhome)) + assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name)) assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name)) end @@ -812,8 +836,9 @@ load Gem.bin_path('a', 'executable', version) @spec.post_install_message = 'I am a shiny gem!' use_ui @ui do - Dir.chdir @tempdir do Gem::Builder.new(@spec).build end + path = Gem::Builder.new(@spec).build + @installer = Gem::Installer.new path @installer.install end @@ -838,7 +863,7 @@ load Gem.bin_path('a', 'executable', version) util_build_gem spec - gem = Gem.cache_gem(spec.file_name, @gemhome) + gem = File.join(@gemhome, 'cache', spec.file_name) use_ui @ui do @installer = Gem::Installer.new gem @@ -1002,6 +1027,10 @@ load Gem.bin_path('a', 'executable', version) assert_equal @spec, eval(File.read(spec_file)) end + def test_dir + assert_match @installer.dir, %r!/installer/gems/a-2$! + end + def old_ruby_required spec = quick_spec 'old_ruby_required', '1' do |s| s.required_ruby_version = '= 1.4.6' @@ -1009,20 +1038,17 @@ load Gem.bin_path('a', 'executable', version) util_build_gem spec - Gem.cache_gem(spec.file_name, @gemhome) + spec.cache_file end def util_execless @spec = quick_spec 'z' + util_build_gem @spec - gem = File.join @tempdir, @spec.file_name - - @installer = util_installer @spec, gem, @gemhome + @installer = util_installer @spec, @gemhome end def mask 0100755 & (~File.umask) end - end - diff --git a/test/rubygems/test_gem_package_tar_output.rb b/test/rubygems/test_gem_package_tar_output.rb index 77f31852f9..01b4a0fa3a 100644 --- a/test/rubygems/test_gem_package_tar_output.rb +++ b/test/rubygems/test_gem_package_tar_output.rb @@ -6,6 +6,7 @@ require 'rubygems/package/tar_test_case' require 'rubygems/package/tar_output' +require 'rubygems/security' class TestGemPackageTarOutput < Gem::Package::TarTestCase diff --git a/test/rubygems/test_gem_path_support.rb b/test/rubygems/test_gem_path_support.rb new file mode 100644 index 0000000000..7fb0ccacc5 --- /dev/null +++ b/test/rubygems/test_gem_path_support.rb @@ -0,0 +1,64 @@ +###################################################################### +# This file is imported from the rubygems project. +# DO NOT make modifications in this repo. They _will_ be reverted! +# File a patch instead and assign it to Ryan Davis or Eric Hodel. +###################################################################### + +require 'rubygems/test_case' +require 'rubygems' +require 'fileutils' + +class TestGemPathSupport < Gem::TestCase + def setup + super + + ENV["GEM_HOME"] = @tempdir + ENV["GEM_PATH"] = [@tempdir, "something"].join(File::PATH_SEPARATOR) + end + + def test_initialize + ps = Gem::PathSupport.new + + assert_equal ENV["GEM_HOME"], ps.home + + expected = util_path + assert_equal expected, ps.path, "defaults to GEM_PATH" + end + + def test_initialize_home + ps = Gem::PathSupport.new "GEM_HOME" => "#{@tempdir}/foo" + + assert_equal File.join(@tempdir, "foo"), ps.home + + expected = util_path + [File.join(@tempdir, 'foo')] + assert_equal expected, ps.path + end + + def test_initialize_path + ps = Gem::PathSupport.new "GEM_PATH" => %W[#{@tempdir}/foo #{@tempdir}/bar] + + assert_equal ENV["GEM_HOME"], ps.home + + expected = [ + File.join(@tempdir, 'foo'), + File.join(@tempdir, 'bar'), + ENV["GEM_HOME"], + ] + + assert_equal expected, ps.path + end + + def test_initialize_home_path + ps = Gem::PathSupport.new("GEM_HOME" => "#{@tempdir}/foo", + "GEM_PATH" => %W[#{@tempdir}/foo #{@tempdir}/bar]) + + assert_equal File.join(@tempdir, "foo"), ps.home + + expected = [File.join(@tempdir, 'foo'), File.join(@tempdir, 'bar')] + assert_equal expected, ps.path + end + + def util_path + ENV["GEM_PATH"].split(File::PATH_SEPARATOR) + end +end diff --git a/test/rubygems/test_gem_platform.rb b/test/rubygems/test_gem_platform.rb index 485bab72a2..f46a20fb41 100644 --- a/test/rubygems/test_gem_platform.rb +++ b/test/rubygems/test_gem_platform.rb @@ -144,7 +144,7 @@ class TestGemPlatform < Gem::TestCase def test_empty platform = Gem::Platform.new 'cpu-other_platform1' assert_respond_to platform, :empty? - assert_equal false, platform.empty? + assert_equal false, Deprecate.skip_during { platform.empty? } end def test_to_s diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb index 66fb682c6c..e039bb76bd 100644 --- a/test/rubygems/test_gem_remote_fetcher.rb +++ b/test/rubygems/test_gem_remote_fetcher.rb @@ -99,7 +99,7 @@ gems: # REFACTOR: copied from test_gem_dependency_installer.rb @gems_dir = File.join @tempdir, 'gems' - @cache_dir = Gem.cache_dir(@gemhome) + @cache_dir = File.join @gemhome, "cache" FileUtils.mkdir @gems_dir # TODO: why does the remote fetcher need it written to disk? @@ -152,7 +152,7 @@ gems: fetcher.fetch_size 'gems.example.com/yaml' end - assert_equal 'uri scheme is invalid', e.message + assert_equal 'uri scheme is invalid: nil', e.message end def test_fetch_size_socket_error @@ -209,7 +209,7 @@ gems: fetcher = util_fuck_with_fetcher a1_data - a1_cache_gem = Gem.cache_gem(@a1.file_name, @gemhome) + a1_cache_gem = @a1.cache_file assert_equal a1_cache_gem, fetcher.download(@a1, 'http://gems.example.com') assert_equal("http://gems.example.com/gems/a-1.gem", fetcher.instance_variable_get(:@test_arg).to_s) @@ -221,8 +221,7 @@ gems: inst = Gem::RemoteFetcher.fetcher - assert_equal Gem.cache_gem(@a1.file_name, @gemhome), - inst.download(@a1, 'http://gems.example.com') + assert_equal @a1.cache_file, inst.download(@a1, 'http://gems.example.com') end def test_download_local @@ -234,8 +233,7 @@ gems: inst = Gem::RemoteFetcher.fetcher end - assert_equal Gem.cache_gem(@a1.file_name, @gemhome), - inst.download(@a1, local_path) + assert_equal @a1.cache_file, inst.download(@a1, local_path) end def test_download_local_space @@ -249,21 +247,19 @@ gems: inst = Gem::RemoteFetcher.fetcher end - assert_equal Gem.cache_gem(@a1.file_name, @gemhome), - inst.download(@a1, local_path) + assert_equal @a1.cache_file, inst.download(@a1, local_path) end def test_download_install_dir - a1_data = nil - File.open @a1_gem, 'rb' do |fp| - a1_data = fp.read + a1_data = File.open @a1_gem, 'rb' do |fp| + fp.read end fetcher = util_fuck_with_fetcher a1_data install_dir = File.join @tempdir, 'more_gems' - a1_cache_gem = Gem.cache_gem(@a1.file_name, install_dir) + a1_cache_gem = File.join install_dir, "cache", @a1.file_name FileUtils.mkdir_p(File.dirname(a1_cache_gem)) actual = fetcher.download(@a1, 'http://gems.example.com', install_dir) @@ -279,7 +275,7 @@ gems: FileUtils.mv @a1_gem, @tempdir local_path = File.join @tempdir, @a1.file_name inst = nil - File.chmod 0555, Gem.cache_dir(@gemhome) + FileUtils.chmod 0555, @a1.cache_dir Dir.chdir @tempdir do inst = Gem::RemoteFetcher.fetcher @@ -288,19 +284,20 @@ gems: assert_equal File.join(@tempdir, @a1.file_name), inst.download(@a1, local_path) ensure - File.chmod 0755, Gem.cache_dir(@gemhome) + FileUtils.chmod 0755, @a1.cache_dir end def test_download_read_only - File.chmod 0555, Gem.cache_dir(@gemhome) - File.chmod 0555, File.join(@gemhome) + FileUtils.chmod 0555, @a1.cache_dir + FileUtils.chmod 0555, @gemhome fetcher = util_fuck_with_fetcher File.read(@a1_gem) fetcher.download(@a1, 'http://gems.example.com') - assert File.exist?(Gem.cache_gem(@a1.file_name, Gem.user_dir)) + a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name + assert File.exist? a1_cache_gem ensure - File.chmod 0755, @gemhome - File.chmod 0755, Gem.cache_dir(@gemhome) + FileUtils.chmod 0755, @gemhome + FileUtils.chmod 0755, @a1.cache_dir end end @@ -319,7 +316,7 @@ gems: fetcher = util_fuck_with_fetcher e1_data, :blow_chunks - e1_cache_gem = Gem.cache_gem(e1.file_name, @gemhome) + e1_cache_gem = e1.cache_file assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com') @@ -337,7 +334,7 @@ gems: inst = Gem::RemoteFetcher.fetcher end - cache_path = Gem.cache_gem(@a1.file_name, @gemhome) + cache_path = @a1.cache_file FileUtils.mv local_path, cache_path gem = Gem::Format.from_file_by_path cache_path @@ -422,7 +419,7 @@ gems: def test_fetch_path_gzip fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime, head = nil) + def fetcher.fetch_http(uri, mtime, head = nil) Gem.gzip 'foo' end @@ -432,7 +429,7 @@ gems: def test_fetch_path_gzip_unmodified fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime, head = nil) + def fetcher.fetch_http(uri, mtime, head = nil) nil end @@ -442,53 +439,59 @@ gems: def test_fetch_path_io_error fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime, head = nil) + def fetcher.fetch_http(*) raise EOFError end + url = 'http://example.com/uri' + e = assert_raises Gem::RemoteFetcher::FetchError do - fetcher.fetch_path 'uri' + fetcher.fetch_path url end - assert_equal 'EOFError: EOFError (uri)', e.message - assert_equal 'uri', e.uri + assert_equal "EOFError: EOFError (#{url})", e.message + assert_equal url, e.uri end def test_fetch_path_socket_error fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime, head = nil) + def fetcher.fetch_http(uri, mtime, head = nil) raise SocketError end + url = 'http://example.com/uri' + e = assert_raises Gem::RemoteFetcher::FetchError do - fetcher.fetch_path 'uri' + fetcher.fetch_path url end - assert_equal 'SocketError: SocketError (uri)', e.message - assert_equal 'uri', e.uri + assert_equal "SocketError: SocketError (#{url})", e.message + assert_equal url, e.uri end def test_fetch_path_system_call_error fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime = nil, head = nil) + def fetcher.fetch_http(uri, mtime = nil, head = nil) raise Errno::ECONNREFUSED, 'connect(2)' end + url = 'http://example.com/uri' + e = assert_raises Gem::RemoteFetcher::FetchError do - fetcher.fetch_path 'uri' + fetcher.fetch_path url end - assert_match %r|ECONNREFUSED:.*connect\(2\) \(uri\)\z|, + assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|, e.message - assert_equal 'uri', e.uri + assert_equal url, e.uri end def test_fetch_path_unmodified fetcher = Gem::RemoteFetcher.new nil - def fetcher.open_uri_or_path(uri, mtime, head = nil) + def fetcher.fetch_http(uri, mtime, head = nil) nil end @@ -551,16 +554,18 @@ gems: end end - def test_open_uri_or_path + def test_fetch_http fetcher = Gem::RemoteFetcher.new nil + url = 'http://gems.example.com/redirect' conn = Object.new def conn.started?() true end def conn.request(req) + url = 'http://gems.example.com/redirect' unless defined? @requested then @requested = true res = Net::HTTPMovedPermanently.new nil, 301, nil - res.add_field 'Location', 'http://gems.example.com/real_path' + res.add_field 'Location', url res else res = Net::HTTPOK.new nil, 200, nil @@ -572,19 +577,21 @@ gems: conn = { "#{Thread.current.object_id}:gems.example.com:80" => conn } fetcher.instance_variable_set :@connections, conn - data = fetcher.open_uri_or_path 'http://gems.example.com/redirect' + data = fetcher.fetch_http URI.parse(url) assert_equal 'real_path', data end - def test_open_uri_or_path_limited_redirects + def test_fetch_http_redirects fetcher = Gem::RemoteFetcher.new nil + url = 'http://gems.example.com/redirect' conn = Object.new def conn.started?() true end def conn.request(req) + url = 'http://gems.example.com/redirect' res = Net::HTTPMovedPermanently.new nil, 301, nil - res.add_field 'Location', 'http://gems.example.com/redirect' + res.add_field 'Location', url res end @@ -592,11 +599,10 @@ gems: fetcher.instance_variable_set :@connections, conn e = assert_raises Gem::RemoteFetcher::FetchError do - fetcher.open_uri_or_path 'http://gems.example.com/redirect' + fetcher.fetch_http URI.parse(url) end - assert_equal 'too many redirects (http://gems.example.com/redirect)', - e.message + assert_equal "too many redirects (#{url})", e.message end def test_request @@ -631,6 +637,85 @@ gems: assert_equal t.rfc2822, conn.payload['if-modified-since'] end + def test_user_agent + ua = @fetcher.user_agent + + assert_match %r%^RubyGems/\S+ \S+ Ruby/\S+ \(.*?\)%, ua + assert_match %r%RubyGems/#{Regexp.escape Gem::VERSION}%, ua + assert_match %r% #{Regexp.escape Gem::Platform.local.to_s} %, ua + assert_match %r%Ruby/#{Regexp.escape RUBY_VERSION}%, ua + assert_match %r%\(#{Regexp.escape RUBY_RELEASE_DATE} %, ua + end + + def test_user_agent_engine + util_save_version + + Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE) + Object.send :const_set, :RUBY_ENGINE, 'vroom' + + ua = @fetcher.user_agent + + assert_match %r%\) vroom%, ua + ensure + util_restore_version + end + + def test_user_agent_engine_ruby + util_save_version + + Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE) + Object.send :const_set, :RUBY_ENGINE, 'ruby' + + ua = @fetcher.user_agent + + assert_match %r%\)%, ua + ensure + util_restore_version + end + + def test_user_agent_patchlevel + util_save_version + + Object.send :remove_const, :RUBY_PATCHLEVEL + Object.send :const_set, :RUBY_PATCHLEVEL, 5 + + ua = @fetcher.user_agent + + assert_match %r% patchlevel 5\)%, ua + ensure + util_restore_version + end + + def test_user_agent_revision + util_save_version + + Object.send :remove_const, :RUBY_PATCHLEVEL + Object.send :const_set, :RUBY_PATCHLEVEL, -1 + Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION) + Object.send :const_set, :RUBY_REVISION, 6 + + ua = @fetcher.user_agent + + assert_match %r% revision 6\)%, ua + assert_match %r%Ruby/#{Regexp.escape RUBY_VERSION}dev%, ua + ensure + util_restore_version + end + + def test_user_agent_revision_missing + util_save_version + + Object.send :remove_const, :RUBY_PATCHLEVEL + Object.send :const_set, :RUBY_PATCHLEVEL, -1 + Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION) + + ua = @fetcher.user_agent + + assert_match %r%\(#{Regexp.escape RUBY_RELEASE_DATE}\)%, ua + ensure + util_restore_version + end + def test_yaml_error_on_size use_ui @ui do self.class.enable_yaml = false @@ -753,5 +838,24 @@ gems: assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path) end + def util_save_version + @orig_RUBY_ENGINE = RUBY_ENGINE if defined? RUBY_ENGINE + @orig_RUBY_PATCHLEVEL = RUBY_PATCHLEVEL + @orig_RUBY_REVISION = RUBY_REVISION if defined? RUBY_REVISION + end + + def util_restore_version + Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE) + Object.send :const_set, :RUBY_ENGINE, @orig_RUBY_ENGINE if + defined?(@orig_RUBY_ENGINE) + + Object.send :remove_const, :RUBY_PATCHLEVEL + Object.send :const_set, :RUBY_PATCHLEVEL, @orig_RUBY_PATCHLEVEL + + Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION) + Object.send :const_set, :RUBY_REVISION, @orig_RUBY_REVISION if + defined?(@orig_RUBY_REVISION) + end + end diff --git a/test/rubygems/test_gem_requirement.rb b/test/rubygems/test_gem_requirement.rb index c8490de199..b646171673 100644 --- a/test/rubygems/test_gem_requirement.rb +++ b/test/rubygems/test_gem_requirement.rb @@ -256,6 +256,19 @@ class TestGemRequirement < Gem::TestCase refute_satisfied_by "2.0", "~> 1.4.4" end + def test_specific + refute req('> 1') .specific? + refute req('>= 1').specific? + + assert req('!= 1').specific? + assert req('< 1') .specific? + assert req('<= 1').specific? + assert req('= 1') .specific? + assert req('~> 1').specific? + + assert req('> 1', '> 2').specific? # GIGO + end + def test_bad refute_satisfied_by "", "> 0.1" refute_satisfied_by "1.2.3", "!= 1.2.3" diff --git a/test/rubygems/test_gem_server.rb b/test/rubygems/test_gem_server.rb index 3fad8c486e..bd4d960ecc 100644 --- a/test/rubygems/test_gem_server.rb +++ b/test/rubygems/test_gem_server.rb @@ -9,12 +9,10 @@ require 'rubygems/server' require 'stringio' class Gem::Server - attr_accessor :source_index attr_reader :server end class TestGemServer < Gem::TestCase - def setup super @@ -41,52 +39,64 @@ class TestGemServer < Gem::TestCase data = StringIO.new "GET /Marshal.#{Gem.marshal_version} HTTP/1.0\r\n\r\n" @req.parse data - @server.Marshal @req, @res + Deprecate.skip_during do + @server.Marshal @req, @res + end assert_equal 200, @res.status, @res.body assert_match %r| \d\d:\d\d:\d\d |, @res['date'] assert_equal 'application/octet-stream', @res['content-type'] - si = Gem::SourceIndex.new - si.add_specs @a1, @a2 + Deprecate.skip_during do + si = Gem::SourceIndex.new + si.add_specs @a1, @a2 - assert_equal si, Marshal.load(@res.body) + assert_equal si, Marshal.load(@res.body) + end end def test_Marshal_Z data = StringIO.new "GET /Marshal.#{Gem.marshal_version}.Z HTTP/1.0\r\n\r\n" @req.parse data - @server.Marshal @req, @res + Deprecate.skip_during do + @server.Marshal @req, @res + end assert_equal 200, @res.status, @res.body assert_match %r| \d\d:\d\d:\d\d |, @res['date'] assert_equal 'application/x-deflate', @res['content-type'] - si = Gem::SourceIndex.new - si.add_specs @a1, @a2 + Deprecate.skip_during do + si = Gem::SourceIndex.new + si.add_specs @a1, @a2 - assert_equal si, Marshal.load(Gem.inflate(@res.body)) + assert_equal si, Marshal.load(Gem.inflate(@res.body)) + end end def test_latest_specs data = StringIO.new "GET /latest_specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n" @req.parse data - @server.latest_specs @req, @res + Deprecate.skip_during do + @server.latest_specs @req, @res + end assert_equal 200, @res.status, @res.body assert_match %r| \d\d:\d\d:\d\d |, @res['date'] assert_equal 'application/octet-stream', @res['content-type'] assert_equal [['a', Gem::Version.new(2), Gem::Platform::RUBY]], - Marshal.load(@res.body) + Marshal.load(@res.body) end def test_latest_specs_gz data = StringIO.new "GET /latest_specs.#{Gem.marshal_version}.gz HTTP/1.0\r\n\r\n" @req.parse data - @server.latest_specs @req, @res + Deprecate.skip_during do + @server.latest_specs @req, @res + end assert_equal 200, @res.status, @res.body assert_match %r| \d\d:\d\d:\d\d |, @res['date'] @@ -227,6 +237,4 @@ class TestGemServer < Gem::TestCase @server.instance_variable_set :@server, webrick end - end - diff --git a/test/rubygems/test_gem_silent_ui.rb b/test/rubygems/test_gem_silent_ui.rb index 8005b3b1cc..1968a89b28 100644 --- a/test/rubygems/test_gem_silent_ui.rb +++ b/test/rubygems/test_gem_silent_ui.rb @@ -55,7 +55,7 @@ class TestGemSilentUI < Gem::TestCase assert_empty out, 'No output' assert_empty err, 'No output' - + out, err = capture_io do use_ui @sui do value = @sui.ask_yes_no 'Problem?', true @@ -66,7 +66,7 @@ class TestGemSilentUI < Gem::TestCase assert_empty err, 'No output' assert value, 'Value is true' - + out, err = capture_io do use_ui @sui do value = @sui.ask_yes_no 'Problem?', false diff --git a/test/rubygems/test_gem_source_index.rb b/test/rubygems/test_gem_source_index.rb index 89e2ea3894..462ecbe8fe 100644 --- a/test/rubygems/test_gem_source_index.rb +++ b/test/rubygems/test_gem_source_index.rb @@ -7,397 +7,250 @@ require 'rubygems/test_case' require 'rubygems/source_index' require 'rubygems/config_file' +require 'rubygems/deprecate' class TestGemSourceIndex < Gem::TestCase - def setup super util_setup_fake_fetcher - end - - def test_self_from_gems_in - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.rm_r spec_dir - - FileUtils.mkdir_p spec_dir - - a1 = quick_spec 'a', '1' do |spec| spec.author = 'author 1' end - - spec_file = File.join spec_dir, a1.spec_name - - File.open spec_file, 'w' do |fp| - fp.write a1.to_ruby - end - - si = Gem::SourceIndex.from_gems_in spec_dir - - assert_equal [spec_dir], si.spec_dirs - assert_equal [a1.full_name], si.gems.keys - end - - def test_self_load_specification - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.rm_r spec_dir - - FileUtils.mkdir_p spec_dir - a1 = quick_spec 'a', '1' do |spec| spec.author = 'author 1' end - - spec_file = File.join spec_dir, a1.spec_name - - File.open spec_file, 'w' do |fp| - fp.write a1.to_ruby - end - - spec = Gem::SourceIndex.load_specification spec_file - - assert_equal a1.author, spec.author + @source_index = Deprecate.skip_during { Gem.source_index } end - def test_self_load_specification_utf_8 - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.rm_r spec_dir - - FileUtils.mkdir_p spec_dir - - spec_file = File.join spec_dir, "utf-8.gemspec" - spec_data = <<-SPEC -Gem::Specification.new do |s| - s.name = %q{utf} - s.version = "8" + def test_find_name + Deprecate.skip_during do + assert_equal [@a1, @a2, @a3a], @source_index.find_name('a') + assert_equal [@a2], @source_index.find_name('a', '= 2') + assert_equal [], @source_index.find_name('bogusstring') + assert_equal [], @source_index.find_name('a', '= 3') - s.required_rubygems_version = Gem::Requirement.new(">= 0") - s.authors = ["\317\200"] - s.date = %q{2008-09-10} - s.description = %q{This is a test description} - s.email = %q{example@example.com} - s.has_rdoc = true - s.homepage = %q{http://example.com} - s.require_paths = ["lib"] - s.rubygems_version = %q{1.2.0} - s.summary = %q{this is a summary} + source_index = Gem::SourceIndex.new + source_index.add_spec @a1 + source_index.add_spec @a2 - if s.respond_to? :specification_version then - current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION - s.specification_version = 2 + assert_equal [@a1], source_index.find_name(@a1.name, '= 1') - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - else + r1 = Gem::Requirement.create '= 1' + assert_equal [@a1], source_index.find_name(@a1.name, r1) end - else end -end - SPEC - - spec_data.force_encoding 'UTF-8' - - File.open spec_file, 'w' do |io| io.write spec_data end - - spec = Gem::SourceIndex.load_specification spec_file - - pi = "\317\200" - pi.force_encoding 'UTF-8' if pi.respond_to? :force_encoding - - assert_equal pi, spec.author - end if Gem.ruby_version > Gem::Version.new('1.9') - def test_self_load_specification_exception - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.mkdir_p spec_dir - - spec_file = File.join spec_dir, 'a-1.gemspec' - - File.open spec_file, 'w' do |fp| - fp.write 'raise Exception, "epic fail"' - end - - out, err = capture_io do - assert_equal nil, Gem::SourceIndex.load_specification(spec_file) + def test_find_name_empty_cache + Deprecate.skip_during do + empty_source_index = Gem::SourceIndex.new + assert_equal [], empty_source_index.find_name("foo") end - - assert_equal '', out - - expected = "Invalid gemspec in [#{spec_file}]: epic fail\n" - assert_equal expected, err end - def test_self_load_specification_interrupt - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.mkdir_p spec_dir - - spec_file = File.join spec_dir, 'a-1.gemspec' - - File.open spec_file, 'w' do |fp| - fp.write 'raise Interrupt, "^C"' - end - - use_ui @ui do - assert_raises Interrupt do - Gem::SourceIndex.load_specification(spec_file) + # HACK: deprecated impl is failing tests, but I may want to port it over + def test_latest_specs + Deprecate.skip_during do + p1_ruby = quick_spec 'p', '1' + p1_platform = quick_spec 'p', '1' do |spec| + spec.platform = Gem::Platform::CURRENT end - end - - assert_equal '', @ui.output - assert_equal '', @ui.error - end - - def test_self_load_specification_syntax_error - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.mkdir_p spec_dir - - spec_file = File.join spec_dir, 'a-1.gemspec' - - File.open spec_file, 'w' do |fp| - fp.write '1 +' - end - - out, err = capture_io do - assert_equal nil, Gem::SourceIndex.load_specification(spec_file) - end - - assert_equal '', out - - assert_match(/syntax error/, err) - end - - def test_self_load_specification_system_exit - spec_dir = File.join @gemhome, 'specifications' - - FileUtils.mkdir_p spec_dir - spec_file = File.join spec_dir, 'a-1.gemspec' - - File.open spec_file, 'w' do |fp| - fp.write 'raise SystemExit, "bye-bye"' - end - - use_ui @ui do - assert_raises SystemExit do - Gem::SourceIndex.load_specification(spec_file) + a1_platform = quick_spec @a1.name, (@a1.version) do |s| + s.platform = Gem::Platform.new 'x86-my_platform1' end - end - - assert_equal '', @ui.output - assert_equal '', @ui.error - end - - def test_create_from_directory - # TODO - end - def test_find_name - assert_equal [@a1, @a2, @a3a], @source_index.find_name('a') - assert_equal [@a2], @source_index.find_name('a', '= 2') - assert_equal [], @source_index.find_name('bogusstring') - assert_equal [], @source_index.find_name('a', '= 3') - - source_index = Gem::SourceIndex.new - source_index.add_spec @a1 - source_index.add_spec @a2 - - assert_equal [@a1], source_index.find_name(@a1.name, '= 1') - - r1 = Gem::Requirement.create '= 1' - assert_equal [@a1], source_index.find_name(@a1.name, r1) - end - - def test_find_name_empty_cache - empty_source_index = Gem::SourceIndex.new({}) - assert_equal [], empty_source_index.find_name("foo") - end - - def test_latest_specs - p1_ruby = quick_spec 'p', '1' - p1_platform = quick_spec 'p', '1' do |spec| - spec.platform = Gem::Platform::CURRENT - end - - a1_platform = quick_spec @a1.name, (@a1.version) do |s| - s.platform = Gem::Platform.new 'x86-my_platform1' - end + a2_platform = quick_spec @a2.name, (@a2.version) do |s| + s.platform = Gem::Platform.new 'x86-my_platform1' + end - a2_platform = quick_spec @a2.name, (@a2.version) do |s| - s.platform = Gem::Platform.new 'x86-my_platform1' - end + a2_platform_other = quick_spec @a2.name, (@a2.version) do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end - a2_platform_other = quick_spec @a2.name, (@a2.version) do |s| - s.platform = Gem::Platform.new 'x86-other_platform1' - end + a3_platform_other = quick_spec @a2.name, (@a2.version.bump) do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end - a3_platform_other = quick_spec @a2.name, (@a2.version.bump) do |s| - s.platform = Gem::Platform.new 'x86-other_platform1' + @source_index.add_spec p1_ruby + @source_index.add_spec p1_platform + @source_index.add_spec a1_platform + @source_index.add_spec a2_platform + @source_index.add_spec a2_platform_other + @source_index.add_spec a3_platform_other + + expected = [ + @a2.full_name, + a2_platform.full_name, + a3_platform_other.full_name, + @b2.full_name, + @c1_2.full_name, + @a_evil9.full_name, + p1_ruby.full_name, + p1_platform.full_name, + @pl1.full_name + ].sort + + latest_specs = @source_index.latest_specs.map { |s| s.full_name }.sort + + assert_equal expected, latest_specs end - - @source_index.add_spec p1_ruby - @source_index.add_spec p1_platform - @source_index.add_spec a1_platform - @source_index.add_spec a2_platform - @source_index.add_spec a2_platform_other - @source_index.add_spec a3_platform_other - - expected = [ - @a2.full_name, - a2_platform.full_name, - a3_platform_other.full_name, - @c1_2.full_name, - @a_evil9.full_name, - p1_ruby.full_name, - p1_platform.full_name, - ].sort - - latest_specs = @source_index.latest_specs.map { |s| s.full_name }.sort - - assert_equal expected, latest_specs end def test_load_gems_in - spec_dir1 = File.join @gemhome, 'specifications' - spec_dir2 = File.join @tempdir, 'gemhome2', 'specifications' + Deprecate.skip_during do + spec_dir1 = File.join @gemhome, 'specifications' + spec_dir2 = File.join @tempdir, 'gemhome2', 'specifications' - FileUtils.rm_r spec_dir1 + FileUtils.rm_r spec_dir1 - FileUtils.mkdir_p spec_dir1 - FileUtils.mkdir_p spec_dir2 + FileUtils.mkdir_p spec_dir1 + FileUtils.mkdir_p spec_dir2 - a1 = quick_spec 'a', '1' do |spec| spec.author = 'author 1' end - a2 = quick_spec 'a', '1' do |spec| spec.author = 'author 2' end + a1 = quick_spec 'a', '1' do |spec| spec.author = 'author 1' end + a2 = quick_spec 'a', '1' do |spec| spec.author = 'author 2' end - File.open File.join(spec_dir1, a1.spec_name), 'w' do |fp| - fp.write a1.to_ruby - end + path1 = File.join(spec_dir1, a1.spec_name) + path2 = File.join(spec_dir2, a2.spec_name) - File.open File.join(spec_dir2, a2.spec_name), 'w' do |fp| - fp.write a2.to_ruby - end + File.open path1, 'w' do |fp| + fp.write a1.to_ruby + end + + File.open path2, 'w' do |fp| + fp.write a2.to_ruby + end - @source_index.load_gems_in spec_dir1, spec_dir2 + @source_index.load_gems_in File.dirname(path1), File.dirname(path2) - assert_equal a1.author, @source_index.specification(a1.full_name).author + assert_equal a1.author, @source_index.specification(a1.full_name).author + end end + # REFACTOR: move to test_gem_commands_outdated_command.rb def test_outdated - util_setup_spec_fetcher + Deprecate.skip_during do + util_setup_spec_fetcher - assert_equal [], @source_index.outdated + assert_equal [], @source_index.outdated - updated = quick_spec @a2.name, (@a2.version.bump) - util_setup_spec_fetcher updated + updated = quick_spec @a2.name, (@a2.version.bump) + util_setup_spec_fetcher updated - assert_equal [updated.name], @source_index.outdated + assert_equal [updated.name], @source_index.outdated - updated_platform = quick_spec @a2.name, (updated.version.bump) do |s| - s.platform = Gem::Platform.new 'x86-other_platform1' - end + updated_platform = quick_spec @a2.name, (updated.version.bump) do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end - util_setup_spec_fetcher updated, updated_platform + util_setup_spec_fetcher updated, updated_platform - assert_equal [updated_platform.name], @source_index.outdated + assert_equal [updated_platform.name], @source_index.outdated + end end def test_prerelease_specs_kept_in_right_place - gem_a1_alpha = quick_spec 'abba', '1.a' - @source_index.add_spec gem_a1_alpha - - refute @source_index.latest_specs.include?(gem_a1_alpha) - assert @source_index.latest_specs(true).include?(gem_a1_alpha) - assert @source_index.find_name(gem_a1_alpha.full_name).empty? - assert @source_index.prerelease_specs.include?(gem_a1_alpha) + Deprecate.skip_during do + gem_a1_alpha = quick_spec 'abba', '1.a' + @source_index.add_spec gem_a1_alpha + + refute_includes @source_index.latest_specs, gem_a1_alpha + assert_includes @source_index.latest_specs(true), gem_a1_alpha + assert_empty @source_index.find_name gem_a1_alpha.full_name + assert_includes @source_index.prerelease_specs, gem_a1_alpha + end end def test_refresh_bang - a1_spec = File.join @gemhome, "specifications", @a1.spec_name - - FileUtils.mv a1_spec, @tempdir + Deprecate.skip_during do + a1_spec = File.join @gemhome, "specifications", @a1.spec_name - source_index = Gem::SourceIndex.from_installed_gems + FileUtils.mv a1_spec, @tempdir - refute source_index.gems.include?(@a1.full_name) + Gem::Specification.reset + Gem.send :class_variable_set, :@@source_index, nil + source_index = Gem.source_index - FileUtils.mv File.join(@tempdir, @a1.spec_name), a1_spec + refute_includes source_index.gems.keys.sort, @a1.full_name - source_index.refresh! - - assert source_index.gems.include?(@a1.full_name) - end + FileUtils.mv File.join(@tempdir, @a1.spec_name), a1_spec - def test_refresh_bang_not_from_dir - source_index = Gem::SourceIndex.new - - e = assert_raises RuntimeError do source_index.refresh! - end - assert_equal 'source index not created from disk', e.message + assert source_index.gems.include?(@a1.full_name) + end end def test_remove_spec - deleted = @source_index.remove_spec 'a-1' + Deprecate.skip_during do + si = Gem.source_index - assert_equal %w[a-2 a-3.a a_evil-9 c-1.2], - @source_index.all_gems.values.map { |s| s.full_name }.sort + expected = si.gems.keys.sort - deleted = @source_index.remove_spec 'a-3.a' + expected.delete "a-1" + @source_index.remove_spec 'a-1' - assert_equal %w[a-2 a_evil-9 c-1.2], - @source_index.all_gems.values.map { |s| s.full_name }.sort + assert_equal expected, si.gems.keys.sort + + expected.delete "a-3.a" + @source_index.remove_spec 'a-3.a' + + assert_equal expected, si.gems.keys.sort + end end def test_search - requirement = Gem::Requirement.create '= 9' - with_version = Gem::Dependency.new(/^a/, requirement) - assert_equal [@a_evil9], @source_index.search(with_version) + Deprecate.skip_during do + requirement = Gem::Requirement.create '= 9' + with_version = Gem::Dependency.new(/^a/, requirement) + assert_equal [@a_evil9], @source_index.search(with_version) - with_default = Gem::Dependency.new(/^a/, Gem::Requirement.default) - assert_equal [@a1, @a2, @a3a, @a_evil9], @source_index.search(with_default) + with_default = Gem::Dependency.new(/^a/, Gem::Requirement.default) + assert_equal [@a1, @a2, @a3a, @a_evil9], @source_index.search(with_default) - c1_1_dep = Gem::Dependency.new 'c', '~> 1.1' - assert_equal [@c1_2], @source_index.search(c1_1_dep) + c1_1_dep = Gem::Dependency.new 'c', '~> 1.1' + assert_equal [@c1_2], @source_index.search(c1_1_dep) + end end def test_search_platform - util_set_arch 'x86-my_platform1' + Deprecate.skip_during do + util_set_arch 'x86-my_platform1' - a1 = quick_spec 'a', '1' - a1_mine = quick_spec 'a', '1' do |s| - s.platform = Gem::Platform.new 'x86-my_platform1' - end - a1_other = quick_spec 'a', '1' do |s| - s.platform = Gem::Platform.new 'x86-other_platform1' - end + a1 = quick_spec 'a', '1' + a1_mine = quick_spec 'a', '1' do |s| + s.platform = Gem::Platform.new 'x86-my_platform1' + end + a1_other = quick_spec 'a', '1' do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end - si = Gem::SourceIndex.new(a1.full_name => a1, a1_mine.full_name => a1_mine, - a1_other.full_name => a1_other) + si = Gem::SourceIndex.new + si.add_specs a1, a1_mine, a1_other - dep = Gem::Dependency.new 'a', Gem::Requirement.new('1') + dep = Gem::Dependency.new 'a', Gem::Requirement.new('1') - gems = si.search dep, true + gems = si.search dep, true - assert_equal [a1, a1_mine], gems.sort + assert_equal [a1, a1_mine], gems.sort + end end def test_signature - sig = @source_index.gem_signature('foo-1.2.3') - assert_equal 64, sig.length - assert_match(/^[a-f0-9]{64}$/, sig) + Deprecate.skip_during do + sig = @source_index.gem_signature('foo-1.2.3') + assert_equal 64, sig.length + assert_match(/^[a-f0-9]{64}$/, sig) + end end def test_specification - assert_equal @a1, @source_index.specification(@a1.full_name) + Deprecate.skip_during do + assert_equal @a1, @source_index.specification(@a1.full_name) - assert_nil @source_index.specification("foo-1.2.4") + assert_nil @source_index.specification("foo-1.2.4") + end end def test_index_signature - sig = @source_index.index_signature - assert_match(/^[a-f0-9]{64}$/, sig) + Deprecate.skip_during do + sig = @source_index.index_signature + assert_match(/^[a-f0-9]{64}$/, sig) + end end - end - diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb index de7bd9a0fd..073b082b06 100644 --- a/test/rubygems/test_gem_spec_fetcher.rb +++ b/test/rubygems/test_gem_spec_fetcher.rb @@ -16,43 +16,43 @@ class TestGemSpecFetcher < Gem::TestCase util_setup_fake_fetcher - @a_pre = quick_spec 'a', '1.a' - @source_index.add_spec @pl1 - @source_index.add_spec @a_pre + @a_pre = new_spec 'a', '1.a' - @specs = @source_index.gems.sort.map do |name, spec| - [spec.name, spec.version, spec.original_platform] - end.sort + install_specs @a_pre - @latest_specs = @source_index.latest_specs.sort.map do |spec| - [spec.name, spec.version, spec.original_platform] - end + Gem::Specification.remove_spec @b2 - @prerelease_specs = @source_index.prerelease_gems.sort.map do |name, spec| + @specs = Gem::Specification.map { |spec| [spec.name, spec.version, spec.original_platform] - end.sort + }.sort - @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] = - util_gzip(Marshal.dump(@specs)) + # TODO: couldn't all of this come from the fake spec fetcher? + @latest_specs = Gem::Specification.latest_specs.sort.map { |spec| + [spec.name, spec.version, spec.original_platform] + } - @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = - util_gzip(Marshal.dump(@latest_specs)) + prerelease = Gem::Specification.find_all { |s| s.version.prerelease? } + @prerelease_specs = prerelease.map { |spec| + [spec.name, spec.version, spec.original_platform] + }.sort - @fetcher.data["#{@gem_repo}prerelease_specs.#{Gem.marshal_version}.gz"] = - util_gzip(Marshal.dump(@prerelease_specs)) + v = Gem.marshal_version + s_zip = util_gzip(Marshal.dump(@specs)) + l_zip = util_gzip(Marshal.dump(@latest_specs)) + p_zip = util_gzip(Marshal.dump(@prerelease_specs)) + @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip + @fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip + @fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip @sf = Gem::SpecFetcher.new end def test_fetch_all - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = - util_zip(Marshal.dump(@a1)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] = - util_zip(Marshal.dump(@a2)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] = - util_zip(Marshal.dump(@a_pre)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a3a.spec_name}.rz"] = - util_zip(Marshal.dump(@a3a)) + d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}" + @fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1)) + @fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2)) + @fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre)) + @fetcher.data["#{d}#{@a3a.spec_name}.rz"] = util_zip(Marshal.dump(@a3a)) dep = Gem::Dependency.new 'a', 1 @@ -70,12 +70,10 @@ class TestGemSpecFetcher < Gem::TestCase end def test_fetch_latest - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = - util_zip(Marshal.dump(@a1)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] = - util_zip(Marshal.dump(@a2)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] = - util_zip(Marshal.dump(@a_pre)) + d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}" + @fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1)) + @fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2)) + @fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre)) dep = Gem::Dependency.new 'a', 1 specs_and_sources = @sf.fetch dep @@ -88,15 +86,12 @@ class TestGemSpecFetcher < Gem::TestCase end def test_fetch_prerelease - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = - util_zip(Marshal.dump(@a1)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.spec_name}.rz"] = - util_zip(Marshal.dump(@a2)) - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] = - util_zip(Marshal.dump(@a_pre)) + d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}" + @fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1)) + @fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2)) + @fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre)) - dep = Gem::Dependency.new 'a', '1.a' - specs_and_sources = @sf.fetch dep, false, true, true + specs_and_sources = @sf.fetch dep('a', '1.a'), false, true, true spec_names = specs_and_sources.map do |spec, source_uri| [spec.full_name, source_uri] @@ -293,11 +288,11 @@ class TestGemSpecFetcher < Gem::TestCase assert_equal [@uri], specs.keys - assert_equal([["a", Gem::Version.new("1"), "ruby"], - ["a", Gem::Version.new("2"), "ruby"], - ["a_evil", Gem::Version.new("9"), "ruby"], - ["c", Gem::Version.new("1.2"), "ruby"], - ["pl", Gem::Version.new("1"), "i386-linux"]], + assert_equal([["a", Gem::Version.new("1"), "ruby"], + ["a", Gem::Version.new("2"), "ruby"], + ["a_evil", Gem::Version.new("9"), "ruby"], + ["c", Gem::Version.new("1.2"), "ruby"], + ["pl", Gem::Version.new("1"), "i386-linux"]], specs[@uri].sort) end @@ -347,19 +342,17 @@ class TestGemSpecFetcher < Gem::TestCase end def test_load_specs - specs = @sf.load_specs @uri, 'specs' - expected = [ - ['a', Gem::Version.new('1.a'), Gem::Platform::RUBY], + ['a', Gem::Version.new('1.a'), Gem::Platform::RUBY], ['a', Gem::Version.new(1), Gem::Platform::RUBY], ['a', Gem::Version.new(2), Gem::Platform::RUBY], - ['a', Gem::Version.new('3.a'), Gem::Platform::RUBY], + ['a', Gem::Version.new('3.a'), Gem::Platform::RUBY], ['a_evil', Gem::Version.new(9), Gem::Platform::RUBY], ['c', Gem::Version.new('1.2'), Gem::Platform::RUBY], ['pl', Gem::Version.new(1), 'i386-linux'], ] - assert_equal expected, specs + assert_equal expected, @sf.load_specs(@uri, 'specs') cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80' assert File.exist?(cache_dir), "#{cache_dir} does not exist" diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index d7f5772259..ef52f0a50e 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -35,8 +35,8 @@ Gem::Specification.new do |s| s.version = %q{0.4.0} s.has_rdoc = true s.summary = %q{A Hash which automatically computes keys.} - s.files = ["lib/keyedlist.rb"] - s.require_paths = ["lib"] + s.files = [%q{lib/keyedlist.rb}] + s.require_paths = [%q{lib}] s.autorequire = %q{keyedlist} s.author = %q{Florian Gross} s.email = %q{flgr@ccan.de} @@ -46,11 +46,9 @@ end def setup super - # TODO: there is no reason why the spec tests need to write to disk - @a1 = quick_gem 'a', '1' do |s| + @a1 = quick_spec 'a', '1' do |s| s.executable = 'exec' s.extensions << 'ext/a/extconf.rb' - s.has_rdoc = 'true' s.test_file = 'test/suite.rb' s.requirements << 'A working computer' s.rubyforge_project = 'example' @@ -64,15 +62,10 @@ end s.files = %w[lib/code.rb] end - @a2 = quick_gem 'a', '2' do |s| + @a2 = quick_spec 'a', '2' do |s| s.files = %w[lib/code.rb] end - FileUtils.mkdir_p File.join(@tempdir, 'bin') - File.open File.join(@tempdir, 'bin', 'exec'), 'w' do |fp| - fp.puts "#!#{Gem.ruby}" - end - @current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION end @@ -83,7 +76,6 @@ end bindir cert_chain date - default_executable dependencies description email @@ -91,7 +83,6 @@ end extensions extra_rdoc_files files - has_rdoc homepage licenses name @@ -129,18 +120,39 @@ end assert_equal @current_version, new_spec.specification_version end + def test_self_from_yaml_syck_bug + # This is equivalent to (and totally valid) psych 1.0 output and + # causes parse errors on syck. + yaml = @a1.to_yaml + yaml.sub!(/^date:.*/, "date: 2011-04-26 00:00:00.000000000Z") + + new_spec = with_syck do + Gem::Specification.from_yaml yaml + end + + assert_kind_of Time, @a1.date + assert_kind_of Time, new_spec.date + end + def test_self_load - spec = File.join @gemhome, 'specifications', @a2.spec_name - gs = Gem::Specification.load spec + full_path = @a2.spec_file + write_file full_path do |io| + io.write @a2.to_ruby_for_cache + end + + spec = Gem::Specification.load full_path + + @a2.files.clear - assert_equal @a2, gs + assert_equal @a2, spec end def test_self_load_legacy_ruby - spec = eval LEGACY_RUBY_SPEC + spec = Deprecate.skip_during do + eval LEGACY_RUBY_SPEC + end assert_equal 'keyedlist', spec.name assert_equal '0.4.0', spec.version.to_s - assert_equal true, spec.has_rdoc? assert_equal Gem::Specification::TODAY, spec.date assert spec.required_ruby_version.satisfied_by?(Gem::Version.new('1')) assert_equal false, spec.has_unit_tests? @@ -195,8 +207,6 @@ end assert_equal [], spec.requirements assert_equal [], spec.dependencies assert_equal 'bin', spec.bindir - assert_equal true, spec.has_rdoc - assert_equal true, spec.has_rdoc? assert_equal '>= 0', spec.required_ruby_version.to_s assert_equal '>= 0', spec.required_rubygems_version.to_s end @@ -279,9 +289,6 @@ end assert_equal 'bin', spec.bindir assert_same spec.bindir, new_spec.bindir - assert_equal true, spec.has_rdoc - assert_same spec.has_rdoc, new_spec.has_rdoc - assert_equal '>= 0', spec.required_ruby_version.to_s assert_same spec.required_ruby_version, new_spec.required_ruby_version @@ -290,6 +297,23 @@ end new_spec.required_rubygems_version end + def test_initialize_copy_broken + spec = Gem::Specification.new do |s| + s.name = 'a' + s.version = '1' + end + + spec.instance_variable_set :@licenses, :blah + spec.loaded_from = '/path/to/file' + + e = assert_raises Gem::FormatException do + spec.dup + end + + assert_equal 'a-1 has an invalid value for @licenses', e.message + assert_equal '/path/to/file', e.file_path + end + def test__dump @a2.platform = Gem::Platform.local @a2.instance_variable_set :@original_platform, 'old_platform' @@ -338,37 +362,33 @@ end def test_date_equals_date @a1.date = Date.new(2003, 9, 17) - assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date + assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date end def test_date_equals_string @a1.date = '2003-09-17' - assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date + assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date + end + + def test_date_equals_string_bad + assert_raises Gem::InvalidSpecificationException do + @a1.date = '9/11/2003' + end end def test_date_equals_time @a1.date = Time.local(2003, 9, 17, 0,0,0) - assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date + assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date end def test_date_equals_time_local - # HACK PDT - @a1.date = Time.local(2003, 9, 17, 19,50,0) - assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date + @a1.date = Time.local(2003, 9, 17, 19,50,0) # may not pass in utc >= +4 + assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date end def test_date_equals_time_utc - # HACK PDT - @a1.date = Time.local(2003, 9, 17, 19,50,0) - assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date - end - - def test_default_executable - assert_equal 'exec', @a1.default_executable - - @a1.default_executable = nil - @a1.instance_variable_set :@executables, nil - assert_equal nil, @a1.default_executable + @a1.date = Time.utc(2003, 9, 17, 19,50,0) + assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date end def test_dependencies @@ -391,60 +411,20 @@ end end def test_eql_eh - g1 = quick_spec 'gem' - g2 = quick_spec 'gem' + g1 = new_spec 'gem', 1 + g2 = new_spec 'gem', 1 assert_equal g1, g2 assert_equal g1.hash, g2.hash assert_equal true, g1.eql?(g2) end - def test_equals2 - assert_equal @a1, @a1 - assert_equal @a1, @a1.dup - refute_equal @a1, @a2 - refute_equal @a1, Object.new - end - - # The cgikit specification was reported to be causing trouble in at least - # one version of RubyGems, so we test explicitly for it. - def test_equals2_cgikit - cgikit = Gem::Specification.new do |s| - s.name = %q{cgikit} - s.version = "1.1.0" - s.date = %q{2004-03-13} - s.summary = %q{CGIKit is a componented-oriented web application } + - %q{framework like Apple Computers WebObjects. } + - %{This framework services Model-View-Controller architecture } + - %q{programming by components based on a HTML file, a definition } + - %q{file and a Ruby source. } - s.email = %q{info@spice-of-life.net} - s.homepage = %q{http://www.spice-of-life.net/download/cgikit/} - s.autorequire = %q{cgikit} - s.bindir = nil - s.has_rdoc = true - s.required_ruby_version = nil - s.platform = nil - s.files = ["lib/cgikit", "lib/cgikit.rb", "lib/cgikit/components", "..."] - end - - assert_equal cgikit, cgikit - end - - def test_equals2_default_executable - spec = @a1.dup - spec.default_executable = 'xx' - - refute_equal @a1, spec - refute_equal spec, @a1 - end - - def test_equals2_extensions + def test_eql_eh_extensions spec = @a1.dup spec.extensions = 'xx' - refute_equal @a1, spec - refute_equal spec, @a1 + refute_operator @a1, :eql?, spec + refute_operator spec, :eql?, @a1 end def test_executables @@ -542,9 +522,26 @@ end assert_kind_of Integer, @a1.hash end + def test_for_cache + @a2.add_runtime_dependency 'b', '1' + @a2.dependencies.first.instance_variable_set :@type, nil + @a2.required_rubygems_version = Gem::Requirement.new '> 0' + @a2.test_files = %w[test/test_b.rb] + + refute_empty @a2.files + refute_empty @a2.test_files + + spec = @a2.for_cache + + assert_empty spec.files + assert_empty spec.test_files + + refute_empty @a2.files + refute_empty @a2.test_files + end + def test_full_gem_path - assert_equal File.join(@gemhome, 'gems', @a1.full_name), - @a1.full_gem_path + assert_equal File.join(@gemhome, 'gems', @a1.full_name), @a1.full_gem_path @a1.original_platform = 'mswin32' @@ -553,11 +550,11 @@ end end def test_full_gem_path_double_slash - gemhome = @gemhome.sub(/\w\//, '\&/') - @a1.loaded_from = File.join gemhome, 'specifications', @a1.spec_name + gemhome = @gemhome.to_s.sub(/\w\//, '\&/') + @a1.loaded_from = File.join gemhome, "specifications", @a1.spec_name - assert_equal File.join(@gemhome, 'gems', @a1.full_name), - @a1.full_gem_path + expected = File.join @gemhome, "gems", @a1.full_name + assert_equal expected, @a1.full_gem_path end def test_full_name @@ -589,21 +586,6 @@ end end end - def test_has_rdoc_eh - assert @a1.has_rdoc? - end - - def test_has_rdoc_equals - - use_ui @ui do - @a1.has_rdoc = false - end - - assert_equal '', @ui.output - - assert_equal true, @a1.has_rdoc - end - def test_hash assert_equal @a1.hash, @a1.hash assert_equal @a1.hash, @a1.dup.hash @@ -611,15 +593,14 @@ end end def test_installation_path - assert_equal @gemhome, @a1.installation_path + Deprecate.skip_during do + assert_equal @gemhome, @a1.installation_path - @a1.instance_variable_set :@loaded_from, nil + @a1.instance_variable_set :@loaded_from, nil + @a1.instance_variable_set :@loaded, false - e = assert_raises Gem::Exception do - @a1.installation_path + assert_nil @a1.installation_path end - - assert_equal 'spec a-1 is not from an installed gem', e.message end def test_lib_files @@ -717,8 +698,8 @@ end end def test_spaceship_name - s1 = quick_spec 'a', '1' - s2 = quick_spec 'b', '1' + s1 = new_spec 'a', '1' + s2 = new_spec 'b', '1' assert_equal(-1, (s1 <=> s2)) assert_equal( 0, (s1 <=> s1)) @@ -726,8 +707,8 @@ end end def test_spaceship_platform - s1 = quick_spec 'a', '1' - s2 = quick_spec 'a', '1' do |s| + s1 = new_spec 'a', '1' + s2 = new_spec 'a', '1' do |s| s.platform = Gem::Platform.new 'x86-my_platform1' end @@ -737,8 +718,8 @@ end end def test_spaceship_version - s1 = quick_spec 'a', '1' - s2 = quick_spec 'a', '2' + s1 = new_spec 'a', '1' + s2 = new_spec 'a', '2' assert_equal( -1, (s1 <=> s2)) assert_equal( 0, (s1 <=> s1)) @@ -773,13 +754,13 @@ Gem::Specification.new do |s| s.version = \"2\" s.required_rubygems_version = Gem::Requirement.new(\"> 0\") if s.respond_to? :required_rubygems_version= - s.authors = [\"A User\"] + s.authors = [%q{A User}] s.date = %q{#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}} s.description = %q{This is a test description} s.email = %q{example@example.com} - s.files = [\"lib/code.rb\"] + s.files = [%q{lib/code.rb}] s.homepage = %q{http://example.com} - s.require_paths = [\"lib\"] + s.require_paths = [%q{lib}] s.rubygems_version = %q{#{Gem::VERSION}} s.summary = %q{this is a summary} @@ -820,12 +801,12 @@ Gem::Specification.new do |s| s.version = \"2\" s.required_rubygems_version = Gem::Requirement.new(\"> 0\") if s.respond_to? :required_rubygems_version= - s.authors = [\"A User\"] + s.authors = [%q{A User}] s.date = %q{#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}} s.description = %q{This is a test description} s.email = %q{example@example.com} s.homepage = %q{http://example.com} - s.require_paths = [\"lib\"] + s.require_paths = [%q{lib}] s.rubygems_version = %q{#{Gem::VERSION}} s.summary = %q{this is a summary} @@ -868,22 +849,21 @@ Gem::Specification.new do |s| s.platform = Gem::Platform.new(#{expected_platform}) s.required_rubygems_version = Gem::Requirement.new(\">= 0\") if s.respond_to? :required_rubygems_version= - s.authors = [\"A User\"] + s.authors = [%q{A User}] s.date = %q{#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}} - s.default_executable = %q{exec} s.description = %q{This is a test description} s.email = %q{example@example.com} - s.executables = [\"exec\"] - s.extensions = [\"ext/a/extconf.rb\"] - s.files = [\"lib/code.rb\", \"test/suite.rb\", \"bin/exec\", \"ext/a/extconf.rb\"] + s.executables = [%q{exec}] + s.extensions = [%q{ext/a/extconf.rb}] + s.files = [%q{lib/code.rb}, %q{test/suite.rb}, %q{bin/exec}, %q{ext/a/extconf.rb}] s.homepage = %q{http://example.com} - s.licenses = [\"MIT\"] - s.require_paths = [\"lib\"] - s.requirements = [\"A working computer\"] + s.licenses = [%q{MIT}] + s.require_paths = [%q{lib}] + s.requirements = [%q{A working computer}] s.rubyforge_project = %q{example} s.rubygems_version = %q{#{Gem::VERSION}} s.summary = %q{this is a summary} - s.test_files = [\"test/suite.rb\"] + s.test_files = [%q{test/suite.rb}] if s.respond_to? :specification_version then s.specification_version = 3 @@ -913,7 +893,9 @@ end end def test_to_ruby_legacy - gemspec1 = eval LEGACY_RUBY_SPEC + gemspec1 = Deprecate.skip_during do + eval LEGACY_RUBY_SPEC + end ruby_code = gemspec1.to_ruby gemspec2 = eval ruby_code @@ -936,7 +918,7 @@ end refute_match '!!null', yaml_str - same_spec = YAML.load(yaml_str) + same_spec = Gem::Specification.from_yaml(yaml_str) assert_equal @a1, same_spec end @@ -945,7 +927,7 @@ end @a1.platform = Gem::Platform.local yaml_str = @a1.to_yaml - same_spec = YAML.load(yaml_str) + same_spec = Gem::Specification.from_yaml(yaml_str) assert_equal Gem::Platform.local, same_spec.platform @@ -984,41 +966,48 @@ end end end + def x s; s.gsub(/xxx/, ''); end + def w; x "WARxxxNING"; end + def t; x "TOxxxDO"; end + def f; x "FxxxIXME"; end + def test_validate_authors util_setup_validate Dir.chdir @tempdir do - @a1.authors = [] + @a1.authors = [""] use_ui @ui do @a1.validate end - assert_equal "WARNING: no author specified\n", @ui.error, 'error' + assert_equal "#{w}: no author specified\n", @ui.error, 'error' @a1.authors = [Object.new] + assert_equal [], @a1.authors + e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal 'authors must be Array of Strings', e.message + assert_equal "authors may not be empty", e.message - @a1.authors = ['FIXME (who is writing this software)'] + @a1.authors = ["#{f} (who is writing this software)"] e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not an author', e.message + assert_equal %{"#{f}" or "#{t}" is not an author}, e.message - @a1.authors = ['TODO (who is writing this software)'] + @a1.authors = ["#{t} (who is writing this software)"] e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not an author', e.message + assert_equal %{"#{f}" or "#{t}" is not an author}, e.message end end @@ -1032,7 +1021,7 @@ end @a1.validate end - assert_equal "WARNING: deprecated autorequire specified\n", + assert_equal "#{w}: deprecated autorequire specified\n", @ui.error, 'error' end end @@ -1047,34 +1036,34 @@ end @a1.validate end - assert_equal "WARNING: no description specified\n", @ui.error, 'error' + assert_equal "#{w}: no description specified\n", @ui.error, "error" @ui = Gem::MockGemUi.new - @a1.summary = 'this is my summary' + @a1.summary = "this is my summary" @a1.description = @a1.summary use_ui @ui do @a1.validate end - assert_equal "WARNING: description and summary are identical\n", - @ui.error, 'error' + assert_equal "#{w}: description and summary are identical\n", + @ui.error, "error" - @a1.description = 'FIXME (describe your package)' + @a1.description = "#{f} (describe your package)" e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not a description', e.message + assert_equal %{"#{f}" or "#{t}" is not a description}, e.message - @a1.description = 'TODO (describe your package)' + @a1.description = "#{t} (describe your package)" e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not a description', e.message + assert_equal %{"#{f}" or "#{t}" is not a description}, e.message end end @@ -1082,35 +1071,33 @@ end util_setup_validate Dir.chdir @tempdir do - @a1.email = '' + @a1.email = "" use_ui @ui do @a1.validate end - assert_equal "WARNING: no email specified\n", @ui.error, 'error' + assert_equal "#{w}: no email specified\n", @ui.error, "error" - @a1.email = 'FIXME (your e-mail)' + @a1.email = "FIxxxXME (your e-mail)".sub(/xxx/, "") e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not an email address', e.message + assert_equal %{"#{f}" or "#{t}" is not an email}, e.message - @a1.email = 'TODO (your e-mail)' + @a1.email = "#{t} (your e-mail)" e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not an email address', e.message + assert_equal %{"#{f}" or "#{t}" is not an email}, e.message end end def test_validate_empty - util_setup_validate - e = assert_raises Gem::InvalidSpecificationException do Gem::Specification.new.validate end @@ -1134,7 +1121,7 @@ end assert_equal %w[exec], @a1.executables assert_equal '', @ui.output, 'output' - assert_equal "WARNING: bin/exec is missing #! line\n", @ui.error, 'error' + assert_equal "#{w}: bin/exec is missing #! line\n", @ui.error, 'error' end def test_validate_empty_require_paths @@ -1183,7 +1170,7 @@ end @a1.validate end - assert_equal "WARNING: no homepage specified\n", @ui.error, 'error' + assert_equal "#{w}: no homepage specified\n", @ui.error, 'error' @ui = Gem::MockGemUi.new @@ -1193,7 +1180,7 @@ end @a1.validate end - assert_equal "WARNING: no homepage specified\n", @ui.error, 'error' + assert_equal "#{w}: no homepage specified\n", @ui.error, 'error' @a1.homepage = 'over at my cool site' @@ -1216,6 +1203,26 @@ end assert_equal 'invalid value for attribute name: ":json"', e.message end + def test_validate_non_nil + util_setup_validate + + Dir.chdir @tempdir do + assert @a1.validate + + Gem::Specification.non_nil_attributes.each do |name| + next if name == :files # set by #normalize + spec = @a1.dup + spec.instance_variable_set "@#{name}", nil + + e = assert_raises Gem::InvalidSpecificationException do + spec.validate + end + + assert_match %r%^#{name}%, e.message + end + end + end + def test_validate_platform_legacy util_setup_validate @@ -1270,23 +1277,23 @@ end @a1.validate end - assert_equal "WARNING: no summary specified\n", @ui.error, 'error' + assert_equal "#{w}: no summary specified\n", @ui.error, 'error' - @a1.summary = 'FIXME (describe your package)' + @a1.summary = "#{f} (describe your package)" e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not a summary', e.message + assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message - @a1.summary = 'TODO (describe your package)' + @a1.summary = "#{t} (describe your package)" e = assert_raises Gem::InvalidSpecificationException do @a1.validate end - assert_equal '"FIXME" or "TODO" is not a summary', e.message + assert_equal %{"#{f}" or "#{t}" is not a summary}, e.message end end @@ -1310,6 +1317,67 @@ end specfile.delete end + ## + # KEEP p-1-x86-darwin-8 + # KEEP p-1 + # KEEP c-1.2 + # KEEP a_evil-9 + # a-1 + # a-1-x86-my_platform-1 + # KEEP a-2 + # a-2-x86-other_platform-1 + # KEEP a-2-x86-my_platform-1 + # a-3.a + # KEEP a-3-x86-other_platform-1 + + def test_latest_specs + util_clear_gems + util_setup_fake_fetcher + + quick_spec 'p', '1' + + p1_curr = quick_spec 'p', '1' do |spec| + spec.platform = Gem::Platform::CURRENT + end + + quick_spec @a1.name, @a1.version do |s| + s.platform = Gem::Platform.new 'x86-my_platform1' + end + + quick_spec @a1.name, @a1.version do |s| + s.platform = Gem::Platform.new 'x86-third_platform1' + end + + quick_spec @a2.name, @a2.version do |s| + s.platform = Gem::Platform.new 'x86-my_platform1' + end + + quick_spec @a2.name, @a2.version do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end + + quick_spec @a2.name, @a2.version.bump do |s| + s.platform = Gem::Platform.new 'x86-other_platform1' + end + + Gem::Specification.remove_spec @b2 + Gem::Specification.remove_spec @pl1 + + expected = %W[ + a-2 + a-2-x86-my_platform-1 + a-3-x86-other_platform-1 + a_evil-9 + c-1.2 + p-1 + #{p1_curr.full_name} + ] + + latest_specs = Gem::Specification.latest_specs.map(&:full_name).sort + + assert_equal expected, latest_specs + end + def util_setup_deps @gem = quick_spec "awesome", "1.0" do |awesome| awesome.add_runtime_dependency "bonobo", [] @@ -1322,13 +1390,36 @@ end def util_setup_validate Dir.chdir @tempdir do - FileUtils.mkdir_p File.join('ext', 'a') - FileUtils.mkdir_p 'lib' - FileUtils.mkdir_p 'test' + FileUtils.mkdir_p File.join("ext", "a") + FileUtils.mkdir_p "lib" + FileUtils.mkdir_p "test" + FileUtils.mkdir_p "bin" + + FileUtils.touch File.join("ext", "a", "extconf.rb") + FileUtils.touch File.join("lib", "code.rb") + FileUtils.touch File.join("test", "suite.rb") - FileUtils.touch File.join('ext', 'a', 'extconf.rb') - FileUtils.touch File.join('lib', 'code.rb') - FileUtils.touch File.join('test', 'suite.rb') + File.open "bin/exec", "w" do |fp| + fp.puts "#!#{Gem.ruby}" + end + end + end + + def with_syck + begin + require "yaml" + old_engine = YAML::ENGINE.yamler + YAML::ENGINE.yamler = 'syck' + rescue NameError + # probably on 1.8, ignore + end + + yield + ensure + begin + YAML::ENGINE.yamler = old_engine + rescue NameError + # ignore end end end diff --git a/test/rubygems/test_gem_text.rb b/test/rubygems/test_gem_text.rb index 775f1e9d12..7324e42b46 100644 --- a/test/rubygems/test_gem_text.rb +++ b/test/rubygems/test_gem_text.rb @@ -26,6 +26,21 @@ class TestGemText < Gem::TestCase assert_equal " text to wrap", format_text("text to wrap", 40, 2) end + def test_format_text_trailing # for two spaces after . + text = <<-TEXT +This line is really, really long. So long, in fact, that it is more than eighty characters long! The purpose of this line is for testing wrapping behavior because sometimes people don't wrap their text to eighty characters. Without the wrapping, the text might not look good in the RSS feed. + TEXT + + expected = <<-EXPECTED +This line is really, really long. So long, in fact, that it is more than +eighty characters long! The purpose of this line is for testing wrapping +behavior because sometimes people don't wrap their text to eighty characters. +Without the wrapping, the text might not look good in the RSS feed. + EXPECTED + + assert_equal expected, format_text(text, 78) + end + def test_levenshtein_distance_add assert_equal 2, levenshtein_distance("zentest", "zntst") assert_equal 2, levenshtein_distance("zntst", "zentest") diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb index 0c08f42d01..93a6f6535b 100644 --- a/test/rubygems/test_gem_uninstaller.rb +++ b/test/rubygems/test_gem_uninstaller.rb @@ -14,26 +14,15 @@ class TestGemUninstaller < Gem::InstallerTestCase @user_spec.executables = ["executable"] - # HACK util_make_exec - user_bin_dir = File.join Gem.user_dir, 'gems', @user_spec.full_name, 'bin' - FileUtils.mkdir_p user_bin_dir - exec_path = File.join user_bin_dir, "executable" - open exec_path, 'w' do |f| - f.puts "#!/usr/bin/ruby" - end - - user_bin_dir = File.join Gem.user_dir, 'bin' - FileUtils.mkdir_p user_bin_dir - exec_path = File.join user_bin_dir, "executable" - open exec_path, 'w' do |f| - f.puts "#!/usr/bin/ruby" - end - build_rake_in do use_ui ui do @installer.install @user_installer.install - Gem::Uninstaller.new(@user_spec.name, :executables => false).uninstall + + Gem.use_paths @gemhome, Gem.user_dir + + @spec = Gem::Specification.find_by_name 'a' + @user_spec = Gem::Specification.find_by_name 'b' end end end @@ -44,6 +33,18 @@ class TestGemUninstaller < Gem::InstallerTestCase assert_match %r|/foo/bar$|, uninstaller.instance_variable_get(:@gem_home) end + def test_remove_all + uninstaller = Gem::Uninstaller.new nil + + ui = Gem::MockGemUi.new "y\n" + + use_ui ui do + uninstaller.remove_all [@spec] + end + + refute_path_exists @spec.gem_dir + end + def test_remove_executables_force_keep uninstaller = Gem::Uninstaller.new nil, :executables => false @@ -114,14 +115,13 @@ class TestGemUninstaller < Gem::InstallerTestCase end exec_path = File.join Gem.user_dir, 'bin', 'executable' - assert_equal false, File.exist?(exec_path), 'removed exec from bin dir' + refute File.exist?(exec_path), 'removed exec from bin dir' assert_equal "Removing executable\n", @ui.output ensure Gem::Installer.exec_format = nil end - def test_path_ok_eh uninstaller = Gem::Uninstaller.new nil @@ -131,7 +131,7 @@ class TestGemUninstaller < Gem::InstallerTestCase def test_path_ok_eh_legacy uninstaller = Gem::Uninstaller.new nil - @spec.loaded_from.gsub! @spec.full_name, '\&-legacy' + @spec.loaded_from = @spec.loaded_from.gsub @spec.full_name, '\&-legacy' @spec.platform = 'legacy' assert_equal true, uninstaller.path_ok?(@gemhome, @spec) @@ -190,26 +190,42 @@ class TestGemUninstaller < Gem::InstallerTestCase end def test_uninstall_user - uninstaller = Gem::Uninstaller.new @user_spec.name, :executables => true, - :user_install => true + @user_spec = Gem::Specification.find_by_name 'b' + + uninstaller = Gem::Uninstaller.new(@user_spec.name, + :executables => true, + :user_install => true) gem_dir = File.join Gem.user_dir, 'gems', @user_spec.full_name Gem.pre_uninstall do - assert File.exist?(gem_dir), 'gem_dir should exist' + assert_path_exists gem_dir end Gem.post_uninstall do - refute File.exist?(gem_dir), 'gem_dir should not exist' + refute_path_exists gem_dir end uninstaller.uninstall - refute File.exist?(gem_dir) + refute_path_exists gem_dir assert_same uninstaller, @pre_uninstall_hook_arg assert_same uninstaller, @post_uninstall_hook_arg end -end + def test_uninstall_selection_greater_than_one + util_make_gems + + list = Gem::Specification.find_all_by_name('a') + + uninstaller = Gem::Uninstaller.new('a') + + use_ui Gem::MockGemUi.new("2\n") do + uninstaller.uninstall + end + updated_list = Gem::Specification.find_all_by_name('a') + assert_equal list.length - 1, updated_list.length + end +end diff --git a/test/rubygems/test_kernel.rb b/test/rubygems/test_kernel.rb index d3714a2c59..32658c5543 100644 --- a/test/rubygems/test_kernel.rb +++ b/test/rubygems/test_kernel.rb @@ -46,10 +46,9 @@ class TestKernel < Gem::TestCase gem 'a', '= 2' end - assert_match(/activate a \(= 2\)/, ex.message) + assert_equal "can't activate a-2, already activated a-1", ex.message assert_match(/activated a-1/, ex.message) assert_equal 'a', ex.name - assert_equal Gem::Requirement.new('= 2'), ex.requirement assert $:.any? { |p| %r{a-1/lib} =~ p } refute $:.any? { |p| %r{a-2/lib} =~ p } -- cgit v1.2.3