From eddc0685f224a6de2f5a6bdaab7f87562192ba7f Mon Sep 17 00:00:00 2001 From: drbrain Date: Wed, 19 Dec 2012 07:19:10 +0000 Subject: * lib/rubygems/commands/query_command.rb: Refactored to improve maintainability. * test/rubygems/test_gem_commands_query_command.rb: Note default gems in gem list details. * lib/rubygems/uninstaller.rb: Detect all gems for uninstallation. This allows duplicate installs of default gems to be removed. * lib/rubygems/specification.rb: Allow use of ::each_spec. * lib/rubygems/test_case.rb: Added install_default_gems. * test/rubygems/test_gem_commands_uninstall_command.rb: Moved test down to the uninstaller tests. * test/rubygems/test_gem_uninstaller.rb: Test for uninstallation of default gems and duplicate default gems. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38461 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem_commands_query_command.rb | 44 +++++++++++++--- .../test_gem_commands_uninstall_command.rb | 18 ------- test/rubygems/test_gem_uninstaller.rb | 61 ++++++++++++++++------ 3 files changed, 83 insertions(+), 40 deletions(-) (limited to 'test/rubygems') diff --git a/test/rubygems/test_gem_commands_query_command.rb b/test/rubygems/test_gem_commands_query_command.rb index 8ff62b4217..09e6efcd07 100644 --- a/test/rubygems/test_gem_commands_query_command.rb +++ b/test/rubygems/test_gem_commands_query_command.rb @@ -106,7 +106,6 @@ pl (1 i386-linux) @a2.summary = 'This is a lot of text. ' * 4 @a2.authors = ['Abraham Lincoln', 'Hirohito'] @a2.homepage = 'http://a.example.com/' - @a2.rubyforge_project = 'rubygems' util_clear_gems util_setup_spec_fetcher @a1, @a2, @pl1 @@ -123,7 +122,6 @@ pl (1 i386-linux) a (2) Authors: Abraham Lincoln, Hirohito - Rubyforge: http://rubyforge.org/projects/rubygems Homepage: http://a.example.com/ This is a lot of text. This is a lot of text. This is a lot of text. @@ -147,7 +145,6 @@ pl (1) @a2.summary = 'This is a lot of text. ' * 4 @a2.authors = ['Abraham Lincoln', 'Hirohito'] @a2.homepage = 'http://a.example.com/' - @a2.rubyforge_project = 'rubygems' @a2.platform = 'universal-darwin' util_clear_gems @@ -168,7 +165,6 @@ a (2, 1) 1: x86-linux 2: universal-darwin Authors: Abraham Lincoln, Hirohito - Rubyforge: http://rubyforge.org/projects/rubygems Homepage: http://a.example.com/ This is a lot of text. This is a lot of text. This is a lot of text. @@ -355,7 +351,6 @@ pl (1 i386-linux) @a2.summary = 'This is a lot of text. ' * 4 @a2.authors = ['Abraham Lincoln', 'Hirohito'] @a2.homepage = 'http://a.example.com/' - @a2.rubyforge_project = 'rubygems' @a2.platform = 'universal-darwin' util_clear_gems @@ -380,7 +375,6 @@ a (2, 1) 1: x86-linux 2: universal-darwin Authors: Abraham Lincoln, Hirohito - Rubyforge: http://rubyforge.org/projects/rubygems Homepage: http://a.example.com/ Installed at - - @@ -400,5 +394,43 @@ pl \(1\) assert_match expected, @ui.output end + def test_execute_default_details + default_gem_dir = Gem::Specification.default_specifications_dir + @a1.loaded_from = + File.join default_gem_dir, @a1.spec_name + + @cmd.handle_options %w[-l -d] + + use_ui @ui do + @cmd.execute + end + + str = @ui.output + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (3.a, 2, 1) + Author: A User + Homepage: http://example.com + Installed at (3.a): #{@gemhome} + (2): #{@gemhome} + (1, default): #{@a1.base_dir} + + this is a summary + +pl \(1\) + Platform: i386-linux + Author: A User + Homepage: http://example.com + Installed at: #{@gemhome} + + this is a summary + EOF + + assert_equal expected, @ui.output + end + end diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb index 964ce85cc3..844c7b4b97 100644 --- a/test/rubygems/test_gem_commands_uninstall_command.rb +++ b/test/rubygems/test_gem_commands_uninstall_command.rb @@ -175,23 +175,5 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase assert Gem::Specification.find_all_by_name('x').length == 0 end - def test_execute_default_gem - default_gem_spec = new_default_spec("default", "2.0.0.0", - nil, "default/gem.rb") - install_default_specs(default_gem_spec) - - ui = Gem::MockGemUi.new - - @cmd.options[:args] = %w[default] - @cmd.options[:executables] = true - - use_ui ui do - e = assert_raises Gem::InstallError do - @cmd.execute - end - assert_equal "gem \"default\" cannot be uninstalled because it is a default gem", - e.message - end - end end diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb index f6fe4a9a4f..948318a5e3 100644 --- a/test/rubygems/test_gem_uninstaller.rb +++ b/test/rubygems/test_gem_uninstaller.rb @@ -172,6 +172,38 @@ class TestGemUninstaller < Gem::InstallerTestCase assert_same uninstaller, @post_uninstall_hook_arg end + def test_uninstall_default_gem + spec = new_default_spec 'default', '2' + + install_default_gems spec + + uninstaller = Gem::Uninstaller.new spec.name, :executables => true + + e = assert_raises Gem::InstallError do + uninstaller.uninstall + end + + assert_equal 'gem "default" cannot be uninstalled ' + + 'because it is a default gem', + e.message + end + + def test_uninstall_default_gem_with_same_version + default_spec = new_default_spec 'default', '2' + install_default_gems default_spec + + spec = new_spec 'default', '2' + install_gem spec + + Gem::Specification.reset + + uninstaller = Gem::Uninstaller.new spec.name, :executables => true + + uninstaller.uninstall + + refute_path_exists spec.gem_dir + end + def test_uninstall_nonexistent uninstaller = Gem::Uninstaller.new 'bogus', :executables => true @@ -265,8 +297,8 @@ class TestGemUninstaller < Gem::InstallerTestCase end def test_uninstall_prompts_about_broken_deps - util_gem 'r', '1', 'q' => '= 1' - util_gem 'q', '1' + quick_gem 'r', '1' do |s| s.add_dependency 'q', '= 1' end + quick_gem 'q', '1' un = Gem::Uninstaller.new('q') ui = Gem::MockGemUi.new("y\n") @@ -287,10 +319,10 @@ class TestGemUninstaller < Gem::InstallerTestCase end def test_uninstall_only_lists_unsatified_deps - util_gem 'r', '1', 'q' => '~> 1.0' - util_gem 'x', '1', 'q' => '= 1.0' - util_gem 'q', '1.0' - util_gem 'q', '1.1' + quick_gem 'r', '1' do |s| s.add_dependency 'q', '~> 1.0' end + quick_gem 'x', '1' do |s| s.add_dependency 'q', '= 1.0' end + quick_gem 'q', '1.0' + quick_gem 'q', '1.1' un = Gem::Uninstaller.new('q', :version => "1.0") ui = Gem::MockGemUi.new("y\n") @@ -311,9 +343,9 @@ class TestGemUninstaller < Gem::InstallerTestCase end def test_uninstall_doesnt_prompt_when_other_gem_satifies_requirement - util_gem 'r', '1', 'q' => '~> 1.0' - util_gem 'q', '1.0' - util_gem 'q', '1.1' + quick_gem 'r', '1' do |s| s.add_dependency 'q', '~> 1.0' end + quick_gem 'q', '1.0' + quick_gem 'q', '1.1' un = Gem::Uninstaller.new('q', :version => "1.0") ui = Gem::MockGemUi.new("y\n") @@ -328,11 +360,8 @@ class TestGemUninstaller < Gem::InstallerTestCase end def test_uninstall_doesnt_prompt_when_removing_a_dev_dep - util_gem('r', '1') do |s| - s.add_development_dependency "q", "= 1.0" - end - - util_gem 'q', '1.0' + quick_gem 'r', '1' do |s| s.add_development_dependency 'q', '= 1.0' end + quick_gem 'q', '1.0' un = Gem::Uninstaller.new('q', :version => "1.0") ui = Gem::MockGemUi.new("y\n") @@ -348,11 +377,11 @@ class TestGemUninstaller < Gem::InstallerTestCase def test_uninstall_prompt_includes_dep_type - util_gem 'r', '1' do |s| + quick_gem 'r', '1' do |s| s.add_development_dependency 'q', '= 1' end - util_gem 'q', '1' + quick_gem 'q', '1' un = Gem::Uninstaller.new('q', :check_dev => true) ui = Gem::MockGemUi.new("y\n") -- cgit v1.2.3