diff options
Diffstat (limited to 'test/rubygems')
59 files changed, 1164 insertions, 1766 deletions
diff --git a/test/rubygems/fake_certlib/openssl.rb b/test/rubygems/fake_certlib/openssl.rb index 948110f078..9de90c0a10 100644 --- a/test/rubygems/fake_certlib/openssl.rb +++ b/test/rubygems/fake_certlib/openssl.rb @@ -4,4 +4,4 @@ # See LICENSE.txt for permissions. #++ -fail LoadError, "no such file to load -- openssl" +raise LoadError, "no such file to load -- openssl" diff --git a/test/rubygems/functional.rb b/test/rubygems/functional.rb index 98e7cf6661..62f8c64d2d 100644 --- a/test/rubygems/functional.rb +++ b/test/rubygems/functional.rb @@ -1,10 +1,3 @@ -#!/usr/bin/env ruby -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require 'rubygems' require 'minitest/unit' require 'test/insure_session' diff --git a/test/rubygems/gem_installer_test_case.rb b/test/rubygems/gem_installer_test_case.rb index eeb328e7c4..ac353fbc43 100644 --- a/test/rubygems/gem_installer_test_case.rb +++ b/test/rubygems/gem_installer_test_case.rb @@ -20,12 +20,12 @@ class GemInstallerTestCase < RubyGemTestCase super @spec = quick_gem 'a' - @gem = File.join @tempdir, "#{@spec.full_name}.gem" + @gem = File.join @tempdir, @spec.file_name @installer = util_installer @spec, @gem, @gemhome @user_spec = quick_gem 'b' - @user_gem = File.join @tempdir, "#{@user_spec.full_name}.gem" + @user_gem = File.join @tempdir, @user_spec.file_name @user_installer = util_installer @user_spec, @user_gem, Gem.user_dir @user_installer.gem_dir = File.join(Gem.user_dir, 'gems', @@ -82,7 +82,7 @@ class GemInstallerTestCase < RubyGemTestCase def util_installer(spec, gem_path, gem_home) util_build_gem spec - FileUtils.mv File.join(@gemhome, 'cache', "#{spec.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', spec.file_name), @tempdir installer = Gem::Installer.new gem_path diff --git a/test/rubygems/gemutilities.rb b/test/rubygems/gemutilities.rb index 43334f51e1..6a806a2367 100644 --- a/test/rubygems/gemutilities.rb +++ b/test/rubygems/gemutilities.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - at_exit { $SAFE = 1 } $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) @@ -82,6 +76,8 @@ class RubyGemTestCase < MiniTest::Unit::TestCase @orig_ruby = ruby end + Gem.ensure_gem_subdirectories @gemhome + @orig_ENV_HOME = ENV['HOME'] ENV['HOME'] = @userhome Gem.instance_variable_set :@user_home, nil @@ -159,7 +155,7 @@ class RubyGemTestCase < MiniTest::Unit::TestCase Gem.clear_paths if ruby = @orig_ruby - Gem.class_eval {@ruby = @ruby} + Gem.class_eval {@ruby = ruby} end if @orig_ENV_HOME then @@ -178,7 +174,7 @@ class RubyGemTestCase < MiniTest::Unit::TestCase end end - gem = File.join(@tempdir, "#{gem.full_name}.gem").untaint + gem = File.join(@tempdir, gem.file_name).untaint Gem::Installer.new(gem, :wrappers => true).install end @@ -256,7 +252,7 @@ class RubyGemTestCase < MiniTest::Unit::TestCase yield(s) if block_given? end - path = File.join "specifications", "#{spec.full_name}.gemspec" + path = File.join "specifications", spec.spec_name written_path = write_file path do |io| io.write(spec.to_ruby) end @@ -283,7 +279,7 @@ class RubyGemTestCase < MiniTest::Unit::TestCase Gem::Builder.new(spec).build end - FileUtils.mv "#{spec.full_name}.gem", + FileUtils.mv spec.file_name, File.join(@gemhome, 'cache', "#{spec.original_name}.gem") end end @@ -302,8 +298,7 @@ class RubyGemTestCase < MiniTest::Unit::TestCase cache_file = File.join @tempdir, 'gems', "#{spec.original_name}.gem" FileUtils.mv File.join(@gemhome, 'cache', "#{spec.original_name}.gem"), cache_file - FileUtils.rm File.join(@gemhome, 'specifications', - "#{spec.full_name}.gemspec") + FileUtils.rm File.join(@gemhome, 'specifications', spec.spec_name) spec.loaded_from = nil spec.loaded = false @@ -417,26 +412,6 @@ Also, a list: Gem::RemoteFetcher.fetcher = @fetcher end - def util_setup_source_info_cache(*specs) - require 'rubygems/source_info_cache' - require 'rubygems/source_info_cache_entry' - - specs = Hash[*specs.map { |spec| [spec.full_name, spec] }.flatten] - si = Gem::SourceIndex.new specs - - sice = Gem::SourceInfoCacheEntry.new si, 0 - sic = Gem::SourceInfoCache.new - - sic.set_cache_data( { @gem_repo => sice } ) - sic.update - sic.write_cache - sic.reset_cache_data - - Gem::SourceInfoCache.instance_variable_set :@cache, sic - - si - end - def util_setup_spec_fetcher(*specs) specs = Hash[*specs.map { |spec| [spec.full_name, spec] }.flatten] si = Gem::SourceIndex.new specs @@ -583,6 +558,35 @@ Also, a list: 'rake' end + ## + # Construct a new Gem::Dependency. + + def dep name, *requirements + Gem::Dependency.new name, *requirements + end + + ## + # Construct a new Gem::Requirement. + + def req *requirements + return requirements.first if Gem::Requirement === requirements.first + Gem::Requirement.create requirements + end + + ## + # Construct a new Gem::Specification. + + def spec name, version, &block + Gem::Specification.new name, v(version), &block + end + + ## + # Construct a new Gem::Version. + + def v string + Gem::Version.create string + end + end MiniTest::Unit.autorun diff --git a/test/rubygems/insure_session.rb b/test/rubygems/insure_session.rb index 4ae706494a..8a6df89246 100644 --- a/test/rubygems/insure_session.rb +++ b/test/rubygems/insure_session.rb @@ -1,11 +1,3 @@ -#!/usr/bin/env ruby -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - - require 'rubygems' def install_session diff --git a/test/rubygems/mockgemui.rb b/test/rubygems/mockgemui.rb index d5624960df..30a4e6f25a 100644 --- a/test/rubygems/mockgemui.rb +++ b/test/rubygems/mockgemui.rb @@ -1,11 +1,3 @@ -#!/usr/bin/env ruby -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - - require 'stringio' require 'rubygems/user_interaction' diff --git a/test/rubygems/simple_gem.rb b/test/rubygems/simple_gem.rb index 4667a08749..e9207f95cc 100644 --- a/test/rubygems/simple_gem.rb +++ b/test/rubygems/simple_gem.rb @@ -1,10 +1,4 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - - SIMPLE_GEM = <<-GEMDATA +SIMPLE_GEM = <<-GEMDATA MD5SUM = "b12a4d48febeb2289c539c2574c4b6f8" if $0 == __FILE__ require 'optparse' @@ -69,4 +63,4 @@ g1CKTjX9BGAj1w== eJwDAAAAAAE= --- eJwrKC0pVlAvzy9XyE3MU+cCACwiBP4= - GEMDATA +GEMDATA diff --git a/test/rubygems/test_config.rb b/test/rubygems/test_config.rb index 306562f585..3458a1a682 100644 --- a/test/rubygems/test_config.rb +++ b/test/rubygems/test_config.rb @@ -1,11 +1,4 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' -require 'rbconfig' require 'rubygems' class TestConfig < RubyGemTestCase diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index e6d3f896b4..72074916b2 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -181,7 +181,7 @@ class TestGem < RubyGemTestCase end def test_self_default_sources - assert_equal %w[http://gems.rubyforge.org/], Gem.default_sources + assert_equal %w[http://rubygems.org/], Gem.default_sources end def test_self_dir @@ -441,13 +441,13 @@ class TestGem < RubyGemTestCase def test_self_refresh util_make_gems - a1_spec = File.join @gemhome, "specifications", "#{@a1.full_name}.gemspec" + a1_spec = File.join @gemhome, "specifications", @a1.spec_name FileUtils.mv a1_spec, @tempdir refute Gem.source_index.gems.include?(@a1.full_name) - FileUtils.mv File.join(@tempdir, "#{@a1.full_name}.gemspec"), a1_spec + FileUtils.mv File.join(@tempdir, @a1.spec_name), a1_spec Gem.refresh diff --git a/test/rubygems/test_gem_builder.rb b/test/rubygems/test_gem_builder.rb index 23895c45fa..e5493ffc13 100644 --- a/test/rubygems/test_gem_builder.rb +++ b/test/rubygems/test_gem_builder.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/builder' diff --git a/test/rubygems/test_gem_command.rb b/test/rubygems/test_gem_command.rb index 2fb1bb1ca5..7897979d8f 100644 --- a/test/rubygems/test_gem_command.rb +++ b/test/rubygems/test_gem_command.rb @@ -1,10 +1,3 @@ -#!/usr/bin/env ruby -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/command' diff --git a/test/rubygems/test_gem_command_manager.rb b/test/rubygems/test_gem_command_manager.rb index 6cba52d3e2..143ea692bc 100644 --- a/test/rubygems/test_gem_command_manager.rb +++ b/test/rubygems/test_gem_command_manager.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/command_manager' diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb index 32e66465d8..db29226b71 100644 --- a/test/rubygems/test_gem_commands_build_command.rb +++ b/test/rubygems/test_gem_commands_build_command.rb @@ -15,7 +15,7 @@ class TestGemCommandsBuildCommand < RubyGemTestCase end def test_execute - gemspec_file = File.join(@tempdir, "#{@gem.full_name}.gemspec") + gemspec_file = File.join(@tempdir, @gem.spec_name) File.open gemspec_file, 'w' do |gs| gs.write @gem.to_ruby @@ -25,7 +25,7 @@ class TestGemCommandsBuildCommand < RubyGemTestCase end def test_execute_yaml - gemspec_file = File.join(@tempdir, "#{@gem.full_name}.gemspec") + gemspec_file = File.join(@tempdir, @gem.spec_name) File.open gemspec_file, 'w' do |gs| gs.write @gem.to_yaml @@ -61,7 +61,7 @@ class TestGemCommandsBuildCommand < RubyGemTestCase assert_equal [], output assert_equal '', @ui.error - gem_file = File.join @tempdir, "#{gem.full_name}.gem" + gem_file = File.join @tempdir, gem.file_name assert File.exist?(gem_file) spec = Gem::Format.from_file_by_path(gem_file).spec diff --git a/test/rubygems/test_gem_commands_check_command.rb b/test/rubygems/test_gem_commands_check_command.rb index 43ac982341..83065cf218 100644 --- a/test/rubygems/test_gem_commands_check_command.rb +++ b/test/rubygems/test_gem_commands_check_command.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/commands/check_command' diff --git a/test/rubygems/test_gem_commands_dependency_command.rb b/test/rubygems/test_gem_commands_dependency_command.rb index 66e9d86d52..8463017d50 100644 --- a/test/rubygems/test_gem_commands_dependency_command.rb +++ b/test/rubygems/test_gem_commands_dependency_command.rb @@ -9,12 +9,13 @@ class TestGemCommandsDependencyCommand < RubyGemTestCase @cmd = Gem::Commands::DependencyCommand.new @cmd.options[:domain] = :local - util_setup_fake_fetcher + util_setup_fake_fetcher true end def test_execute quick_gem 'foo' do |gem| gem.add_dependency 'bar', '> 1' + gem.add_dependency 'baz', '> 1' end Gem.source_index = nil @@ -25,7 +26,8 @@ class TestGemCommandsDependencyCommand < RubyGemTestCase @cmd.execute end - assert_equal "Gem foo-2\n bar (> 1, runtime)\n\n", @ui.output + assert_equal "Gem foo-2\n bar (> 1, runtime)\n baz (> 1, runtime)\n\n", + @ui.output assert_equal '', @ui.error end @@ -41,6 +43,8 @@ class TestGemCommandsDependencyCommand < RubyGemTestCase expected = <<-EOF Gem a-1 +Gem a-2.a + Gem a-2 Gem a-3.a @@ -100,6 +104,8 @@ Gem pl-1-x86-linux expected = <<-EOF Gem a-1 +Gem a-2.a + Gem a-2 Gem a-3.a @@ -173,8 +179,7 @@ ERROR: Only reverse dependencies for local gems are supported. util_setup_spec_fetcher foo - FileUtils.rm File.join(@gemhome, 'specifications', - "#{foo.full_name}.gemspec") + FileUtils.rm File.join(@gemhome, 'specifications', foo.spec_name) @cmd.options[:args] = %w[foo] @cmd.options[:domain] = :remote @@ -187,43 +192,24 @@ ERROR: Only reverse dependencies for local gems are supported. assert_equal '', @ui.error end - def test_execute_remote_legacy - foo = quick_gem 'foo' do |gem| - gem.add_dependency 'bar', '> 1' - end - + def test_execute_prerelease @fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @fetcher - Gem::SpecFetcher.fetcher = nil - si = util_setup_source_info_cache foo - - @fetcher.data["#{@gem_repo}yaml"] = YAML.dump si - @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = - si.dump - - @fetcher.data.delete "#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz" + util_setup_spec_fetcher @a2_pre - FileUtils.rm File.join(@gemhome, 'specifications', - "#{foo.full_name}.gemspec") + FileUtils.rm File.join(@gemhome, 'specifications', @a2_pre.spec_name) - @cmd.options[:args] = %w[foo] + @cmd.options[:args] = %w[a] @cmd.options[:domain] = :remote + @cmd.options[:prerelease] = true use_ui @ui do @cmd.execute end - assert_equal "Gem foo-2\n bar (> 1, runtime)\n\n", @ui.output - - expected = <<-EOF -WARNING: RubyGems 1.2+ index not found for: -\t#{@gem_repo} - -RubyGems will revert to legacy indexes degrading performance. - EOF - - assert_equal expected, @ui.error + assert_equal "Gem a-2.a\n\n", @ui.output + assert_equal '', @ui.error end end diff --git a/test/rubygems/test_gem_commands_fetch_command.rb b/test/rubygems/test_gem_commands_fetch_command.rb index fe60680a67..07e38b4b99 100644 --- a/test/rubygems/test_gem_commands_fetch_command.rb +++ b/test/rubygems/test_gem_commands_fetch_command.rb @@ -15,8 +15,8 @@ class TestGemCommandsFetchCommand < RubyGemTestCase util_setup_fake_fetcher util_setup_spec_fetcher @a2 - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - File.read(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + File.read(File.join(@gemhome, 'cache', @a2.file_name)) @cmd.options[:args] = [@a2.name] @@ -26,19 +26,21 @@ class TestGemCommandsFetchCommand < RubyGemTestCase end end - assert File.exist?(File.join(@tempdir, "#{@a2.full_name}.gem")), + assert File.exist?(File.join(@tempdir, @a2.file_name)), "#{@a2.full_name} fetched" end - def test_execute_legacy - util_setup_fake_fetcher - util_setup_source_info_cache @a2 + def test_execute_prerelease + util_setup_fake_fetcher true + util_setup_spec_fetcher @a2, @a2_pre - @fetcher.data["#{@gem_repo}yaml"] = '' - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - File.read(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + File.read(File.join(@gemhome, 'cache', @a2.file_name)) + @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = + File.read(File.join(@gemhome, 'cache', @a2_pre.file_name)) @cmd.options[:args] = [@a2.name] + @cmd.options[:prerelease] = true use_ui @ui do Dir.chdir @tempdir do @@ -46,8 +48,8 @@ class TestGemCommandsFetchCommand < RubyGemTestCase end end - assert File.exist?(File.join(@tempdir, "#{@a2.full_name}.gem")), - "#{@a2.full_name} fetched" + assert File.exist?(File.join(@tempdir, @a2_pre.file_name)), + "#{@a2_pre.full_name} not fetched" end end diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb index d7bc20d6ae..0a3071b719 100644 --- a/test/rubygems/test_gem_commands_install_command.rb +++ b/test/rubygems/test_gem_commands_install_command.rb @@ -15,10 +15,10 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher(:prerelease) util_setup_spec_fetcher @a2, @a2_pre - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) - @fetcher.data["#{@gem_repo}gems/#{@a2_pre.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2_pre.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2.file_name)) + @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2_pre.file_name)) @cmd.options[:args] = [@a2.name] @@ -37,10 +37,10 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher(:prerelease) util_setup_spec_fetcher @a2, @a2_pre - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) - @fetcher.data["#{@gem_repo}gems/#{@a2_pre.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2_pre.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2.file_name)) + @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2_pre.file_name)) @cmd.handle_options [@a2_pre.name, '--version', @a2_pre.version.to_s] assert @cmd.options[:prerelease] @@ -79,7 +79,7 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher @cmd.options[:domain] = :local - FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', @a2.file_name), File.join(@tempdir) @cmd.options[:args] = [@a2.name] @@ -109,7 +109,7 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher @cmd.options[:user_install] = false - FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', @a2.file_name), File.join(@tempdir) @cmd.options[:args] = [@a2.name] @@ -178,10 +178,10 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher(:prerelease) util_setup_spec_fetcher @a2, @a2_pre - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) - @fetcher.data["#{@gem_repo}gems/#{@a2_pre.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2_pre.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2.file_name)) + @fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2_pre.file_name)) @cmd.options[:prerelease] = true @cmd.options[:args] = [@a2_pre.name] @@ -204,8 +204,8 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher util_setup_spec_fetcher @a2 - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = - read_binary(File.join(@gemhome, 'cache', "#{@a2.full_name}.gem")) + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = + read_binary(File.join(@gemhome, 'cache', @a2.file_name)) @cmd.options[:args] = [@a2.name] @@ -232,10 +232,10 @@ class TestGemCommandsInstallCommand < RubyGemTestCase util_setup_fake_fetcher @cmd.options[:domain] = :local - FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', @a2.file_name), File.join(@tempdir) - FileUtils.mv File.join(@gemhome, 'cache', "#{@b2.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', @b2.file_name), File.join(@tempdir) @cmd.options[:args] = [@a2.name, @b2.name] diff --git a/test/rubygems/test_gem_commands_mirror_command.rb b/test/rubygems/test_gem_commands_mirror_command.rb index 167d36f8c6..0c790ac24e 100644 --- a/test/rubygems/test_gem_commands_mirror_command.rb +++ b/test/rubygems/test_gem_commands_mirror_command.rb @@ -46,10 +46,10 @@ class TestGemCommandsMirrorCommand < RubyGemTestCase @cmd.execute end - assert File.exist?(File.join(mirror, 'gems', "#{@a1.full_name}.gem")) - assert File.exist?(File.join(mirror, 'gems', "#{@a2.full_name}.gem")) - assert File.exist?(File.join(mirror, 'gems', "#{@b2.full_name}.gem")) - assert File.exist?(File.join(mirror, 'gems', "#{@c1_2.full_name}.gem")) + assert File.exist?(File.join(mirror, 'gems', @a1.file_name)) + assert File.exist?(File.join(mirror, 'gems', @a2.file_name)) + assert File.exist?(File.join(mirror, 'gems', @b2.file_name)) + assert File.exist?(File.join(mirror, 'gems', @c1_2.file_name)) assert File.exist?(File.join(mirror, "Marshal.#{@marshal_version}")) ensure orig_HOME.nil? ? ENV.delete('HOME') : ENV['HOME'] = orig_HOME diff --git a/test/rubygems/test_gem_commands_outdated_command.rb b/test/rubygems/test_gem_commands_outdated_command.rb index 8b0d8fe6f0..1abfe0f984 100644 --- a/test/rubygems/test_gem_commands_outdated_command.rb +++ b/test/rubygems/test_gem_commands_outdated_command.rb @@ -19,12 +19,10 @@ class TestGemCommandsOutdatedCommand < RubyGemTestCase remote_10 = quick_gem 'foo', '1.0' remote_20 = quick_gem 'foo', '2.0' - remote_spec_file = File.join @gemhome, 'specifications', - remote_10.full_name + ".gemspec" + remote_spec_file = File.join @gemhome, 'specifications', remote_10.spec_name FileUtils.rm remote_spec_file - remote_spec_file = File.join @gemhome, 'specifications', - remote_20.full_name + ".gemspec" + remote_spec_file = File.join @gemhome, 'specifications', remote_20.spec_name FileUtils.rm remote_spec_file @fetcher = Gem::FakeFetcher.new diff --git a/test/rubygems/test_gem_commands_owner_command.rb b/test/rubygems/test_gem_commands_owner_command.rb new file mode 100644 index 0000000000..fa4281c6a7 --- /dev/null +++ b/test/rubygems/test_gem_commands_owner_command.rb @@ -0,0 +1,105 @@ +require_relative 'gemutilities' +require 'rubygems/commands/owner_command' + +class TestGemCommandsOwnerCommand < RubyGemTestCase + + def setup + super + + @fetcher = Gem::FakeFetcher.new + Gem::RemoteFetcher.fetcher = @fetcher + Gem.configuration.rubygems_api_key = "ed244fbf2b1a52e012da8616c512fa47f9aa5250" + + @cmd = Gem::Commands::OwnerCommand.new + end + + def test_show_owners + response = <<EOF +--- +- email: [email protected] +- email: [email protected] +EOF + + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK'] + + use_ui @ui do + @cmd.show_owners("freewill") + end + + assert_equal Net::HTTP::Get, @fetcher.last_request.class + assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"] + + assert_match %r{Owners for gem: freewill}, @ui.output + assert_match %r{- [email protected]}, @ui.output + assert_match %r{- [email protected]}, @ui.output + end + + def test_show_owners_denied + response = "You don't have permission to push to this gem" + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners.yaml"] = [response, 403, 'Forbidden'] + + assert_raises MockGemUi::TermError do + use_ui @ui do + @cmd.show_owners("freewill") + end + end + + assert_match response, @ui.output + end + + def test_add_owners + response = "Owner added successfully." + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners"] = [response, 200, 'OK'] + + use_ui @ui do + @cmd.add_owners("freewill", ["[email protected]"]) + end + + assert_equal Net::HTTP::Post, @fetcher.last_request.class + assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"] + assert_equal "email=user-new1%40example.com", @fetcher.last_request.body + + assert_match response, @ui.output + end + + def test_add_owners_denied + response = "You don't have permission to push to this gem" + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden'] + + assert_raises MockGemUi::TermError do + use_ui @ui do + @cmd.add_owners("freewill", ["[email protected]"]) + end + end + + assert_match response, @ui.output + end + + def test_remove_owners + response = "Owner removed successfully." + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners"] = [response, 200, 'OK'] + + use_ui @ui do + @cmd.remove_owners("freewill", ["[email protected]"]) + end + + assert_equal Net::HTTP::Delete, @fetcher.last_request.class + assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"] + assert_equal "email=user-remove1%40example.com", @fetcher.last_request.body + + assert_match response, @ui.output + end + + def test_remove_owners_denied + response = "You don't have permission to push to this gem" + @fetcher.data["https://rubygems.org/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden'] + + assert_raises MockGemUi::TermError do + use_ui @ui do + @cmd.remove_owners("freewill", ["[email protected]"]) + end + end + + assert_match response, @ui.output + end +end diff --git a/test/rubygems/test_gem_commands_pristine_command.rb b/test/rubygems/test_gem_commands_pristine_command.rb index e5cdbbc52f..06f43aa2b6 100644 --- a/test/rubygems/test_gem_commands_pristine_command.rb +++ b/test/rubygems/test_gem_commands_pristine_command.rb @@ -75,7 +75,7 @@ class TestGemCommandsPristineCommand < RubyGemTestCase install_gem a - FileUtils.rm File.join(@gemhome, 'cache', "#{a.full_name}.gem") + FileUtils.rm File.join(@gemhome, 'cache', a.file_name) @cmd.options[:args] = %w[a] diff --git a/test/rubygems/test_gem_commands_push_command.rb b/test/rubygems/test_gem_commands_push_command.rb new file mode 100644 index 0000000000..d461bd8af6 --- /dev/null +++ b/test/rubygems/test_gem_commands_push_command.rb @@ -0,0 +1,61 @@ +require_relative 'gemutilities' +require 'rubygems/commands/push_command' + +class TestGemCommandsPushCommand < RubyGemTestCase + + def setup + super + + @gems_dir = File.join @tempdir, 'gems' + @cache_dir = File.join @gemhome, 'cache' + FileUtils.mkdir @gems_dir + Gem.configuration.rubygems_api_key = "ed244fbf2b1a52e012da8616c512fa47f9aa5250" + @spec, @path = util_gem("freewill", "1.0.0") + + @fetcher = Gem::FakeFetcher.new + Gem::RemoteFetcher.fetcher = @fetcher + + @cmd = Gem::Commands::PushCommand.new + end + + def test_sending_gem + response = "Successfully registered gem: freewill (1.0.0)" + @fetcher.data["https://rubygems.org/api/v1/gems"] = [response, 200, 'OK'] + + use_ui @ui do + @cmd.send_gem(@path) + end + + assert_match %r{Pushing gem to RubyGems.org...}, @ui.output + + assert_equal Net::HTTP::Post, @fetcher.last_request.class + assert_equal Gem.read_binary(@path), @fetcher.last_request.body + assert_equal File.size(@path), @fetcher.last_request["Content-Length"].to_i + assert_equal "application/octet-stream", @fetcher.last_request["Content-Type"] + assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"] + + assert_match response, @ui.output + end + + def test_raises_error_with_no_arguments + def @cmd.sign_in; end + assert_raises Gem::CommandLineError do + @cmd.execute + end + end + + def test_sending_gem_denied + response = "You don't have permission to push to this gem" + @fetcher.data["https://rubygems.org/api/v1/gems"] = [response, 403, 'Forbidden'] + + assert_raises MockGemUi::TermError do + use_ui @ui do + @cmd.send_gem(@path) + end + end + + assert_match response, @ui.output + end + +end + diff --git a/test/rubygems/test_gem_commands_query_command.rb b/test/rubygems/test_gem_commands_query_command.rb index c47e5bf613..b56b33b639 100644 --- a/test/rubygems/test_gem_commands_query_command.rb +++ b/test/rubygems/test_gem_commands_query_command.rb @@ -58,6 +58,28 @@ pl (1) assert_equal '', @ui.error end + def test_execute_all_prerelease + a1_name = @a1.full_name + a2_name = @a2.full_name + + @cmd.handle_options %w[-r --all --prerelease] + + use_ui @ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (3.a, 2, 1) +pl (1) + EOF + + assert_equal expected, @ui.output + assert_equal '', @ui.error + end + def test_execute_details @a2.summary = 'This is a lot of text. ' * 4 @a2.authors = ['Abraham Lincoln', 'Hirohito'] @@ -216,61 +238,6 @@ pl (1) assert_equal 1, e.exit_code end - def test_execute_legacy - Gem::SpecFetcher.fetcher = nil - si = util_setup_source_info_cache @a1, @a2, @pl1 - - @fetcher.data["#{@gem_repo}yaml"] = YAML.dump si - @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = - si.dump - - @fetcher.data.delete "#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz" - - @cmd.handle_options %w[-r] - - use_ui @ui do - @cmd.execute - end - - expected = <<-EOF - -*** REMOTE GEMS *** - -a (2) -pl (1) - EOF - - assert_equal expected, @ui.output - - expected = <<-EOF -WARNING: RubyGems 1.2+ index not found for: -\t#{@gem_repo} - -RubyGems will revert to legacy indexes degrading performance. - EOF - - assert_equal expected, @ui.error - end - - def test_execute_legacy_prerelease - Gem::SpecFetcher.fetcher = nil - si = util_setup_source_info_cache @a1, @a2, @pl1 - - @fetcher.data["#{@gem_repo}yaml"] = YAML.dump si - @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = - si.dump - - @fetcher.data.delete "#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz" - - @cmd.handle_options %w[-r --prerelease] - - e = assert_raises Gem::OperationNotSupportedError do - @cmd.execute - end - - assert_equal 'Prereleases not supported on legacy repositories', e.message - end - def test_execute_local_details @a3a.summary = 'This is a lot of text. ' * 4 @a3a.authors = ['Abraham Lincoln', 'Hirohito'] diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb index 77df59b16d..34632ea5f1 100644 --- a/test/rubygems/test_gem_commands_sources_command.rb +++ b/test/rubygems/test_gem_commands_sources_command.rb @@ -115,48 +115,9 @@ beta-gems.example.com is not a URI assert_equal '', @ui.error end - def test_execute_add_legacy - util_setup_fake_fetcher - util_setup_source_info_cache - - si = Gem::SourceIndex.new - si.add_spec @a1 - - @fetcher.data["#{@new_repo}/yaml"] = '' - - @cmd.handle_options %W[--add #{@new_repo}] - - use_ui @ui do - @cmd.execute - end - - assert_equal [@gem_repo], Gem.sources - - expected = <<-EOF -WARNING: RubyGems 1.2+ index not found for: -\t#{@new_repo} - -Will cause RubyGems to revert to legacy indexes, degrading performance. - EOF - - assert_equal "#{@new_repo} added to sources\n", @ui.output - assert_equal expected, @ui.error - end - def test_execute_clear_all @cmd.handle_options %w[--clear-all] - util_setup_source_info_cache - - cache = Gem::SourceInfoCache.cache - cache.update - cache.write_cache - - assert File.exist?(cache.system_cache_file), - 'system cache file' - assert File.exist?(cache.latest_system_cache_file), - 'latest system cache file' - util_setup_spec_fetcher fetcher = Gem::SpecFetcher.fetcher @@ -179,11 +140,6 @@ Will cause RubyGems to revert to legacy indexes, degrading performance. assert_equal expected, @ui.output assert_equal '', @ui.error - refute File.exist?(cache.system_cache_file), - 'system cache file' - refute File.exist?(cache.latest_system_cache_file), - 'latest system cache file' - refute File.exist?(fetcher.dir), 'cache dir removed' end @@ -249,30 +205,5 @@ Will cause RubyGems to revert to legacy indexes, degrading performance. assert_equal '', @ui.error end - def test_execute_update_legacy - @cmd.handle_options %w[--update] - - util_setup_fake_fetcher - util_setup_source_info_cache - Gem::SourceInfoCache.reset - - si = Gem::SourceIndex.new - si.add_spec @a1 - @fetcher.data["#{@gem_repo}yaml"] = YAML.dump si - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = si.dump - - use_ui @ui do - @cmd.execute - end - - expected = <<-EOF -Bulk updating Gem source index for: #{@gem_repo} -source cache successfully updated - EOF - - assert_equal expected, @ui.output - assert_equal '', @ui.error - end - end diff --git a/test/rubygems/test_gem_commands_specification_command.rb b/test/rubygems/test_gem_commands_specification_command.rb index 49b82f986a..6a43439969 100644 --- a/test/rubygems/test_gem_commands_specification_command.rb +++ b/test/rubygems/test_gem_commands_specification_command.rb @@ -80,7 +80,7 @@ class TestGemCommandsSpecificationCommand < RubyGemTestCase @cmd.execute end - assert_equal "--- foo\n\n", @ui.output + assert_equal "foo", YAML.load(@ui.output) end def test_execute_marshal @@ -106,8 +106,7 @@ class TestGemCommandsSpecificationCommand < RubyGemTestCase util_setup_spec_fetcher foo - FileUtils.rm File.join(@gemhome, 'specifications', - "#{foo.full_name}.gemspec") + FileUtils.rm File.join(@gemhome, 'specifications', foo.spec_name) @cmd.options[:args] = %w[foo] @cmd.options[:domain] = :remote diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb index 092a9072c0..cd440f63ee 100644 --- a/test/rubygems/test_gem_commands_uninstall_command.rb +++ b/test/rubygems/test_gem_commands_uninstall_command.rb @@ -59,7 +59,7 @@ class TestGemCommandsUninstallCommand < GemInstallerTestCase def test_execute_prerelease @spec = quick_gem "pre", "2.b" - @gem = File.join @tempdir, "#{@spec.full_name}.gem" + @gem = File.join @tempdir, @spec.file_name FileUtils.touch @gem util_setup_gem diff --git a/test/rubygems/test_gem_commands_update_command.rb b/test/rubygems/test_gem_commands_update_command.rb index 8949897736..5264cd3955 100644 --- a/test/rubygems/test_gem_commands_update_command.rb +++ b/test/rubygems/test_gem_commands_update_command.rb @@ -13,14 +13,14 @@ class TestGemCommandsUpdateCommand < RubyGemTestCase util_setup_fake_fetcher - @a1_path = File.join @gemhome, 'cache', "#{@a1.full_name}.gem" - @a2_path = File.join @gemhome, 'cache', "#{@a2.full_name}.gem" + @a1_path = File.join @gemhome, 'cache', @a1.file_name + @a2_path = File.join @gemhome, 'cache', @a2.file_name util_setup_spec_fetcher @a1, @a2 - @fetcher.data["#{@gem_repo}gems/#{@a1.full_name}.gem"] = + @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = read_binary @a1_path - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = + @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = read_binary @a2_path end @@ -65,9 +65,9 @@ class TestGemCommandsUpdateCommand < RubyGemTestCase @a2.add_dependency 'c', '2' @a2.add_dependency 'b', '2' - @b2_path = File.join @gemhome, 'cache', "#{@b2.full_name}.gem" - @c1_2_path = File.join @gemhome, 'cache', "#{@c1_2.full_name}.gem" - @c2_path = File.join @gemhome, 'cache', "#{@c2.full_name}.gem" + @b2_path = File.join @gemhome, 'cache', @b2.file_name + @c1_2_path = File.join @gemhome, 'cache', @c1_2.file_name + @c2_path = File.join @gemhome, 'cache', @c2.file_name @source_index = Gem::SourceIndex.new @source_index.add_spec @a1 @@ -80,12 +80,12 @@ class TestGemCommandsUpdateCommand < RubyGemTestCase util_build_gem @a2 util_build_gem @c2 - @fetcher.data["#{@gem_repo}gems/#{@a1.full_name}.gem"] = read_binary @a1_path - @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = read_binary @a2_path - @fetcher.data["#{@gem_repo}gems/#{@b2.full_name}.gem"] = read_binary @b2_path - @fetcher.data["#{@gem_repo}gems/#{@c1_2.full_name}.gem"] = + @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/#{@c2.full_name}.gem"] = read_binary @c2_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 diff --git a/test/rubygems/test_gem_commands_which_command.rb b/test/rubygems/test_gem_commands_which_command.rb new file mode 100644 index 0000000000..137f598378 --- /dev/null +++ b/test/rubygems/test_gem_commands_which_command.rb @@ -0,0 +1,66 @@ +require_relative 'gemutilities' +require 'rubygems/commands/which_command' + +class TestGemCommandsWhichCommand < RubyGemTestCase + + def setup + super + @cmd = Gem::Commands::WhichCommand.new + end + + def test_execute + util_foo_bar + + @cmd.handle_options %w[foo_bar] + + use_ui @ui do + @cmd.execute + end + + assert_equal "#{@foo_bar.full_gem_path}/lib/foo_bar.rb\n", @ui.output + assert_equal '', @ui.error + end + + def test_execute_one_missing + util_foo_bar + + @cmd.handle_options %w[foo_bar missing] + + use_ui @ui do + @cmd.execute + 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%, + @ui.error + end + + def test_execute_missing + @cmd.handle_options %w[missing] + + use_ui @ui do + assert_raises MockGemUi::TermError do + @cmd.execute + end + end + + assert_equal '', @ui.output + assert_match %r%Can't find ruby library file or shared library missing\n%, + @ui.error + end + + def util_foo_bar + files = %w[lib/foo_bar.rb Rakefile] + @foo_bar = quick_gem 'foo_bar' do |gem| + gem.files = files + end + + files.each do |file| + filename = @foo_bar.full_gem_path + "/#{file}" + FileUtils.mkdir_p File.dirname(filename) + FileUtils.touch filename + end + end + +end + diff --git a/test/rubygems/test_gem_config_file.rb b/test/rubygems/test_gem_config_file.rb index 1dd0d448ff..4cd0790b92 100644 --- a/test/rubygems/test_gem_config_file.rb +++ b/test/rubygems/test_gem_config_file.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/config_file' @@ -271,6 +265,18 @@ class TestGemConfigFile < RubyGemTestCase assert_equal %w[http://even-more-gems.example.com], Gem.sources end + def test_load_rubygems_api_key_from_credentials + temp_cred = File.join Gem.user_home, '.gem', 'credentials' + FileUtils.mkdir File.dirname(temp_cred) + File.open temp_cred, 'w' do |fp| + fp.puts ":rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97" + end + + util_config_file + + assert_equal "701229f217cdf23b1344c7b4b54ca97", @cfg.rubygems_api_key + end + def util_config_file(args = @cfg_args) @cfg = Gem::ConfigFile.new args end diff --git a/test/rubygems/test_gem_dependency.rb b/test/rubygems/test_gem_dependency.rb index acaa3a8c4e..1f361229a4 100644 --- a/test/rubygems/test_gem_dependency.rb +++ b/test/rubygems/test_gem_dependency.rb @@ -1,189 +1,137 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' -require 'rubygems/version' +require 'rubygems/dependency' class TestGemDependency < RubyGemTestCase - def setup - super - - @pkg1_0 = Gem::Dependency.new 'pkg', ['> 1.0'] - @pkg1_1 = Gem::Dependency.new 'pkg', ['> 1.1'] - - @oth1_0 = Gem::Dependency.new 'other', ['> 1.0'] + def test_subclass + sc = Class.new Gem::Dependency + def sc.requirement() bogus; end - @r1_0 = Gem::Requirement.new ['> 1.0'] - end + out, err = capture_io do + assert_equal Gem::Requirement.default, sc.new('a').version_requirement + end - def dep(name, version) - Gem::Dependency.new name, version + assert_match %r%deprecated%, err end def test_initialize - assert_equal "pkg", @pkg1_0.name - assert_equal @r1_0, @pkg1_0.version_requirements + d = dep "pkg", "> 1.0" + + assert_equal "pkg", d.name + assert_equal req("> 1.0"), d.requirement end def test_initialize_double - dep = Gem::Dependency.new("pkg", ["> 1.0", "< 2.0"]) - - assert_equal Gem::Requirement.new(["> 1.0", "< 2.0"]), - dep.version_requirements + d = dep "pkg", "> 1.0", "< 2.0" + assert_equal req("> 1.0", "< 2.0"), d.requirement end def test_initialize_empty - dep = Gem::Dependency.new("pkg", []) - req = @r1_0 - - req.instance_eval do - @version = ">= 1.0" - @op = ">=" - @nums = [1,0] - @requirements = nil - end - - dep.instance_eval do - @version_requirement = req - @version_requirements = nil - end - - assert_equal Gem::Requirement.new([">= 1.0"]), dep.version_requirements - end - - def test_initialize_version - dep = Gem::Dependency.new 'pkg', Gem::Version.new('2') - - assert_equal 'pkg', dep.name - - assert_equal Gem::Requirement.new('= 2'), dep.version_requirements + d = dep "pkg" + assert_equal req(">= 0"), d.requirement end - def test_initialize_with_type - dep = Gem::Dependency.new("pkg", [], :development) - assert_equal(:development, dep.type) - end + def test_initialize_type + assert_equal :runtime, dep("pkg").type + assert_equal :development, dep("pkg", [], :development).type - def test_type_is_runtime_by_default - assert_equal(:runtime, Gem::Dependency.new("pkg", []).type) - end - - def test_type_is_restricted assert_raises ArgumentError do - Gem::Dependency.new("pkg", [:sometimes]) + dep "pkg", :sometimes end end + def test_initialize_version + d = dep "pkg", v("2") + assert_equal req("= 2"), d.requirement + end + def test_equals2 - assert_equal @pkg1_0, @pkg1_0.dup - assert_equal @pkg1_0.dup, @pkg1_0 + o = dep "other" + d = dep "pkg", "> 1.0" + d1 = dep "pkg", "> 1.1" + + assert_equal d, d.dup + assert_equal d.dup, d - refute_equal @pkg1_0, @pkg1_1, "requirements different" - refute_equal @pkg1_1, @pkg1_0, "requirements different" + refute_equal d, d1 + refute_equal d1, d - refute_equal @pkg1_0, @oth1_0, "names different" - refute_equal @oth1_0, @pkg1_0, "names different" + refute_equal d, o + refute_equal o, d - refute_equal @pkg1_0, Object.new - refute_equal Object.new, @pkg1_0 + refute_equal d, Object.new + refute_equal Object.new, d end def test_equals2_type - runtime = Gem::Dependency.new("pkg", []) - development = Gem::Dependency.new("pkg", [], :development) - - refute_equal(runtime, development) + refute_equal dep("pkg", :runtime), dep("pkg", :development) end def test_equals_tilde - a0 = dep 'a', '0' - a1 = dep 'a', '1' - b0 = dep 'b', '0' - - pa0 = dep 'a', '>= 0' - pa0r = dep(/a/, '>= 0') - pab0r = dep(/a|b/, '>= 0') - - assert_match a0, a0, 'match self' - assert_match pa0, a0, 'match version exact' - assert_match pa0, a1, 'match version' - assert_match pa0r, a0, 'match regex simple' - assert_match pab0r, a0, 'match regex complex' - - refute_match pa0r, b0, 'fail match regex' - refute_match pa0r, Object.new, 'fail match Object' - end + d = dep "a", "0" - def test_equals_tilde_escape - a1 = Gem::Dependency.new 'a', '1' + assert_match d, d, "matche 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" - pab1 = Gem::Dependency.new 'a|b', '>= 1' - pab1r = Gem::Dependency.new(/a|b/, '>= 1') + refute_match dep(/a/), dep("b") + refute_match dep("a"), Object.new + end - refute_match pab1, a1, 'escaped' - assert_match pab1r, a1, 'exact regexp' + def test_equals_tilde_escape + refute_match dep("a|b"), dep("a", "1") + assert_match dep(/a|b/), dep("a", "1") end def test_equals_tilde_object - a0 = Object.new - - def a0.name() 'a' end - def a0.version() '0' end - - pa0 = Gem::Dependency.new 'a', '>= 0' + o = Object.new + def o.name ; 'a' end + def o.version ; '0' end - assert_match pa0, a0, 'match version exact' + assert_match dep("a"), o end def test_equals_tilde_spec - def spec(name, version) - Gem::Specification.new do |spec| - spec.name = name - spec.version = version - end - end + 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") + end - a0 = spec 'a', '0' - a1 = spec 'a', '1' - b0 = spec 'b', '0' + def test_hash + d = dep "pkg", "1.0" - pa0 = dep 'a', '>= 0' - pa0r = dep(/a/, '>= 0') - pab0r = dep(/a|b/, '>= 0') + assert_equal d.hash, d.dup.hash + assert_equal d.dup.hash, d.hash - assert_match pa0, a0, 'match version exact' - assert_match pa0, a1, 'match version' + refute_equal dep("pkg", "1.0").hash, dep("pkg", "2.0").hash, "requirement" + refute_equal dep("pkg", "1.0").hash, dep("abc", "1.0").hash, "name" + refute_equal dep("pkg", :development), dep("pkg", :runtime), "type" + end - assert_match pa0r, a0, 'match regex simple' - assert_match pa0r, a1, 'match regex simple' + def test_prerelease_eh + d = dep "pkg", "= 1" - assert_match pab0r, a0, 'match regex complex' - assert_match pab0r, b0, 'match regex complex' + refute d.prerelease? - refute_match pa0r, b0, 'fail match regex' - refute_match pa0r, Object.new, 'fail match Object' - end + d.prerelease = true - def test_hash - assert_equal @pkg1_0.hash, @pkg1_0.dup.hash - assert_equal @pkg1_0.dup.hash, @pkg1_0.hash + assert d.prerelease? - refute_equal @pkg1_0.hash, @pkg1_1.hash, "requirements different" - refute_equal @pkg1_1.hash, @pkg1_0.hash, "requirements different" + d = dep "pkg", "= 1.a" - refute_equal @pkg1_0.hash, @oth1_0.hash, "names different" - refute_equal @oth1_0.hash, @pkg1_0.hash, "names different" - end + assert d.prerelease? + + d.prerelease = false + + assert d.prerelease? - def test_hash_type - runtime = Gem::Dependency.new("pkg", []) - development = Gem::Dependency.new("pkg", [], :development) + d = dep "pkg", "> 1.a", "> 2" - refute_equal(runtime.hash, development.hash) + assert d.prerelease? end end diff --git a/test/rubygems/test_gem_dependency_installer.rb b/test/rubygems/test_gem_dependency_installer.rb index 76d541bb81..237c0a02a4 100644 --- a/test/rubygems/test_gem_dependency_installer.rb +++ b/test/rubygems/test_gem_dependency_installer.rb @@ -23,6 +23,16 @@ class TestGemDependencyInstaller < RubyGemTestCase s.add_development_dependency 'aa' end + @b1_pre, @b1_pre_gem = util_gem 'b', '1.a' do |s| + s.add_dependency 'a' + s.add_development_dependency 'aa' + end + + @c1_pre, @c1_pre_gem = util_gem 'c', '1.a' do |s| + s.add_dependency 'a', '1.a' + s.add_dependency 'b', '1' + end + @d1, @d1_gem = util_gem 'd', '1' @d2, @d2_gem = util_gem 'd', '2' @@ -46,8 +56,8 @@ class TestGemDependencyInstaller < RubyGemTestCase @fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @fetcher - si = util_setup_spec_fetcher(@a1, @a1_pre, @b1, @d1, @d2, @x1_m, @x1_o, @w1, @y1, - @y1_1_p, @z1) + si = util_setup_spec_fetcher(@a1, @a1_pre, @b1, @b1_pre, @c1_pre, @d1, @d2, + @x1_m, @x1_o, @w1, @y1, @y1_1_p, @z1) util_clear_gems end @@ -104,8 +114,8 @@ class TestGemDependencyInstaller < RubyGemTestCase assert_equal %w[a-1 b-1], inst.installed_gems.map { |s| s.full_name } - assert File.exist?(File.join(@tempdir, 'cache', "#{@a1.full_name}.gem")) - assert File.exist?(File.join(@tempdir, 'cache', "#{@b1.full_name}.gem")) + assert File.exist?(File.join(@tempdir, 'cache', @a1.file_name)) + assert File.exist?(File.join(@tempdir, 'cache', @b1.file_name)) end def test_install_dependencies_satisfied @@ -124,7 +134,7 @@ class TestGemDependencyInstaller < RubyGemTestCase inst.install 'a-2' end - FileUtils.rm File.join(@tempdir, "#{a2.full_name}.gem") + FileUtils.rm File.join(@tempdir, a2.file_name) Dir.chdir @tempdir do inst = Gem::DependencyInstaller.new @@ -259,7 +269,9 @@ class TestGemDependencyInstaller < RubyGemTestCase inst.install 'a' end - assert_match %r|\A#!/\S+/env #{Gem::ConfigMap[:ruby_install_name]}\n|, + env = "/\\S+/env" unless Gem.win_platform? + + assert_match %r|\A#!#{env} #{Gem::ConfigMap[:ruby_install_name]}\n|, File.read(File.join(@gemhome, 'bin', 'a_bin')) end @@ -302,10 +314,8 @@ class TestGemDependencyInstaller < RubyGemTestCase assert_equal %w[a-1], inst.installed_gems.map { |s| s.full_name } - assert File.exist?(File.join(gemhome2, 'specifications', - "#{@a1.full_name}.gemspec")) - assert File.exist?(File.join(gemhome2, 'cache', - "#{@a1.full_name}.gem")) + assert File.exist?(File.join(gemhome2, 'specifications', @a1.spec_name)) + assert File.exist?(File.join(gemhome2, 'cache', @a1.file_name)) end def test_install_domain_both @@ -327,10 +337,8 @@ class TestGemDependencyInstaller < RubyGemTestCase 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.full_name}.gemspec") - b1_expected = File.join(@gemhome, 'specifications', - "#{b1.full_name}.gemspec") + 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 @@ -463,9 +471,9 @@ class TestGemDependencyInstaller < RubyGemTestCase File.open @a1_gem, 'rb' do |fp| a1_data = fp.read end File.open a2_o_gem, 'rb' do |fp| a2_o_data = fp.read end - @fetcher.data["http://gems.example.com/gems/#{@a1.full_name}.gem"] = + @fetcher.data["http://gems.example.com/gems/#{@a1.file_name}"] = a1_data - @fetcher.data["http://gems.example.com/gems/#{a2_o.full_name}.gem"] = + @fetcher.data["http://gems.example.com/gems/#{a2_o.file_name}"] = a2_o_data inst = Gem::DependencyInstaller.new :domain => :remote @@ -576,10 +584,29 @@ class TestGemDependencyInstaller < RubyGemTestCase local = gems.last assert_equal 'a-1', local.first.full_name, 'local spec' - assert_equal File.join(@tempdir, "#{@a1.full_name}.gem"), + assert_equal File.join(@tempdir, @a1.file_name), local.last, 'local path' end + def test_find_gems_with_sources_prerelease + installer = Gem::DependencyInstaller.new + + dependency = Gem::Dependency.new('a', Gem::Requirement.default) + + releases = + installer.find_gems_with_sources(dependency).map { |gems, *| gems } + + assert releases.any? { |s| s.name == 'a' and s.version.to_s == '1' } + refute releases.any? { |s| s.name == 'a' and s.version.to_s == '1.a' } + + dependency.prerelease = true + + prereleases = + installer.find_gems_with_sources(dependency).map { |gems, *| gems } + + assert_equal [@a1_pre], prereleases + end + def test_gather_dependencies inst = Gem::DependencyInstaller.new inst.find_spec_by_name_and_version 'b' @@ -622,6 +649,15 @@ class TestGemDependencyInstaller < RubyGemTestCase assert_equal %w[y-1 z-1], inst.gems_to_install.map { |s| s.full_name } end + def test_gather_dependencies_prerelease + inst = Gem::DependencyInstaller.new :prerelease => true + inst.find_spec_by_name_and_version 'c', '1.a' + inst.gather_dependencies + + assert_equal %w[a-1.a b-1 c-1.a], + inst.gems_to_install.map { |s| s.full_name } + end + def test_gather_dependencies_old_required e1, = util_gem 'e', '1' do |s| s.add_dependency 'd', '= 1' end @@ -636,16 +672,5 @@ class TestGemDependencyInstaller < RubyGemTestCase assert_equal %w[d-1 e-1], inst.gems_to_install.map { |s| s.full_name } end - def test_prerelease_uses_pre_index - installer = Gem::DependencyInstaller.new - pre_installer = Gem::DependencyInstaller.new(:prerelease => true) - dependency = Gem::Dependency.new('a', Gem::Requirement.default) - - releases = installer.find_gems_with_sources(dependency).map{ |gems, *| gems } - prereleases = pre_installer.find_gems_with_sources(dependency).map{ |gems, *| gems } - - assert releases.select{ |s| s.name == 'a' and s.version.to_s == '1' }.first - assert releases.select{ |s| s.name == 'a' and s.version.to_s == '1.a' }.empty? - assert_equal [@a1_pre], prereleases - end end + diff --git a/test/rubygems/test_gem_dependency_list.rb b/test/rubygems/test_gem_dependency_list.rb index d8066c9238..eacd912f7a 100644 --- a/test/rubygems/test_gem_dependency_list.rb +++ b/test/rubygems/test_gem_dependency_list.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/dependency_list' @@ -71,6 +65,33 @@ class TestGemDependencyList < RubyGemTestCase assert_equal %w[b-1 c-1 a-1], order.map { |s| s.full_name } end + def test_dependency_order_development + e1 = quick_gem 'e', '1' + f1 = quick_gem 'f', '1' + g1 = quick_gem 'g', '1' + + @a1.add_dependency 'e' + @a1.add_dependency 'f' + @a1.add_dependency 'g' + g1.add_development_dependency 'a' + + deplist = Gem::DependencyList.new true + deplist.add @a1, e1, f1, g1 + + order = deplist.dependency_order + + assert_equal %w[g-1 a-1 f-1 e-1], order.map { |s| s.full_name }, + 'development on' + + deplist2 = Gem::DependencyList.new + deplist2.add @a1, e1, f1, g1 + + order = deplist2.dependency_order + + assert_equal %w[a-1 g-1 f-1 e-1], order.map { |s| s.full_name }, + 'development off' + end + def test_dependency_order_diamond util_diamond e1 = quick_gem 'e', '1' diff --git a/test/rubygems/test_gem_digest.rb b/test/rubygems/test_gem_digest.rb deleted file mode 100644 index 6bce4e4537..0000000000 --- a/test/rubygems/test_gem_digest.rb +++ /dev/null @@ -1,46 +0,0 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - -require_relative 'gemutilities' -require "rubygems/digest/md5" -require "rubygems/digest/sha1" -require "rubygems/digest/sha2" - -class TestRubygemsGemDigest < RubyGemTestCase - - def test_sha256_hex_digest_works - digester = Gem::SHA256.new - assert_equal "b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78", digester.hexdigest("ABC") - end - - def test_sha256_digest_works - digester = Gem::SHA256.new - assert_equal "\265\324\004\\?Fo\251\037\342\314j\276y#*\032W\315\361\004\367\242nqn\n\036'\211\337x", - digester.digest("ABC") - end - - def test_sha1_hex_digest_works - digester = Gem::SHA1.new - assert_equal "3c01bdbb26f358bab27f267924aa2c9a03fcfdb8", digester.hexdigest("ABC") - end - - def test_sha1_digest_works - digester = Gem::SHA1.new - assert_equal "<\001\275\273&\363X\272\262\177&y$\252,\232\003\374\375\270", digester.digest("ABC") - end - - def test_md5_hex_digest_works - digester = Gem::MD5.new - assert_equal "902fbdd2b1df0c4f70b4a5d23525e932", digester.hexdigest("ABC") - end - - def test_md5_digest_works - digester = Gem::MD5.new - assert_equal "\220/\275\322\261\337\fOp\264\245\3225%\3512", digester.digest("ABC") - end - -end - diff --git a/test/rubygems/test_gem_doc_manager.rb b/test/rubygems/test_gem_doc_manager.rb index e3928ed2bc..46f425b9ba 100644 --- a/test/rubygems/test_gem_doc_manager.rb +++ b/test/rubygems/test_gem_doc_manager.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/doc_manager' diff --git a/test/rubygems/test_gem_format.rb b/test/rubygems/test_gem_format.rb index d9ddf0be92..555f98d77c 100644 --- a/test/rubygems/test_gem_format.rb +++ b/test/rubygems/test_gem_format.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require_relative 'simple_gem' require 'rubygems/format' @@ -16,7 +10,7 @@ class TestGemFormat < RubyGemTestCase @simple_gem = SIMPLE_GEM end - def test_from_file_by_path + def test_class_from_file_by_path util_make_gems gems = Dir[File.join(@gemhome, 'cache', '*.gem')] @@ -34,13 +28,22 @@ class TestGemFormat < RubyGemTestCase end end - def test_from_file_by_path_nonexistent + def test_class_from_file_by_path_empty + util_make_gems + + empty_gem = File.join @tempdir, 'empty.gem' + FileUtils.touch empty_gem + + assert_nil Gem::Format.from_file_by_path(empty_gem) + end + + def test_class_from_file_by_path_nonexistent assert_raises Gem::Exception do Gem::Format.from_file_by_path '/nonexistent' end end - def test_from_io_garbled + def test_class_from_io_garbled e = assert_raises Gem::Package::FormatError do # subtly bogus input Gem::Format.from_io(StringIO.new(@simple_gem.upcase)) diff --git a/test/rubygems/test_gem_gem_path_searcher.rb b/test/rubygems/test_gem_gem_path_searcher.rb index 8a08ed8d06..3fb54d08f2 100644 --- a/test/rubygems/test_gem_gem_path_searcher.rb +++ b/test/rubygems/test_gem_gem_path_searcher.rb @@ -22,6 +22,9 @@ class TestGemGemPathSearcher < RubyGemTestCase @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 + @fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @fetcher @@ -50,6 +53,10 @@ class TestGemGemPathSearcher < RubyGemTestCase assert_equal expected, lib_dirs end + def test_lib_dirs_for_nil_require_paths + assert_nil @gps.lib_dirs_for(@nrp) + end + def test_matching_file_eh refute @gps.matching_file?(@foo1, 'bar') assert @gps.matching_file?(@foo1, 'foo') @@ -63,5 +70,9 @@ class TestGemGemPathSearcher < RubyGemTestCase assert_equal [expected], @gps.matching_files(@foo1, 'foo') end + def test_matching_files_nil_require_paths + assert_empty @gps.matching_files(@nrp, 'foo') + end + end diff --git a/test/rubygems/test_gem_gemcutter_utilities.rb b/test/rubygems/test_gem_gemcutter_utilities.rb new file mode 100644 index 0000000000..f8306d583f --- /dev/null +++ b/test/rubygems/test_gem_gemcutter_utilities.rb @@ -0,0 +1,103 @@ +require_relative 'gemutilities' +require 'rubygems' +require 'rubygems/gemcutter_utilities' + +class TestGemGemcutterUtilities < RubyGemTestCase + + def setup + super + + ENV['RUBYGEMS_HOST'] = nil + Gem.configuration.rubygems_api_key = nil + + @cmd = Gem::Command.new '', 'summary' + @cmd.extend Gem::GemcutterUtilities + end + + def test_sign_in + api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903' + util_sign_in [api_key, 200, 'OK'] + + assert_match %r{Enter your RubyGems.org credentials.}, @sign_in_ui.output + assert @fetcher.last_request["authorization"] + assert_match %r{Signed in.}, @sign_in_ui.output + + credentials = YAML.load_file Gem.configuration.credentials_path + assert_equal api_key, credentials[:rubygems_api_key] + end + + def test_sign_in_with_host + api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903' + util_sign_in [api_key, 200, 'OK'], 'http://example.com' + + assert_match %r{Enter your RubyGems.org credentials.}, @sign_in_ui.output + assert @fetcher.last_request["authorization"] + assert_match %r{Signed in.}, @sign_in_ui.output + + credentials = YAML.load_file Gem.configuration.credentials_path + assert_equal api_key, credentials[:rubygems_api_key] + end + + def test_sign_in_skips_with_existing_credentials + api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903' + Gem.configuration.rubygems_api_key = api_key + + util_sign_in [api_key, 200, 'OK'] + + assert_equal "", @sign_in_ui.output + end + + def test_sign_in_with_other_credentials_doesnt_overwrite_other_keys + api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903' + other_api_key = 'f46dbb18bb6a9c97cdc61b5b85c186a17403cdcbf' + + FileUtils.mkdir_p File.dirname(Gem.configuration.credentials_path) + open Gem.configuration.credentials_path, 'w' do |f| + f.write Hash[:other_api_key, other_api_key].to_yaml + end + util_sign_in [api_key, 200, 'OK'] + + assert_match %r{Enter your RubyGems.org credentials.}, @sign_in_ui.output + assert_match %r{Signed in.}, @sign_in_ui.output + + credentials = YAML.load_file Gem.configuration.credentials_path + assert_equal api_key, credentials[:rubygems_api_key] + assert_equal other_api_key, credentials[:other_api_key] + end + + def test_sign_in_with_bad_credentials + skip 'Always uses $stdin on windows' if Gem.win_platform? + + assert_raises MockGemUi::TermError do + util_sign_in ['Access Denied.', 403, 'Forbidden'] + end + + assert_match %r{Enter your RubyGems.org credentials.}, @sign_in_ui.output + assert_match %r{Access Denied.}, @sign_in_ui.output + end + + def util_sign_in response, host = nil + skip 'Always uses $stdin on windows' if Gem.win_platform? + + email = '[email protected]' + password = 'secret' + + if host + ENV['RUBYGEMS_HOST'] = host + else + host = "https://rubygems.org" + end + + @fetcher = Gem::FakeFetcher.new + @fetcher.data["#{host}/api/v1/api_key"] = response + Gem::RemoteFetcher.fetcher = @fetcher + + @sign_in_ui = MockGemUi.new "#{email}\n#{password}\n" + + use_ui @sign_in_ui do + @cmd.sign_in + end + end + +end + diff --git a/test/rubygems/test_gem_indexer.rb b/test/rubygems/test_gem_indexer.rb index e612a71d55..7bc4862d7b 100644 --- a/test/rubygems/test_gem_indexer.rb +++ b/test/rubygems/test_gem_indexer.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/indexer' @@ -145,19 +139,19 @@ pl-1-i386-linux assert_equal expected, latest_quick_index - assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@c1_2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@a1.spec_name}.rz" + assert_indexed quickdir, "#{@a2.spec_name}.rz" + assert_indexed quickdir, "#{@b2.spec_name}.rz" + assert_indexed quickdir, "#{@c1_2.spec_name}.rz" assert_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" - refute_indexed quickdir, "#{@pl1.full_name}.gemspec.rz" + refute_indexed quickdir, "#{@pl1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" - refute_indexed quickdir, "#{@c1_2.full_name}.gemspec" - refute_indexed marshal_quickdir, "#{@c1_2.full_name}.gemspec" + refute_indexed quickdir, @c1_2.spec_name + refute_indexed marshal_quickdir, @c1_2.spec_name assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -172,7 +166,7 @@ pl-1-i386-linux <title>ExampleForge gems</title> <link>http://example.com</link> <description>Recently released gems from http://example.com</description> - <generator>RubyGems v1.3.4</generator> + <generator>RubyGems v#{Gem::RubyGemsVersion}</generator> <docs>http://cyber.law.harvard.edu/rss/rss.html</docs> <item> <title>a-2</title> @@ -325,19 +319,19 @@ eighty characters.</pre> assert_indexed quickdir, "latest_index" assert_indexed quickdir, "latest_index.rz" - assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@c1_2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@a1.spec_name}.rz" + assert_indexed quickdir, "#{@a2.spec_name}.rz" + assert_indexed quickdir, "#{@b2.spec_name}.rz" + assert_indexed quickdir, "#{@c1_2.spec_name}.rz" assert_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" - refute_indexed quickdir, "#{@pl1.full_name}.gemspec.rz" + refute_indexed quickdir, "#{@pl1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" - refute_indexed quickdir, "#{@c1_2.full_name}.gemspec" - refute_indexed marshal_quickdir, "#{@c1_2.full_name}.gemspec" + refute_indexed quickdir, "#{@c1_2.spec_name}" + refute_indexed marshal_quickdir, "#{@c1_2.spec_name}" refute_indexed @tempdir, "specs.#{@marshal_version}" refute_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -379,15 +373,15 @@ eighty characters.</pre> assert_indexed quickdir, "latest_index" assert_indexed quickdir, "latest_index.rz" - assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@c1_2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@a1.spec_name}.rz" + assert_indexed quickdir, "#{@a2.spec_name}.rz" + assert_indexed quickdir, "#{@b2.spec_name}.rz" + assert_indexed quickdir, "#{@c1_2.spec_name}.rz" assert_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -421,19 +415,19 @@ eighty characters.</pre> refute_indexed quickdir, "latest_index" refute_indexed quickdir, "latest_index.rz" - refute_indexed quickdir, "#{@a1.full_name}.gemspec.rz" - refute_indexed quickdir, "#{@a2.full_name}.gemspec.rz" - refute_indexed quickdir, "#{@b2.full_name}.gemspec.rz" - refute_indexed quickdir, "#{@c1_2.full_name}.gemspec.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, "#{@pl1.original_name}.gemspec.rz" - refute_indexed quickdir, "#{@pl1.full_name}.gemspec.rz" + refute_indexed quickdir, "#{@pl1.spec_name}.rz" - assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" - refute_indexed quickdir, "#{@c1_2.full_name}.gemspec" - refute_indexed marshal_quickdir, "#{@c1_2.full_name}.gemspec" + refute_indexed quickdir, "#{@c1_2.spec_name}" + refute_indexed marshal_quickdir, "#{@c1_2.spec_name}" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -475,15 +469,15 @@ eighty characters.</pre> assert_indexed quickdir, "latest_index" assert_indexed quickdir, "latest_index.rz" - assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz" - assert_indexed quickdir, "#{@c1_2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@a1.spec_name}.rz" + assert_indexed quickdir, "#{@a2.spec_name}.rz" + assert_indexed quickdir, "#{@b2.spec_name}.rz" + assert_indexed quickdir, "#{@c1_2.spec_name}.rz" assert_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" - assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a1.spec_name}.rz" + assert_indexed marshal_quickdir, "#{@a2.spec_name}.rz" assert_indexed @tempdir, "specs.#{@marshal_version}" assert_indexed @tempdir, "specs.#{@marshal_version}.gz" @@ -637,14 +631,14 @@ 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 File.join(@gemhome, 'cache', "#{@d2_1.full_name}.gem"), gems - FileUtils.mv File.join(@gemhome, 'cache', "#{@d2_1_a.full_name}.gem"), gems + FileUtils.mv File.join(@gemhome, 'cache', @d2_1.file_name), gems + FileUtils.mv File.join(@gemhome, 'cache', @d2_1_a.file_name), gems use_ui @ui do @indexer.update_index end - assert_indexed marshal_quickdir, "#{@d2_1.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@d2_1.spec_name}.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 9be8cde7cf..385fd9d544 100644 --- a/test/rubygems/test_gem_install_update_options.rb +++ b/test/rubygems/test_gem_install_update_options.rb @@ -19,11 +19,6 @@ class TestGemInstallUpdateOptions < GemInstallerTestCase assert @cmd.handles?(args) end - def test_prerelease - @cmd.handle_options %w[--prerelease] - assert_equal true, @cmd.options[:prerelease] - end - def test_security_policy @cmd.handle_options %w[-P HighSecurity] diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 76a7fc1d57..3fcfa4fedc 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_installer_test_case' class TestGemInstaller < GemInstallerTestCase @@ -107,19 +101,6 @@ load Gem.bin_path('a', 'my_exec', version) assert_equal 'a requires b (> 2, runtime)', e.message end - def test_expand_and_validate_gem_dir - @installer.gem_dir = '/nonexistent' - expanded_gem_dir = @installer.send(:expand_and_validate_gem_dir) - if win_platform? - expected = File.expand_path('/nonexistent').downcase - expanded_gem_dir = expanded_gem_dir.downcase - else - expected = '/nonexistent' - end - - assert_equal expected, expanded_gem_dir - end - def test_extract_files format = Object.new def format.file_entries @@ -523,11 +504,11 @@ load Gem.bin_path('a', 'my_exec', version) def test_initialize spec = quick_gem 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end - gem = File.join @tempdir, "#{spec.full_name}.gem" + gem = File.join @tempdir, spec.file_name Dir.mkdir util_inst_bindir util_build_gem spec - FileUtils.mv File.join(@gemhome, 'cache', "#{spec.full_name}.gem"), + FileUtils.mv File.join(@gemhome, 'cache', spec.file_name), @tempdir installer = Gem::Installer.new gem @@ -539,7 +520,7 @@ load Gem.bin_path('a', 'my_exec', version) Dir.mkdir util_inst_bindir util_setup_gem - cache_file = File.join @gemhome, 'cache', "#{@spec.full_name}.gem" + cache_file = File.join @gemhome, 'cache', @spec.file_name Gem.pre_install do |installer| refute File.exist?(cache_file), 'cache file should not exist yet' @@ -567,8 +548,7 @@ load Gem.bin_path('a', 'my_exec', version) assert File.exist?(File.join(gemdir, 'ext', 'a', 'Rakefile')) - spec_file = File.join(@gemhome, 'specifications', - "#{@spec.full_name}.gemspec") + spec_file = File.join(@gemhome, 'specifications', @spec.spec_name) assert_equal spec_file, @spec.loaded_from assert File.exist?(spec_file) @@ -582,7 +562,7 @@ load Gem.bin_path('a', 'my_exec', version) use_ui @ui do Dir.chdir @tempdir do Gem::Builder.new(@spec).build end - gem = File.join @tempdir, "#{@spec.full_name}.gem" + gem = File.join @tempdir, @spec.file_name end gem_data = File.open gem, 'rb' do |fp| fp.read 1024 end @@ -665,8 +645,7 @@ load Gem.bin_path('a', 'my_exec', version) assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform? assert File.exist?(File.join(gemdir, 'lib', 'code.rb')) - assert File.exist?(File.join(@gemhome, 'specifications', - "#{@spec.full_name}.gemspec")) + assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name)) end def test_install_missing_dirs @@ -676,7 +655,7 @@ load Gem.bin_path('a', 'my_exec', version) use_ui @ui do Dir.chdir @tempdir do Gem::Builder.new(@spec).build end - gem = File.join @tempdir, "#{@spec.full_name}.gem" + gem = File.join @tempdir, @spec.file_name @installer.install end @@ -685,50 +664,8 @@ load Gem.bin_path('a', 'my_exec', version) File.directory? File.join(Gem.dir, 'docs') File.directory? File.join(Gem.dir, 'specifications') - assert File.exist?(File.join(@gemhome, 'cache', "#{@spec.full_name}.gem")) - assert File.exist?(File.join(@gemhome, 'specifications', - "#{@spec.full_name}.gemspec")) - end - - unless win_platform? # File.chmod doesn't work - def test_install_user_local_fallback - Dir.mkdir util_inst_bindir - File.chmod 0755, @userhome - File.chmod 0000, util_inst_bindir - File.chmod 0000, Gem.dir - @spec.executables = ["executable"] - - build_rake_in do - use_ui @ui do - util_setup_gem - @installer.install - end - end - - assert File.exist?(File.join(Gem.user_dir, 'gems', - @spec.full_name, 'lib', 'code.rb')) - assert File.exist?(File.join(Gem.user_dir, 'bin', 'executable')) - ensure - File.chmod 0755, Gem.dir - File.chmod 0755, util_inst_bindir - end - - def test_install_bindir_read_only - Dir.mkdir util_inst_bindir - File.chmod 0755, @userhome - File.chmod 0000, util_inst_bindir - - build_rake_in do - use_ui @ui do - util_setup_gem - @installer.install - end - end - - assert File.exist?(File.join(Gem.user_dir, 'bin', 'executable')) - ensure - File.chmod 0755, util_inst_bindir - end + assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name)) + assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name)) end def test_install_with_message @@ -749,7 +686,7 @@ load Gem.bin_path('a', 'my_exec', version) e = assert_raises Gem::InstallError do installer.install end - assert_equal 'old_ruby_required requires Ruby version = 1.4.6', + assert_equal 'old_ruby_required requires Ruby version = 1.4.6.', e.message end end @@ -761,15 +698,15 @@ load Gem.bin_path('a', 'my_exec', version) util_build_gem spec - gem = File.join @gemhome, 'cache', "#{spec.full_name}.gem" + gem = File.join @gemhome, 'cache', spec.file_name use_ui @ui do @installer = Gem::Installer.new gem e = assert_raises Gem::InstallError do @installer.install end - assert_equal 'old_rubygems_required requires RubyGems version < 0', - e.message + assert_equal 'old_rubygems_required requires RubyGems version < 0. ' + + "Try 'gem update --system' to update RubyGems itself.", e.message end end @@ -825,7 +762,11 @@ load Gem.bin_path('a', 'my_exec', version) @installer.env_shebang = true shebang = @installer.shebang 'my_exec' - assert_equal "#!/usr/bin/env #{Gem::ConfigMap[:ruby_install_name]}", shebang + + env_shebang = "/usr/bin/env" unless Gem.win_platform? + + assert_equal("#!#{env_shebang} #{Gem::ConfigMap[:ruby_install_name]}", + shebang) end def test_shebang_nested @@ -889,7 +830,7 @@ load Gem.bin_path('a', 'my_exec', version) def test_write_spec spec_dir = File.join @gemhome, 'specifications' - spec_file = File.join spec_dir, "#{@spec.full_name}.gemspec" + spec_file = File.join spec_dir, @spec.spec_name FileUtils.rm spec_file refute File.exist?(spec_file) @@ -909,7 +850,7 @@ load Gem.bin_path('a', 'my_exec', version) util_build_gem spec - File.join @gemhome, 'cache', "#{spec.full_name}.gem" + File.join @gemhome, 'cache', spec.file_name end end diff --git a/test/rubygems/test_gem_package_tar_header.rb b/test/rubygems/test_gem_package_tar_header.rb index 16804452b7..cda3a0d663 100644 --- a/test/rubygems/test_gem_package_tar_header.rb +++ b/test/rubygems/test_gem_package_tar_header.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package' diff --git a/test/rubygems/test_gem_package_tar_input.rb b/test/rubygems/test_gem_package_tar_input.rb index 7eea1826e0..6938e97eba 100644 --- a/test/rubygems/test_gem_package_tar_input.rb +++ b/test/rubygems/test_gem_package_tar_input.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package/tar_input' diff --git a/test/rubygems/test_gem_package_tar_output.rb b/test/rubygems/test_gem_package_tar_output.rb index 4a07208368..0f2c0901ef 100644 --- a/test/rubygems/test_gem_package_tar_output.rb +++ b/test/rubygems/test_gem_package_tar_output.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package/tar_output' diff --git a/test/rubygems/test_gem_package_tar_reader.rb b/test/rubygems/test_gem_package_tar_reader.rb index e5b7850e56..38ad48a94d 100644 --- a/test/rubygems/test_gem_package_tar_reader.rb +++ b/test/rubygems/test_gem_package_tar_reader.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package' diff --git a/test/rubygems/test_gem_package_tar_reader_entry.rb b/test/rubygems/test_gem_package_tar_reader_entry.rb index bb154a7b6b..5323474541 100644 --- a/test/rubygems/test_gem_package_tar_reader_entry.rb +++ b/test/rubygems/test_gem_package_tar_reader_entry.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package' diff --git a/test/rubygems/test_gem_package_tar_writer.rb b/test/rubygems/test_gem_package_tar_writer.rb index 0d691e45cd..d819065a41 100644 --- a/test/rubygems/test_gem_package_tar_writer.rb +++ b/test/rubygems/test_gem_package_tar_writer.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gem_package_tar_test_case' require 'rubygems/package/tar_writer' diff --git a/test/rubygems/test_gem_package_task.rb b/test/rubygems/test_gem_package_task.rb index a8334ce4e8..2e6710f4ac 100644 --- a/test/rubygems/test_gem_package_task.rb +++ b/test/rubygems/test_gem_package_task.rb @@ -1,24 +1,3 @@ -# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - require_relative 'gemutilities' require 'rubygems' require 'rubygems/package_task' @@ -35,7 +14,6 @@ class TestGemPackageTask < MiniTest::Unit::TestCase p.package_files << "y" end assert_equal ["x", "y"], pkg.package_files - assert_equal "pkgr-1.2.3.gem", pkg.gem_file end def test_gem_package_with_current_platform @@ -49,7 +27,6 @@ class TestGemPackageTask < MiniTest::Unit::TestCase p.package_files << "y" end assert_equal ["x", "y"], pkg.package_files - assert_match(/^pkgr-1\.2\.3-(\S+)\.gem$/, pkg.gem_file) end def test_gem_package_with_ruby_platform @@ -63,7 +40,6 @@ class TestGemPackageTask < MiniTest::Unit::TestCase p.package_files << "y" end assert_equal ["x", "y"], pkg.package_files - assert_equal "pkgr-1.2.3.gem", pkg.gem_file end end diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb index e29fe60481..d6b78dc7cc 100644 --- a/test/rubygems/test_gem_remote_fetcher.rb +++ b/test/rubygems/test_gem_remote_fetcher.rb @@ -1,14 +1,8 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' +require 'ostruct' require 'webrick' -require 'zlib' require 'rubygems/remote_fetcher' -require 'ostruct' +require 'rubygems/format' # = Testing Proxy Settings # @@ -208,7 +202,7 @@ gems: fetcher = util_fuck_with_fetcher a1_data - a1_cache_gem = File.join(@gemhome, 'cache', "#{@a1.full_name}.gem") + a1_cache_gem = File.join(@gemhome, 'cache', @a1.file_name) 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) @@ -220,20 +214,20 @@ gems: inst = Gem::RemoteFetcher.fetcher - assert_equal File.join(@gemhome, 'cache', "#{@a1.full_name}.gem"), + assert_equal File.join(@gemhome, 'cache', @a1.file_name), inst.download(@a1, 'http://gems.example.com') end def test_download_local FileUtils.mv @a1_gem, @tempdir - local_path = File.join @tempdir, "#{@a1.full_name}.gem" + local_path = File.join @tempdir, @a1.file_name inst = nil Dir.chdir @tempdir do inst = Gem::RemoteFetcher.fetcher end - assert_equal File.join(@gemhome, 'cache', "#{@a1.full_name}.gem"), + assert_equal File.join(@gemhome, 'cache', @a1.file_name), inst.download(@a1, local_path) end @@ -241,14 +235,14 @@ gems: space_path = File.join @tempdir, 'space path' FileUtils.mkdir space_path FileUtils.mv @a1_gem, space_path - local_path = File.join space_path, "#{@a1.full_name}.gem" + local_path = File.join space_path, @a1.file_name inst = nil Dir.chdir @tempdir do inst = Gem::RemoteFetcher.fetcher end - assert_equal File.join(@gemhome, 'cache', "#{@a1.full_name}.gem"), + assert_equal File.join(@gemhome, 'cache', @a1.file_name), inst.download(@a1, local_path) end @@ -262,7 +256,7 @@ gems: install_dir = File.join @tempdir, 'more_gems' - a1_cache_gem = File.join install_dir, 'cache', "#{@a1.full_name}.gem" + 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) @@ -276,7 +270,7 @@ gems: unless win_platform? # File.chmod doesn't work def test_download_local_read_only FileUtils.mv @a1_gem, @tempdir - local_path = File.join @tempdir, "#{@a1.full_name}.gem" + local_path = File.join @tempdir, @a1.file_name inst = nil File.chmod 0555, File.join(@gemhome, 'cache') @@ -284,7 +278,7 @@ gems: inst = Gem::RemoteFetcher.fetcher end - assert_equal File.join(@tempdir, "#{@a1.full_name}.gem"), + assert_equal File.join(@tempdir, @a1.file_name), inst.download(@a1, local_path) ensure File.chmod 0755, File.join(@gemhome, 'cache') @@ -296,8 +290,7 @@ gems: fetcher = util_fuck_with_fetcher File.read(@a1_gem) fetcher.download(@a1, 'http://gems.example.com') - assert File.exist?(File.join(Gem.user_dir, 'cache', - "#{@a1.full_name}.gem")) + assert File.exist?(File.join(Gem.user_dir, 'cache', @a1.file_name)) ensure File.chmod 0755, File.join(@gemhome) File.chmod 0755, File.join(@gemhome, 'cache') @@ -319,7 +312,7 @@ gems: fetcher = util_fuck_with_fetcher e1_data, :blow_chunks - e1_cache_gem = File.join(@gemhome, 'cache', "#{e1.full_name}.gem") + e1_cache_gem = File.join(@gemhome, 'cache', e1.file_name) assert_equal e1_cache_gem, fetcher.download(e1, 'http://gems.example.com') @@ -328,6 +321,23 @@ gems: assert File.exist?(e1_cache_gem) end + def test_download_same_file + FileUtils.mv @a1_gem, @tempdir + local_path = File.join @tempdir, @a1.file_name + inst = nil + + Dir.chdir @tempdir do + inst = Gem::RemoteFetcher.fetcher + end + + cache_path = File.join @gemhome, 'cache', @a1.file_name + FileUtils.mv local_path, cache_path + + gem = Gem::Format.from_file_by_path cache_path + + assert_equal cache_path, inst.download(gem.spec, cache_path) + end + def test_download_unsupported inst = Gem::RemoteFetcher.fetcher diff --git a/test/rubygems/test_gem_requirement.rb b/test/rubygems/test_gem_requirement.rb index e64c90cb76..a70dd0fd8e 100644 --- a/test/rubygems/test_gem_requirement.rb +++ b/test/rubygems/test_gem_requirement.rb @@ -1,222 +1,292 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' -require 'rubygems/version' +require "rubygems/requirement" class TestGemRequirement < RubyGemTestCase - def setup - super - - @r1_2 = Gem::Requirement.new '= 1.2' - @r1_3 = Gem::Requirement.new '= 1.3' - end - - def test_initialize - r = Gem::Requirement.new '2' - assert_equal '= 2', r.to_s, 'String' - - r = Gem::Requirement.new %w[2] - assert_equal '= 2', r.to_s, 'Array of Strings' - - r = Gem::Requirement.new Gem::Version.new('2') - assert_equal '= 2', r.to_s, 'Gem::Version' - end - def test_equals2 - assert_equal @r1_2, @r1_2.dup - assert_equal @r1_2.dup, @r1_2 + r = req "= 1.2" + assert_equal r, r.dup + assert_equal r.dup, r - refute_equal @r1_3, @r1_2 - refute_equal @r1_2, @r1_3 + refute_requirement_equal "= 1.2", "= 1.3" + refute_requirement_equal "= 1.3", "= 1.2" - refute_equal Object.new, @r1_2 - refute_equal @r1_2, Object.new + refute_equal Object.new, req("= 1.2") + refute_equal req("= 1.2"), Object.new end - def test_hash - assert_equal @r1_2.hash, @r1_2.dup.hash - assert_equal @r1_2.dup.hash, @r1_2.hash - - refute_equal @r1_2.hash, @r1_3.hash - refute_equal @r1_3.hash, @r1_2.hash + def test_initialize + assert_requirement_equal "= 2", "2" + assert_requirement_equal "= 2", ["2"] + assert_requirement_equal "= 2", v(2) end - # We may get some old gems that have requirements in old formats. - # We need to be able to handle those old requirements by normalizing - # them to the latest format. - def test_normalization - require 'yaml' - yamldep = %{--- !ruby/object:Gem::Requirement - nums: - - 1 - - 0 - - 4 - op: ">=" - version: ">= 1.0.4"} - dep = YAML.load(yamldep) - dep.normalize - assert_equal ">= 1.0.4", dep.to_s + def test_class_available_as_gem_version_requirement + assert_same Gem::Requirement, Gem::Version::Requirement, + "Gem::Version::Requirement is aliased for old YAML compatibility." end def test_parse - assert_equal ['=', Gem::Version.new(1)], @r1_2.parse(' 1') - - assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('= 1') - assert_equal ['>', Gem::Version.new(1)], @r1_2.parse('> 1') + assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse(' 1') + assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1') + assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1') + assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1") - assert_equal ['=', Gem::Version.new(0)], @r1_2.parse('=') - assert_equal ['>', Gem::Version.new(0)], @r1_2.parse('>') - - assert_equal ['=', Gem::Version.new(1)], @r1_2.parse("=\n1") - assert_equal ['=', Gem::Version.new(0)], @r1_2.parse("=\njunk") - - assert_equal ['=', Gem::Version.new(2)], @r1_2.parse(Gem::Version.new('2')) + assert_equal ['=', Gem::Version.new(2)], + Gem::Requirement.parse(Gem::Version.new('2')) end - def test_parse_illformed + def test_parse_bad e = assert_raises ArgumentError do - @r1_2.parse(nil) + Gem::Requirement.parse nil end assert_equal 'Illformed requirement [nil]', e.message e = assert_raises ArgumentError do - @r1_2.parse('') + Gem::Requirement.parse "" end assert_equal 'Illformed requirement [""]', e.message end + def test_prerelease_eh + r = req '= 1' + + refute r.prerelease? + + r = req '= 1.a' + + assert r.prerelease? + + r = req '> 1.a', '< 2' + + assert r.prerelease? + end + def test_satisfied_by_eh_bang_equal - r1_2 = Gem::Requirement.new '!= 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req '!= 1.2' - assert_equal true, r1_2.satisfied_by?(nil) - assert_equal true, r1_2.satisfied_by?(v1_1) - assert_equal false, r1_2.satisfied_by?(v1_2) - assert_equal true, r1_2.satisfied_by?(v1_3) + assert_satisfied_by nil, r + assert_satisfied_by "1.1", r + refute_satisfied_by "1.2", r + assert_satisfied_by "1.3", r end def test_satisfied_by_eh_blank - r1_2 = Gem::Requirement.new '1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "1.2" - assert_equal false, r1_2.satisfied_by?(nil) - assert_equal false, r1_2.satisfied_by?(v1_1) - assert_equal true, r1_2.satisfied_by?(v1_2) - assert_equal false, r1_2.satisfied_by?(v1_3) + refute_satisfied_by nil, r + refute_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + refute_satisfied_by "1.3", r end def test_satisfied_by_eh_equal - r1_2 = @r1_2 - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "= 1.2" - assert_equal false, r1_2.satisfied_by?(nil) - assert_equal false, r1_2.satisfied_by?(v1_1) - assert_equal true, r1_2.satisfied_by?(v1_2) - assert_equal false, r1_2.satisfied_by?(v1_3) + refute_satisfied_by nil, r + refute_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + refute_satisfied_by "1.3", r end def test_satisfied_by_eh_gt - r1_2 = Gem::Requirement.new '> 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "> 1.2" - assert_equal false, r1_2.satisfied_by?(v1_1) - assert_equal false, r1_2.satisfied_by?(v1_2) - assert_equal true, r1_2.satisfied_by?(v1_3) + refute_satisfied_by "1.1", r + refute_satisfied_by "1.2", r + assert_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r1_2.satisfied_by?(nil) + r.satisfied_by? nil end end def test_satisfied_by_eh_gte - r1_2 = Gem::Requirement.new '>= 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req ">= 1.2" - assert_equal false, r1_2.satisfied_by?(v1_1) - assert_equal true, r1_2.satisfied_by?(v1_2) - assert_equal true, r1_2.satisfied_by?(v1_3) + refute_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + assert_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r1_2.satisfied_by?(nil) + r.satisfied_by? nil end end def test_satisfied_by_eh_list - r = Gem::Requirement.create(['> 1.1', '< 1.3']) - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "> 1.1", "< 1.3" - assert_equal false, r.satisfied_by?(v1_1) - assert_equal true, r.satisfied_by?(v1_2) - assert_equal false, r.satisfied_by?(v1_3) + refute_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + refute_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r.satisfied_by?(nil) + r.satisfied_by? nil end end def test_satisfied_by_eh_lt - r1_2 = Gem::Requirement.new '< 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "< 1.2" - assert_equal true, r1_2.satisfied_by?(v1_1) - assert_equal false, r1_2.satisfied_by?(v1_2) - assert_equal false, r1_2.satisfied_by?(v1_3) + assert_satisfied_by "1.1", r + refute_satisfied_by "1.2", r + refute_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r1_2.satisfied_by?(nil) + r.satisfied_by? nil end end def test_satisfied_by_eh_lte - r1_2 = Gem::Requirement.new '<= 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "<= 1.2" - assert_equal true, r1_2.satisfied_by?(v1_1) - assert_equal true, r1_2.satisfied_by?(v1_2) - assert_equal false, r1_2.satisfied_by?(v1_3) + assert_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + refute_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r1_2.satisfied_by?(nil) + r.satisfied_by? nil end end def test_satisfied_by_eh_tilde_gt - r1_2 = Gem::Requirement.new '~> 1.2' - v1_1 = Gem::Version.new '1.1' - v1_2 = Gem::Version.new '1.2' - v1_3 = Gem::Version.new '1.3' + r = req "~> 1.2" - assert_equal false, r1_2.satisfied_by?(v1_1) - assert_equal true, r1_2.satisfied_by?(v1_2) - assert_equal true, r1_2.satisfied_by?(v1_3) + refute_satisfied_by "1.1", r + assert_satisfied_by "1.2", r + assert_satisfied_by "1.3", r assert_raises NoMethodError do - assert_equal true, r1_2.satisfied_by?(nil) + r.satisfied_by? nil end end -end + def test_satisfied_by_eh_good + assert_satisfied_by "0.2.33", "= 0.2.33" + assert_satisfied_by "0.2.34", "> 0.2.33" + assert_satisfied_by "1.0", "= 1.0" + assert_satisfied_by "1.0", "1.0" + assert_satisfied_by "1.8.2", "> 1.8.0" + assert_satisfied_by "1.112", "> 1.111" + assert_satisfied_by "0.2", "> 0.0.0" + assert_satisfied_by "0.0.0.0.0.2", "> 0.0.0" + assert_satisfied_by "0.0.1.0", "> 0.0.0.1" + assert_satisfied_by "10.3.2", "> 9.3.2" + assert_satisfied_by "1.0.0.0", "= 1.0" + assert_satisfied_by "10.3.2", "!= 9.3.4" + assert_satisfied_by "10.3.2", "> 9.3.2" + assert_satisfied_by "10.3.2", "> 9.3.2" + assert_satisfied_by " 9.3.2", ">= 9.3.2" + assert_satisfied_by "9.3.2 ", ">= 9.3.2" + assert_satisfied_by "", "= 0" + assert_satisfied_by "", "< 0.1" + assert_satisfied_by " ", "< 0.1 " + assert_satisfied_by "", " < 0.1" + assert_satisfied_by " ", "> 0.a " + assert_satisfied_by "", " > 0.a" + assert_satisfied_by "3.1", "< 3.2.rc1" + assert_satisfied_by "3.2.0", "> 3.2.0.rc1" + assert_satisfied_by "3.2.0.rc2", "> 3.2.0.rc1" + assert_satisfied_by "3.0.rc2", "< 3.0" + assert_satisfied_by "3.0.rc2", "< 3.0.0" + assert_satisfied_by "3.0.rc2", "< 3.0.1" + end + def test_illformed_requirements + [ ">>> 1.3.5", "> blah" ].each do |rq| + assert_raises ArgumentError, "req [#{rq}] should fail" do + Gem::Requirement.new rq + end + end + end + + def test_satisfied_by_eh_boxed + refute_satisfied_by "1.3", "~> 1.4" + assert_satisfied_by "1.4", "~> 1.4" + assert_satisfied_by "1.5", "~> 1.4" + refute_satisfied_by "2.0", "~> 1.4" + + refute_satisfied_by "1.3", "~> 1.4.4" + refute_satisfied_by "1.4", "~> 1.4.4" + assert_satisfied_by "1.4.4", "~> 1.4.4" + assert_satisfied_by "1.4.5", "~> 1.4.4" + refute_satisfied_by "1.5", "~> 1.4.4" + refute_satisfied_by "2.0", "~> 1.4.4" + + refute_satisfied_by "1.1.pre", "~> 1.0.0" + assert_satisfied_by "1.1.pre", "~> 1.1" + refute_satisfied_by "2.0.a", "~> 1.0" + assert_satisfied_by "2.0.a", "~> 2.0" + end + + def test_satisfied_by_eh_multiple + req = [">= 1.4", "<= 1.6", "!= 1.5"] + + refute_satisfied_by "1.3", req + assert_satisfied_by "1.4", req + refute_satisfied_by "1.5", req + assert_satisfied_by "1.6", req + refute_satisfied_by "1.7", req + refute_satisfied_by "2.0", req + end + + def test_satisfied_by_boxed + refute_satisfied_by "1.3", "~> 1.4" + assert_satisfied_by "1.4", "~> 1.4" + assert_satisfied_by "1.5", "~> 1.4" + refute_satisfied_by "2.0", "~> 1.4" + + refute_satisfied_by "1.3", "~> 1.4.4" + refute_satisfied_by "1.4", "~> 1.4.4" + assert_satisfied_by "1.4.4", "~> 1.4.4" + assert_satisfied_by "1.4.5", "~> 1.4.4" + refute_satisfied_by "1.5", "~> 1.4.4" + refute_satisfied_by "2.0", "~> 1.4.4" + end + + def test_bad + refute_satisfied_by "", "> 0.1" + refute_satisfied_by "1.2.3", "!= 1.2.3" + refute_satisfied_by "1.2.003.0.0", "!= 1.02.3" + refute_satisfied_by "4.5.6", "< 1.2.3" + refute_satisfied_by "1.0", "> 1.1" + refute_satisfied_by "", "= 0.1" + refute_satisfied_by "1.1.1", "> 1.1.1" + refute_satisfied_by "1.2", "= 1.1" + refute_satisfied_by "1.40", "= 1.1" + refute_satisfied_by "1.3", "= 1.40" + refute_satisfied_by "9.3.3", "<= 9.3.2" + refute_satisfied_by "9.3.1", ">= 9.3.2" + refute_satisfied_by "9.3.03", "<= 9.3.2" + refute_satisfied_by "1.0.0.1", "= 1.0" + end + + # Assert that two requirements are equal. Handles Gem::Requirements, + # strings, arrays, numbers, and versions. + + def assert_requirement_equal expected, actual + assert_equal req(expected), req(actual) + end + + # Assert that +version+ satisfies +requirement+. + + def assert_satisfied_by version, requirement + assert req(requirement).satisfied_by?(v(version)), + "#{requirement} is satisfied by #{version}" + end + + # Refute the assumption that two requirements are equal. + + def refute_requirement_equal unexpected, actual + refute_equal req(unexpected), req(actual) + end + + # Refute the assumption that +version+ satisfies +requirement+. + + def refute_satisfied_by version, requirement + refute req(requirement).satisfied_by?(v(version)), + "#{requirement} is not satisfied by #{version}" + end +end diff --git a/test/rubygems/test_gem_server.rb b/test/rubygems/test_gem_server.rb index 5a380d008e..41c25fe7d9 100644 --- a/test/rubygems/test_gem_server.rb +++ b/test/rubygems/test_gem_server.rb @@ -78,6 +78,26 @@ class TestGemServer < RubyGemTestCase Marshal.load(Gem.gunzip(@res.body)) end + def test_listen + util_listen + + out, err = capture_io do + @server.listen + end + + assert_equal 1, @server.server.listeners.length + end + + def test_listen_addresses + util_listen + + out, err = capture_io do + @server.listen %w[a b] + end + + assert_equal 2, @server.server.listeners.length + end + def test_quick_a_1_gemspec_rz data = StringIO.new "GET /quick/a-1.gemspec.rz HTTP/1.0\r\n\r\n" @req.parse data @@ -306,5 +326,20 @@ class TestGemServer < RubyGemTestCase assert_equal si, YAML.load(Gem.inflate(@res.body)) end + def util_listen + webrick = Object.new + webrick.instance_variable_set :@listeners, [] + def webrick.listeners() @listeners end + def webrick.listen(host, port) + socket = Object.new + socket.instance_variable_set :@host, host + socket.instance_variable_set :@port, port + def socket.addr() [nil, @port, @host] end + @listeners << socket + end + + @server.instance_variable_set :@server, webrick + end + end diff --git a/test/rubygems/test_gem_source_index.rb b/test/rubygems/test_gem_source_index.rb index 40a9a85b27..acace09da9 100644 --- a/test/rubygems/test_gem_source_index.rb +++ b/test/rubygems/test_gem_source_index.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/source_index' require 'rubygems/config_file' @@ -31,7 +25,7 @@ class TestGemSourceIndex < RubyGemTestCase a1 = quick_gem 'a', '1' do |spec| spec.author = 'author 1' end - spec_file = File.join spec_dir, "#{a1.full_name}.gemspec" + spec_file = File.join spec_dir, a1.spec_name File.open spec_file, 'w' do |fp| fp.write a1.to_ruby @@ -52,7 +46,7 @@ class TestGemSourceIndex < RubyGemTestCase a1 = quick_gem 'a', '1' do |spec| spec.author = 'author 1' end - spec_file = File.join spec_dir, "#{a1.full_name}.gemspec" + spec_file = File.join spec_dir, a1.spec_name File.open spec_file, 'w' do |fp| fp.write a1.to_ruby @@ -298,11 +292,11 @@ WARNING: Invalid .gemspec format in '#{spec_file}' a1 = quick_gem 'a', '1' do |spec| spec.author = 'author 1' end a2 = quick_gem 'a', '1' do |spec| spec.author = 'author 2' end - File.open File.join(spec_dir1, "#{a1.full_name}.gemspec"), 'w' do |fp| + File.open File.join(spec_dir1, a1.spec_name), 'w' do |fp| fp.write a1.to_ruby end - File.open File.join(spec_dir2, "#{a2.full_name}.gemspec"), 'w' do |fp| + File.open File.join(spec_dir2, a2.spec_name), 'w' do |fp| fp.write a2.to_ruby end @@ -340,7 +334,7 @@ WARNING: Invalid .gemspec format in '#{spec_file}' end def test_refresh_bang - a1_spec = File.join @gemhome, "specifications", "#{@a1.full_name}.gemspec" + a1_spec = File.join @gemhome, "specifications", @a1.spec_name FileUtils.mv a1_spec, @tempdir @@ -348,7 +342,7 @@ WARNING: Invalid .gemspec format in '#{spec_file}' refute source_index.gems.include?(@a1.full_name) - FileUtils.mv File.join(@tempdir, "#{@a1.full_name}.gemspec"), a1_spec + FileUtils.mv File.join(@tempdir, @a1.spec_name), a1_spec source_index.refresh! diff --git a/test/rubygems/test_gem_source_info_cache.rb b/test/rubygems/test_gem_source_info_cache.rb deleted file mode 100644 index f712f138c1..0000000000 --- a/test/rubygems/test_gem_source_info_cache.rb +++ /dev/null @@ -1,447 +0,0 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - -require_relative 'gemutilities' -require 'rubygems/source_info_cache' - -class Gem::SourceIndex - public :gems -end - -class TestGemSourceInfoCache < RubyGemTestCase - - def setup - @original_sources = Gem.sources - - super - - util_setup_fake_fetcher - - @sic = Gem::SourceInfoCache.new - @sic.instance_variable_set :@fetcher, @fetcher - - @si_new = Gem::SourceIndex.new - @sice_new = Gem::SourceInfoCacheEntry.new @si_new, 0 - - prep_cache_files @sic - - @sic.reset_cache_data - end - - def teardown - super - Gem.sources.replace @original_sources - Gem::SourceInfoCache.instance_variable_set :@cache, nil - end - - def test_self_cache_refreshes - Gem.configuration.update_sources = true #true by default - si = Gem::SourceIndex.new - si.add_spec @a1 - - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = si.dump - - Gem.sources.replace %W[#{@gem_repo}] - - use_ui @ui do - refute_nil Gem::SourceInfoCache.cache - assert_kind_of Gem::SourceInfoCache, Gem::SourceInfoCache.cache - assert_equal Gem::SourceInfoCache.cache.object_id, - Gem::SourceInfoCache.cache.object_id - end - - assert_match %r|Bulk updating|, @ui.output - end - - def test_self_cache_skips_refresh_based_on_configuration - Gem.configuration.update_sources = false - si = Gem::SourceIndex.new - si.add_spec @a1 - - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = si.dump - - Gem.sources.replace %w[#{@gem_repo}] - - use_ui @ui do - refute_nil Gem::SourceInfoCache.cache - assert_kind_of Gem::SourceInfoCache, Gem::SourceInfoCache.cache - assert_equal Gem::SourceInfoCache.cache.object_id, - Gem::SourceInfoCache.cache.object_id - refute_match %r|Bulk updating|, @ui.output - end - end - - def test_self_cache_data - si = Gem::SourceIndex.new - si.add_spec @a1 - - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = si.dump - - Gem::SourceInfoCache.instance_variable_set :@cache, nil - sice = Gem::SourceInfoCacheEntry.new si, 0 - - use_ui @ui do - gems = Gem::SourceInfoCache.cache_data[@gem_repo].source_index.gems - gem_names = gems.map { |_, spec| spec.full_name } - - assert_equal si.gems.map { |_,spec| spec.full_name }, gem_names - end - end - - def test_cache_data - assert_equal [[@gem_repo, @usr_sice]], @sic.cache_data.to_a.sort - end - - def test_cache_data_dirty - def @sic.dirty() @dirty; end - assert_equal false, @sic.dirty, 'clean on init' - @sic.cache_data - assert_equal false, @sic.dirty, 'clean on fetch' - @sic.update - @sic.cache_data - assert_equal true, @sic.dirty, 'still dirty' - end - - def test_cache_data_irreparable - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = @source_index.dump - - data = { @gem_repo => { 'totally' => 'borked' } } - - cache_files = [ - @sic.system_cache_file, - @sic.latest_system_cache_file, - @sic.user_cache_file, - @sic.latest_user_cache_file - ] - - cache_files.each do |fn| - FileUtils.mkdir_p File.dirname(fn) - open(fn, "wb") { |f| f.write Marshal.dump(data) } - end - - @sic.instance_eval { @cache_data = nil } - - fetched = use_ui @ui do @sic.cache_data end - - fetched_si = fetched["#{@gem_repo}"].source_index - - assert_equal @source_index.index_signature, fetched_si.index_signature - end - - def test_cache_data_none_readable - FileUtils.chmod 0222, @sic.system_cache_file - FileUtils.chmod 0222, @sic.latest_system_cache_file - FileUtils.chmod 0222, @sic.user_cache_file - FileUtils.chmod 0222, @sic.latest_user_cache_file - return if (File.stat(@sic.system_cache_file).mode & 0222) != 0222 - return if (File.stat(@sic.user_cache_file).mode & 0222) != 0222 - # HACK for systems that don't support chmod - assert_equal({}, @sic.cache_data) - end - - def test_cache_data_none_writable - FileUtils.chmod 0444, @sic.system_cache_file - FileUtils.chmod 0444, @sic.user_cache_file - e = assert_raises RuntimeError do - @sic.cache_data - end - assert_equal 'unable to locate a writable cache file', e.message - end - - def test_cache_data_nonexistent - FileUtils.rm @sic.system_cache_file - FileUtils.rm @sic.latest_system_cache_file - FileUtils.rm @sic.user_cache_file - FileUtils.rm @sic.latest_user_cache_file - - # TODO test verbose output - assert_equal [], @sic.cache_data.to_a.sort - end - - def test_cache_data_repair - data = { - @gem_repo => { - 'cache' => Gem::SourceIndex.new, - 'size' => 0, - } - } - [@sic.system_cache_file, @sic.user_cache_file].each do |fn| - FileUtils.mkdir_p File.dirname(fn) - open(fn, "wb") { |f| f.write Marshal.dump(data) } - end - - @sic.instance_eval { @cache_data = nil } - - expected = { - @gem_repo => - Gem::SourceInfoCacheEntry.new(Gem::SourceIndex.new, 0) - } - assert_equal expected, @sic.cache_data - end - - def test_cache_data_user_fallback - FileUtils.chmod 0444, @sic.system_cache_file - - assert_equal [[@gem_repo, @usr_sice]], @sic.cache_data.to_a.sort - end - - def test_cache_file - assert_equal @gemcache, @sic.cache_file - end - - def test_cache_file_user_fallback - FileUtils.chmod 0444, @sic.system_cache_file - assert_equal @usrcache, @sic.cache_file - end - - def test_cache_file_none_writable - FileUtils.chmod 0444, @sic.system_cache_file - FileUtils.chmod 0444, @sic.user_cache_file - e = assert_raises RuntimeError do - @sic.cache_file - end - assert_equal 'unable to locate a writable cache file', e.message - end - - def test_flush - @sic.cache_data[@gem_repo] = @sice_new - @sic.update - @sic.flush - - assert_equal [[@gem_repo, @sice_new]], - read_cache(@sic.system_cache_file).to_a.sort - end - - def test_latest_cache_data - util_make_gems - - sice = Gem::SourceInfoCacheEntry.new @source_index, 0 - - @sic.set_cache_data @gem_repo => sice - latest = @sic.latest_cache_data - beginning_with_a = Gem::Dependency.new(/^a/, Gem::Requirement.default) - gems = latest[@gem_repo].source_index.search(beginning_with_a).map { |s| s.full_name } - - assert_equal %w[a-2 a_evil-9], gems - end - - def test_latest_cache_file - latest_cache_file = File.join File.dirname(@gemcache), - "latest_#{File.basename @gemcache}" - assert_equal latest_cache_file, @sic.latest_cache_file - end - - def test_latest_system_cache_file - assert_equal File.join(Gem.dir, "latest_source_cache"), - @sic.latest_system_cache_file - end - - def test_latest_user_cache_file - assert_equal @latest_usrcache, @sic.latest_user_cache_file - end - - def test_read_system_cache - assert_equal [[@gem_repo, @sys_sice]], @sic.cache_data.to_a.sort - end - - def test_read_user_cache - FileUtils.chmod 0444, @sic.user_cache_file - FileUtils.chmod 0444, @sic.latest_user_cache_file - - @si = Gem::SourceIndex.new - @si.add_specs @a1, @a2 - - @sice = Gem::SourceInfoCacheEntry.new @si, 0 - - @sic.set_cache_data({ @gem_repo => @sice }) - @sic.update - @sic.write_cache - @sic.reset_cache_data - - user_cache_data = @sic.cache_data.to_a.sort - - assert_equal 1, user_cache_data.length - user_cache_data = user_cache_data.first - - assert_equal @gem_repo, user_cache_data.first - - gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name } - assert_equal [@a2.full_name], gems - end - - def test_search - si = Gem::SourceIndex.new - si.add_spec @a1 - cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) } - @sic.instance_variable_set :@cache_data, cache_data - - assert_equal [@a1], @sic.search(//) - end - - def test_search_all - util_make_gems - - sice = Gem::SourceInfoCacheEntry.new @source_index, 0 - - @sic.set_cache_data @gem_repo => sice - @sic.update - @sic.instance_variable_set :@only_latest, false - @sic.write_cache - @sic.reset_cache_data - - gem_names = @sic.search(//, false, true).map { |spec| spec.full_name } - - assert_equal %w[a-1 a-2 a-3.a a_evil-9 c-1.2], gem_names - end - - def test_search_dependency - si = Gem::SourceIndex.new - si.add_spec @a1 - cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) } - @sic.instance_variable_set :@cache_data, cache_data - - dep = Gem::Dependency.new @a1.name, @a1.version - - assert_equal [@a1], @sic.search(dep) - end - - def test_search_no_matches - si = Gem::SourceIndex.new - si.add_spec @a1 - cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) } - @sic.instance_variable_set :@cache_data, cache_data - - assert_equal [], @sic.search(/nonexistent/) - end - - def test_search_no_matches_in_source - si = Gem::SourceIndex.new - si.add_spec @a1 - cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) } - @sic.instance_variable_set :@cache_data, cache_data - Gem.sources.replace %w[more-gems.example.com] - - assert_equal [], @sic.search(/nonexistent/) - end - - def test_search_with_source - si = Gem::SourceIndex.new - si.add_spec @a1 - cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) } - @sic.instance_variable_set :@cache_data, cache_data - - assert_equal [[@a1, @gem_repo]], - @sic.search_with_source(//) - end - - def test_system_cache_file - assert_equal File.join(Gem.dir, "source_cache"), @sic.system_cache_file - end - - def test_user_cache_file - assert_equal @usrcache, @sic.user_cache_file - end - - def test_write_cache - @sic.cache_data[@gem_repo] = @sice_new - @sic.write_cache - - assert_equal [[@gem_repo, @sice_new]], - read_cache(@sic.system_cache_file).to_a.sort - assert_equal [[@gem_repo, @usr_sice]], - read_cache(@sic.user_cache_file).to_a.sort - end - - def test_write_cache_user - FileUtils.chmod 0444, @sic.system_cache_file - @sic.set_cache_data({@gem_repo => @sice_new}) - @sic.update - @sic.write_cache - @sic.instance_variable_set :@only_latest, false - - assert File.exist?(@sic.user_cache_file), 'user_cache_file' - assert File.exist?(@sic.latest_user_cache_file), - 'latest_user_cache_file exists' - - assert_equal [[@gem_repo, @sys_sice]], - read_cache(@sic.system_cache_file).to_a.sort - assert_equal [[@gem_repo, @sice_new]], - read_cache(@sic.user_cache_file).to_a.sort - end - - def test_write_cache_user_from_scratch - FileUtils.rm_rf @sic.user_cache_file - FileUtils.rm_rf @sic.latest_user_cache_file - - FileUtils.chmod 0444, @sic.system_cache_file - FileUtils.chmod 0444, @sic.latest_system_cache_file - - @si = Gem::SourceIndex.new - @si.add_specs @a1, @a2 - - @sice = Gem::SourceInfoCacheEntry.new @si, 0 - - @sic.set_cache_data({ @gem_repo => @sice }) - @sic.update - - @sic.write_cache - - assert File.exist?(@sic.user_cache_file), 'system_cache_file' - assert File.exist?(@sic.latest_user_cache_file), - 'latest_system_cache_file' - - user_cache_data = read_cache(@sic.user_cache_file).to_a.sort - assert_equal 1, user_cache_data.length, 'user_cache_data length' - user_cache_data = user_cache_data.first - - assert_equal @gem_repo, user_cache_data.first - - gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name } - assert_equal [@a1.full_name, @a2.full_name], gems.sort - - user_cache_data = read_cache(@sic.latest_user_cache_file).to_a.sort - assert_equal 1, user_cache_data.length - user_cache_data = user_cache_data.first - - assert_equal @gem_repo, user_cache_data.first - - gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name } - assert_equal [@a2.full_name], gems - end - - def test_write_cache_user_no_directory - FileUtils.rm_rf File.dirname(@sic.user_cache_file) - FileUtils.chmod 0444, @sic.system_cache_file - @sic.set_cache_data({ @gem_repo => @sice_new }) - @sic.update - @sic.write_cache - - assert_equal [[@gem_repo, @sys_sice]], - read_cache(@sic.system_cache_file).to_a.sort - assert_equal [[@gem_repo, @sys_sice]], - read_cache(@sic.user_cache_file).to_a.sort - assert_equal [[@gem_repo, @sice_new]], - read_cache(@sic.latest_user_cache_file).to_a.sort - end - - def test_write_cache_user_only_latest - FileUtils.chmod 0444, @sic.system_cache_file - @sic.set_cache_data({@gem_repo => @sice_new}) - @sic.update - @sic.write_cache - - assert File.exist?(@sic.user_cache_file), 'user_cache_file' - assert File.exist?(@sic.latest_user_cache_file), - 'latest_user_cache_file exists' - - assert_equal [[@gem_repo, @sys_sice]], - read_cache(@sic.system_cache_file).to_a.sort - assert_equal [[@gem_repo, @sice_new]], - read_cache(@sic.user_cache_file).to_a.sort - end - -end - diff --git a/test/rubygems/test_gem_source_info_cache_entry.rb b/test/rubygems/test_gem_source_info_cache_entry.rb deleted file mode 100644 index e05a05f69c..0000000000 --- a/test/rubygems/test_gem_source_info_cache_entry.rb +++ /dev/null @@ -1,78 +0,0 @@ -require_relative 'gemutilities' -require 'rubygems/source_info_cache_entry' - -class TestGemSourceInfoCacheEntry < RubyGemTestCase - - def setup - super - - util_setup_fake_fetcher - - @si = Gem::SourceIndex.new - @si.add_spec @a1 - @sic_e = Gem::SourceInfoCacheEntry.new @si, @si.dump.size - end - - def test_refresh - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}.Z"] = - proc { raise } - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = @si.dump - - use_ui @ui do - @sic_e.refresh @gem_repo, true - end - end - - def test_refresh_all - @si.add_spec @a2 - - a1_name = @a1.full_name - a2_name = @a2.full_name - - @fetcher.data["#{@gem_repo}quick/index.rz"] = - util_zip [a1_name, a2_name].join("\n") - @fetcher.data["#{@gem_repo}quick/latest_index.rz"] = util_zip a2_name - @fetcher.data["#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a1_name}.gemspec.rz"] = util_zip Marshal.dump(@a1) - @fetcher.data["#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a2_name}.gemspec.rz"] = util_zip Marshal.dump(@a2) - @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = - Marshal.dump @si - - sic_e = Gem::SourceInfoCacheEntry.new Gem::SourceIndex.new, 0 - - assert_equal [], sic_e.source_index.map { |n,| n } - - use_ui @ui do - assert sic_e.refresh(@gem_repo, false) - end - - assert_equal [a2_name], sic_e.source_index.map { |n,| n }.sort - - use_ui @ui do - sic_e.refresh @gem_repo, true - end - - assert_equal [a1_name, a2_name], sic_e.source_index.map { |n,| n }.sort - end - - def test_refresh_bad_uri - assert_raises URI::BadURIError do - @sic_e.refresh 'gems.example.com', true - end - end - - def test_refresh_update - si = Gem::SourceIndex.new - si.add_spec @a1 - si.add_spec @b2 - @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = si.dump - - use_ui @ui do - @sic_e.refresh @gem_repo, true - end - - new_gem = @sic_e.source_index.specification(@b2.full_name) - assert_equal @b2.full_name, new_gem.full_name - end - -end - diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb index 4a6f22bafd..6864fd3beb 100644 --- a/test/rubygems/test_gem_spec_fetcher.rb +++ b/test/rubygems/test_gem_spec_fetcher.rb @@ -39,16 +39,17 @@ class TestGemSpecFetcher < RubyGemTestCase end def test_fetch_all - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a3a.spec_name}.rz"] = util_zip(Marshal.dump(@a3a)) dep = Gem::Dependency.new 'a', 1 + specs_and_sources = @sf.fetch dep, true spec_names = specs_and_sources.map do |spec, source_uri| @@ -63,11 +64,11 @@ class TestGemSpecFetcher < RubyGemTestCase end def test_fetch_latest - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre)) dep = Gem::Dependency.new 'a', 1 @@ -81,11 +82,11 @@ class TestGemSpecFetcher < RubyGemTestCase end def test_fetch_prerelease - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @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.full_name}.gemspec.rz"] = + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre)) dep = Gem::Dependency.new 'a', '1.a' @@ -98,37 +99,6 @@ class TestGemSpecFetcher < RubyGemTestCase assert_equal [[@a_pre.full_name, @gem_repo]], spec_names end - def test_fetch_legacy_repo - @fetcher.data.delete "#{@gem_repo}specs.#{Gem.marshal_version}.gz" - @fetcher.data["#{@gem_repo}yaml"] = '' - util_setup_source_info_cache @a1, @a2 - - dep = Gem::Dependency.new 'a', 1 - specs = nil - - use_ui @ui do - specs = @sf.fetch dep, true - end - - expected = <<-EOF -WARNING: RubyGems 1.2+ index not found for: -\thttp://gems.example.com/ - -RubyGems will revert to legacy indexes degrading performance. - EOF - - assert_equal expected, @ui.error - - specs = specs.map { |spec, source_uri| [spec.full_name, source_uri] } - - expected = [ - [@a1.full_name, @gem_repo], - [@a2.full_name, @gem_repo], - ] - - assert_equal expected, specs - end - def test_fetch_platform util_set_arch 'i386-linux' @@ -146,7 +116,7 @@ RubyGems will revert to legacy indexes degrading performance. end def test_fetch_spec - spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec" + spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}" @fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1)) spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri @@ -154,19 +124,19 @@ RubyGems will revert to legacy indexes degrading performance. cache_dir = @sf.cache_dir URI.parse(spec_uri) - cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec" + cache_file = File.join cache_dir, @a1.spec_name assert File.exist?(cache_file) end def test_fetch_spec_cached - spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec" + spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}" @fetcher.data["#{spec_uri}.rz"] = nil cache_dir = @sf.cache_dir URI.parse(spec_uri) FileUtils.mkdir_p cache_dir - cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec" + cache_file = File.join cache_dir, @a1.spec_name open cache_file, 'wb' do |io| Marshal.dump @a1, io @@ -186,7 +156,7 @@ RubyGems will revert to legacy indexes degrading performance. end def test_fetch_spec_platform_ruby - @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1)) spec = @sf.fetch_spec ['a', Gem::Version.new(1), nil], @uri diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index fb5cf67461..5979890aeb 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -1,11 +1,5 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - -require 'stringio' require_relative 'gemutilities' +require 'stringio' require 'rubygems/specification' class TestGemSpecification < RubyGemTestCase @@ -129,7 +123,7 @@ end end def test_self_load - spec = File.join @gemhome, 'specifications', "#{@a2.full_name}.gemspec" + spec = File.join @gemhome, 'specifications', @a2.spec_name gs = Gem::Specification.load spec assert_equal @a2, gs @@ -145,16 +139,6 @@ end assert_equal false, spec.has_unit_tests? end - def test_self_load_legacy_yaml - s = YAML.load StringIO.new(LEGACY_YAML_SPEC) - assert_equal 'keyedlist', s.name - assert_equal '0.4.0', s.version.to_s - assert_equal true, s.has_rdoc? - #assert_equal Date.today, s.date - #assert s.required_ruby_version.satisfied_by?(Gem::Version.new('1')) - assert_equal false, s.has_unit_tests? - end - def test_self_normalize_yaml_input_with_183_yaml input = "!ruby/object:Gem::Specification " assert_equal "--- #{input}", Gem::Specification.normalize_yaml_input(input) @@ -538,8 +522,7 @@ end def test_full_gem_path_double_slash gemhome = @gemhome.sub(/\w\//, '\&/') - @a1.loaded_from = File.join gemhome, 'specifications', - "#{@a1.full_name}.gemspec" + @a1.loaded_from = File.join gemhome, 'specifications', @a1.spec_name assert_equal File.join(@gemhome, 'gems', @a1.full_name), @a1.full_gem_path @@ -730,6 +713,10 @@ end assert_equal( 1, (s2 <=> s1)) end + def test_spec_name + assert_equal 'a-1.gemspec', @a1.spec_name + end + def test_summary assert_equal 'this is a summary', @a1.summary end diff --git a/test/rubygems/test_gem_stream_ui.rb b/test/rubygems/test_gem_stream_ui.rb index 886f53a60d..395dbda9e1 100644 --- a/test/rubygems/test_gem_stream_ui.rb +++ b/test/rubygems/test_gem_stream_ui.rb @@ -46,6 +46,26 @@ class TestGemStreamUI < RubyGemTestCase end end + def test_ask_for_password + skip 'Always uses $stdin on windows' if Gem.win_platform? + + timeout(1) do + expected_answer = "Arthur, King of the Britons" + @in.string = "#{expected_answer}\n" + actual_answer = @sui.ask_for_password("What is your name?") + assert_equal expected_answer, actual_answer + end + end + + def test_ask_for_password_no_tty + @in.tty = false + + timeout(0.1) do + answer = @sui.ask_for_password("what is the airspeed velocity of an unladen swallow?") + assert_equal nil, answer + end + end + def test_ask_yes_no_no_tty_with_default @in.tty = false diff --git a/test/rubygems/test_gem_validator.rb b/test/rubygems/test_gem_validator.rb index 529c93ae1a..51dad524f3 100644 --- a/test/rubygems/test_gem_validator.rb +++ b/test/rubygems/test_gem_validator.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require_relative 'simple_gem' require 'rubygems/validator' diff --git a/test/rubygems/test_gem_version.rb b/test/rubygems/test_gem_version.rb index f2b0280f3d..f3692682b6 100644 --- a/test/rubygems/test_gem_version.rb +++ b/test/rubygems/test_gem_version.rb @@ -1,316 +1,172 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/version' class TestGemVersion < RubyGemTestCase - def setup - super - - version = Object.new - def version.to_s() '1.4.0' end - - @v1_0 = Gem::Version.new '1.0' - @v1_2 = Gem::Version.new '1.2' - @v1_3 = Gem::Version.new '1.3' - @v1_4_0 = Gem::Version.new version - end - - def test_class_create - assert_version Gem::Version.create('1.0') - assert_version Gem::Version.create("1.0 ") - assert_version Gem::Version.create(" 1.0 ") - assert_version Gem::Version.create("1.0\n") - assert_version Gem::Version.create("\n1.0\n") - - assert_equal Gem::Version.create('1'), Gem::Version.create(1) - end - - def test_class_create_malformed - e = assert_raises ArgumentError do Gem::Version.create("junk") end - assert_equal "Malformed version number string junk", e.message - - e = assert_raises ArgumentError do Gem::Version.create("1.0\n2.0") end - assert_equal "Malformed version number string 1.0\n2.0", e.message + def test_bump + assert_bumped_version_equal "5.3", "5.2.4" end - def test_bad - assert_inadequate( "", "> 0.1") - assert_inadequate( "1.2.3", "!= 1.2.3") - assert_inadequate( "1.2.003.0.0", "!= 1.02.3") - assert_inadequate( "4.5.6", "< 1.2.3") - assert_inadequate( "1.0", "> 1.1") - assert_inadequate( "0", ">") - assert_inadequate( "0", "<") - assert_inadequate( "", "= 0.1") - assert_inadequate( "1.1.1", "> 1.1.1") - assert_inadequate( "1.2", "= 1.1") - assert_inadequate( "1.40", "= 1.1") - assert_inadequate( "1.3", "= 1.40") - assert_inadequate( "9.3.3", "<= 9.3.2") - assert_inadequate( "9.3.1", ">= 9.3.2") - assert_inadequate( "9.3.03", "<= 9.3.2") - assert_inadequate( "1.0.0.1", "= 1.0") + def test_bump_alpha + assert_bumped_version_equal "5.3", "5.2.4.a" end def test_bump_trailing_zeros - v = Gem::Version.new("5.0.0") - assert_equal "5.1", v.bump.to_s - end - - def test_bump - v = Gem::Version.new("5.2.4") - assert_equal "5.3", v.bump.to_s - end - - def test_bump_alpha - v = Gem::Version.new("5.2.4.a") - assert_equal "5.3", v.bump.to_s + assert_bumped_version_equal "5.1", "5.0.0" end def test_bump_one_level - v = Gem::Version.new("5") - assert_equal "6", v.bump.to_s + assert_bumped_version_equal "6", "5" end - def test_eql_eh - v1_2 = Gem::Version.new '1.2' - v1_2_0 = Gem::Version.new '1.2.0' - - assert_equal true, v1_2.eql?(@v1_2) - assert_equal true, @v1_2.eql?(v1_2) + # FIX: For "legacy reasons," any object that responds to +version+ + # is returned unchanged. I'm not certain why. - assert_equal false, v1_2_0.eql?(@v1_2) - assert_equal false, @v1_2.eql?(v1_2_0) + def test_class_create + fake = Object.new + def fake.version; "1.0" end - assert_equal false, @v1_2.eql?(@v1_3) - assert_equal false, @v1_3.eql?(@v1_2) + assert_same fake, Gem::Version.create(fake) + assert_nil Gem::Version.create(nil) + assert_equal v("5.1"), Gem::Version.create("5.1") end - def test_eql_eh4 - v1_4 = Gem::Version.new '1.4' - v1_4_0 = Gem::Version.new "1.4.0" - - assert_equal true, v1_4_0.eql?(@v1_4_0) - assert_equal true, @v1_4_0.eql?(v1_4_0) - - assert_equal false, v1_4.eql?(@v1_4_0) - assert_equal false, @v1_4_0.eql?(v1_4) - - assert_equal false, @v1_4_0.eql?(@v1_3) - assert_equal false, @v1_3.eql?(@v1_4_0) + def test_eql_eh + assert_version_eql "1.2", "1.2" + refute_version_eql "1.2", "1.2.0" + refute_version_eql "1.2", "1.3" end - def test_equals2 - v = Gem::Version.new("1.2") - - assert_equal v, @v1_2 - assert_equal @v1_2, v - - refute_equal @v1_2, @v1_3 - refute_equal @v1_3, @v1_2 + def test_equals + assert_version_equal "1.2", "1.2" + refute_version_equal "1.2", "1.3" end + # REVISIT: consider removing as too impl-bound def test_hash - v1_2 = Gem::Version.new "1.2" - v1_2_0 = Gem::Version.new "1.2.0" - v1_4_0 = Gem::Version.new "1.4.0" - - assert_equal v1_2.hash, @v1_2.hash - - refute_equal v1_2_0.hash, @v1_2.hash - - assert_equal v1_4_0.hash, @v1_4_0.hash - - refute_equal @v1_2.hash, @v1_3.hash - - refute_equal @v1_2.hash, @v1_4_0.hash + assert_equal v("1.2").hash, v("1.2").hash + refute_equal v("1.2").hash, v("1.3").hash + refute_equal v("1.2").hash, v("1.2.0").hash end - def test_illformed_requirements - [ ">>> 1.3.5", "> blah" ].each do |rq| - assert_raises ArgumentError, "req [#{rq}] should fail" do - Gem::Version::Requirement.new rq - end + def test_initialize + ["1.0", "1.0 ", " 1.0 ", "1.0\n", "\n1.0\n"].each do |good| + assert_version_equal "1.0", good end - end - def test_normalize - assert_equal [0], Gem::Version.new("").normalize.map { |part| part.value } - assert_equal [0], Gem::Version.new("0").normalize.map { |part| part.value } - assert_equal [1], Gem::Version.new("1").normalize.map { |part| part.value } - assert_equal [1], Gem::Version.new("1.0").normalize.map { |part| part.value } - assert_equal [1, 1], Gem::Version.new("1.1").normalize.map { |part| part.value } - assert_equal [1, 1, "a"], Gem::Version.new("1.1.a").normalize.map { |part| part.value } + assert_version_equal "1", 1 end - def test_ok - assert_adequate( "0.2.33", "= 0.2.33") - assert_adequate( "0.2.34", "> 0.2.33") - assert_adequate( "1.0", "= 1.0") - assert_adequate( "1.0", "1.0") - assert_adequate( "1.8.2", "> 1.8.0") - assert_adequate( "1.112", "> 1.111") - assert_adequate( "0.2", "> 0.0.0") - assert_adequate( "0.0.0.0.0.2", "> 0.0.0") - assert_adequate( "0.0.1.0", "> 0.0.0.1") - assert_adequate( "10.3.2", "> 9.3.2") - assert_adequate( "1.0.0.0", "= 1.0") - assert_adequate( "10.3.2", "!= 9.3.4") - assert_adequate( "10.3.2", "> 9.3.2") - assert_adequate( "10.3.2", "> 9.3.2") - assert_adequate( " 9.3.2", ">= 9.3.2") - assert_adequate( "9.3.2 ", ">= 9.3.2") - assert_adequate( "", "= 0") - assert_adequate( "", "< 0.1") - assert_adequate( " ", "< 0.1 ") - assert_adequate( "", " < 0.1") - assert_adequate( " ", "> 0.a ") - assert_adequate( "", " > 0.a") - assert_adequate( "0", "=") - assert_adequate( "0", ">=") - assert_adequate( "0", "<=") - assert_adequate( "3.1", "< 3.2.rc1") - assert_adequate( "3.2.0", "> 3.2.0.rc1") - assert_adequate( "3.2.0.rc2", "> 3.2.0.rc1") - assert_adequate( "3.0.rc2", "< 3.0") - assert_adequate( "3.0.rc2", "< 3.0.0") - assert_adequate( "3.0.rc2", "< 3.0.1") - end + def test_initialize_bad + ["junk", "1.0\n2.0"].each do |bad| + e = assert_raises ArgumentError do + Gem::Version.new bad + end - def test_parse_parts_from_version_string - assert_equal [], part_values(Gem::Version.new("").parse_parts_from_version_string) - assert_equal [1], part_values(Gem::Version.new("1").parse_parts_from_version_string) - assert_equal [1, 0], part_values(Gem::Version.new("1.0").parse_parts_from_version_string) - assert_equal [1, 0, "a"], part_values(Gem::Version.new("1.0.a").parse_parts_from_version_string) + assert_equal "Malformed version number string #{bad}", e.message + end end def test_prerelease - assert Gem::Version.new('1.2.0.a').prerelease? - assert Gem::Version.new('2.9.b').prerelease? - assert Gem::Version.new('22.1.50.0.d').prerelease? + assert_prerelease "1.2.0.a" + assert_prerelease "2.9.b" + assert_prerelease "22.1.50.0.d" + assert_prerelease "1.2.d.42" + + assert_prerelease '1.A' - refute Gem::Version.new('1.2.0').prerelease? - refute Gem::Version.new('2.9').prerelease? - refute Gem::Version.new('22.1.50.0').prerelease? + refute_prerelease "1.2.0" + refute_prerelease "2.9" + refute_prerelease "22.1.50.0" end def test_release - assert_equal Gem::Version.new('1.2.0'), Gem::Version.new('1.2.0.a').release - assert_equal Gem::Version.new('1.1'), Gem::Version.new('1.1.rc10').release - assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3.alpha.5').release - assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3').release + assert_release_equal "1.2.0", "1.2.0.a" + assert_release_equal "1.1", "1.1.rc10" + assert_release_equal "1.9.3", "1.9.3.alpha.5" + assert_release_equal "1.9.3", "1.9.3" end - def test_satisfied_by_eh_boxed - assert_inadequate("1.3", "~> 1.4") - assert_adequate( "1.4", "~> 1.4") - assert_adequate( "1.5", "~> 1.4") - assert_inadequate("2.0", "~> 1.4") - - assert_inadequate("1.3", "~> 1.4.4") - assert_inadequate("1.4", "~> 1.4.4") - assert_adequate( "1.4.4", "~> 1.4.4") - assert_adequate( "1.4.5", "~> 1.4.4") - assert_inadequate("1.5", "~> 1.4.4") - assert_inadequate("2.0", "~> 1.4.4") - - assert_inadequate("1.1.pre", "~> 1.0.0") - assert_adequate( "1.1.pre", "~> 1.1") - assert_inadequate("2.0.a", "~> 1.0") - assert_adequate( "2.0.a", "~> 2.0") + def test_spaceship + assert_equal( 0, v("1.0") <=> v("1.0.0")) + assert_equal( 1, v("1.0") <=> v("1.0.a")) + assert_equal( 1, v("1.8.2") <=> v("0.0.0")) + assert_equal( 1, v("1.8.2") <=> v("1.8.2.a")) + assert_equal( 1, v("1.8.2.b") <=> v("1.8.2.a")) + assert_equal(-1, v("1.8.2.a") <=> v("1.8.2")) + assert_equal( 0, v("") <=> v("0")) end - def test_satisfied_by_eh_multiple - req = [">= 1.4", "<= 1.6", "!= 1.5"] - assert_inadequate("1.3", req) - assert_adequate( "1.4", req) - assert_inadequate("1.5", req) - assert_adequate( "1.6", req) - assert_inadequate("1.7", req) - assert_inadequate("2.0", req) + def test_spermy_recommendation + assert_spermy_equal "~> 1.0", "1" + assert_spermy_equal "~> 1.0", "1.0" + assert_spermy_equal "~> 1.2", "1.2" + assert_spermy_equal "~> 1.2", "1.2.0" + assert_spermy_equal "~> 1.2", "1.2.3" + assert_spermy_equal "~> 1.2", "1.2.3.a.4" end - def test_spaceship - assert_equal 0, Gem::Version.new('1.0') <=> Gem::Version.new('1.0.0') - assert_equal 1, Gem::Version.new('1.0') <=> Gem::Version.new('1.0.a') - assert_equal 1, Gem::Version.new('1.8.2') <=> Gem::Version.new('0.0.0') - assert_equal 1, Gem::Version.new('1.8.2') <=> Gem::Version.new('1.8.2.a') - assert_equal 1, Gem::Version.new('1.8.2.b') <=> Gem::Version.new('1.8.2.a') - assert_equal 0, Gem::Version.new('') <=> Gem::Version.new('0') + def test_to_s + assert_equal "5.2.4", v("5.2.4").to_s end - def test_boxed - assert_inadequate("1.3", "~> 1.4") - assert_adequate( "1.4", "~> 1.4") - assert_adequate( "1.5", "~> 1.4") - assert_inadequate("2.0", "~> 1.4") - - assert_inadequate("1.3", "~> 1.4.4") - assert_inadequate("1.4", "~> 1.4.4") - assert_adequate( "1.4.4", "~> 1.4.4") - assert_adequate( "1.4.5", "~> 1.4.4") - assert_inadequate("1.5", "~> 1.4.4") - assert_inadequate("2.0", "~> 1.4.4") - end + # Asserts that +version+ is a prerelease. - def test_to_s - v = Gem::Version.new("5.2.4") - assert_equal "5.2.4", v.to_s + def assert_prerelease version + assert v(version).prerelease?, "#{version} is a prerelease" end - def assert_adequate(version, requirement) - ver = Gem::Version.new(version) - req = Gem::Requirement.new(requirement) - assert req.satisfied_by?(ver), - "Version #{version} should be adequate for Requirement #{requirement}" + # Assert that +expected+ is the "spermy" recommendation for +version". + + def assert_spermy_equal expected, version + assert_equal expected, v(version).spermy_recommendation end - def assert_inadequate(version, requirement) - ver = Gem::Version.new(version) - req = Gem::Version::Requirement.new(requirement) - refute req.satisfied_by?(ver), - "Version #{version} should not be adequate for Requirement #{requirement}" + # Assert that bumping the +unbumped+ version yields the +expected+. + + def assert_bumped_version_equal expected, unbumped + assert_version_equal expected, v(unbumped).bump end - def assert_version(actual) - assert_equal @v1_0, actual - assert_equal @v1_0.version, actual.version + # Assert that +release+ is the correct non-prerelease +version+. + + def assert_release_equal release, version + assert_version_equal release, v(version).release end - def part_values(*parts) - parts.flatten.map { |part| part.value } + # Assert that two versions are equal. Handles strings or + # Gem::Version instances. + + def assert_version_equal expected, actual + assert_equal v(expected), v(actual) end -end -class TestGemVersionPart < RubyGemTestCase - def test_initialize - assert_equal 1, Gem::Version::Part.new(1).value - assert_equal 1, Gem::Version::Part.new("1").value - assert_equal "a", Gem::Version::Part.new("a").value + # Assert that two versions are eql?. Checks both directions. + + def assert_version_eql first, second + first, second = v(first), v(second) + assert first.eql?(second), "#{first} is eql? #{second}" + assert second.eql?(first), "#{second} is eql? #{first}" end - def test_spaceship - assert_equal(-1, Gem::Version::Part.new(1) <=> Gem::Version::Part.new(2)) - assert_equal( 0, Gem::Version::Part.new(2) <=> Gem::Version::Part.new(2)) - assert_equal( 1, Gem::Version::Part.new(2) <=> Gem::Version::Part.new(1)) + # Refute the assumption that +version+ is a prerelease. - assert_equal(-1, Gem::Version::Part.new("a") <=> Gem::Version::Part.new("b")) - assert_equal( 0, Gem::Version::Part.new("b") <=> Gem::Version::Part.new("b")) - assert_equal( 1, Gem::Version::Part.new("b") <=> Gem::Version::Part.new("a")) + def refute_prerelease version + refute v(version).prerelease?, "#{version} is NOT a prerelease" + end - assert_equal(-1, Gem::Version::Part.new("a") <=> Gem::Version::Part.new(1)) - assert_equal( 1, Gem::Version::Part.new(1) <=> Gem::Version::Part.new("a")) + # Refute the assumption that two versions are eql?. Checks both + # directions. + + def refute_version_eql first, second + first, second = v(first), v(second) + refute first.eql?(second), "#{first} is NOT eql? #{second}" + refute second.eql?(first), "#{second} is NOT eql? #{first}" end - def test_succ - assert_equal 2, Gem::Version::Part.new(1).succ.value - assert_equal "b", Gem::Version::Part.new("a").succ.value + # Refute the assumption that the two versions are equal?. + + def refute_version_equal unexpected, actual + refute_equal v(unexpected), v(actual) end end - diff --git a/test/rubygems/test_kernel.rb b/test/rubygems/test_kernel.rb index 0b2e8026a8..524b20d82b 100644 --- a/test/rubygems/test_kernel.rb +++ b/test/rubygems/test_kernel.rb @@ -1,9 +1,3 @@ -#-- -# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. -# All rights reserved. -# See LICENSE.txt for permissions. -#++ - require_relative 'gemutilities' require 'rubygems/package' |