diff options
Diffstat (limited to 'test/rubygems/test_gem_commands_uninstall_command.rb')
-rw-r--r-- | test/rubygems/test_gem_commands_uninstall_command.rb | 210 |
1 files changed, 124 insertions, 86 deletions
diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb index 5bd2c40d59..4daa61cb0c 100644 --- a/test/rubygems/test_gem_commands_uninstall_command.rb +++ b/test/rubygems/test_gem_commands_uninstall_command.rb @@ -1,12 +1,13 @@ # frozen_string_literal: true -require_relative 'installer_test_case' -require 'rubygems/commands/uninstall_command' + +require_relative "installer_test_case" +require "rubygems/commands/uninstall_command" class TestGemCommandsUninstallCommand < Gem::InstallerTestCase def setup super @cmd = Gem::Commands::UninstallCommand.new - @executable = File.join(@gemhome, 'bin', 'executable') + @executable = File.join(@gemhome, "bin", "executable") end def test_execute_all_named @@ -14,20 +15,15 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - default = new_default_spec 'default', '1' + default = new_default_spec "default", "1" install_default_gems default gemhome2 = "#{@gemhome}2" - a_4, = util_gem 'a', 4 - install_gem a_4, :install_dir => gemhome2 - - Gem::Specification.dirs = [@gemhome, gemhome2] + a_4, = util_gem "a", 4 + install_gem a_4, install_dir: gemhome2 - assert_includes Gem::Specification.all_names, 'a-1' - assert_includes Gem::Specification.all_names, 'a-4' - assert_includes Gem::Specification.all_names, 'b-2' - assert_includes Gem::Specification.all_names, 'default-1' + assert_gems_presence "a-1", "a-4", "b-2", "default-1", dirs: [@gemhome, gemhome2] @cmd.options[:all] = true @cmd.options[:args] = %w[a] @@ -41,10 +37,10 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase end def test_execute_all_named_default_single - z_1 = new_default_spec 'z', '1' + z_1 = new_default_spec "z", "1" install_default_gems z_1 - assert_includes Gem::Specification.all_names, 'z-1' + assert_includes Gem::Specification.all_names, "z-1" @cmd.options[:all] = true @cmd.options[:args] = %w[z] @@ -57,18 +53,18 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase output = @ui.output.split "\n" - assert_equal 'Gem z-1 cannot be uninstalled because it is a default gem', output.shift + assert_equal "Gem z-1 cannot be uninstalled because it is a default gem", output.shift end def test_execute_all_named_default_multiple - z_1 = new_default_spec 'z', '1' + z_1 = new_default_spec "z", "1" install_default_gems z_1 - z_2, = util_gem 'z', 2 + z_2, = util_gem "z", 2 install_gem z_2 - assert_includes Gem::Specification.all_names, 'z-1' - assert_includes Gem::Specification.all_names, 'z-2' + assert_includes Gem::Specification.all_names, "z-1" + assert_includes Gem::Specification.all_names, "z-2" @cmd.options[:all] = true @cmd.options[:args] = %w[z] @@ -81,15 +77,15 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase output = @ui.output.split "\n" - assert_equal 'Gem z-1 cannot be uninstalled because it is a default gem', output.shift - assert_equal 'Successfully uninstalled z-2', output.shift + assert_equal "Gem z-1 cannot be uninstalled because it is a default gem", output.shift + assert_equal "Successfully uninstalled z-2", output.shift end def test_execute_dependency_order initial_install - c = quick_gem 'c' do |spec| - spec.add_dependency 'a' + c = quick_gem "c" do |spec| + spec.add_dependency "a" end util_build_gem c @@ -110,15 +106,15 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase output = ui.output.split "\n" - assert_equal 'Successfully uninstalled c-2', output.shift + assert_equal "Successfully uninstalled c-2", output.shift assert_equal "Removing executable", output.shift - assert_equal 'Successfully uninstalled a-2', output.shift + assert_equal "Successfully uninstalled a-2", output.shift end def test_execute_removes_executable initial_install - if win_platform? + if Gem.win_platform? assert File.exist?(@executable) else assert File.symlink?(@executable) @@ -149,12 +145,12 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase FileUtils.rm_f @executable # Wish this didn't happen in #setup - Gem::Installer.exec_format = 'foo-%s-bar' + Gem::Installer.exec_format = "foo-%s-bar" installer.format_executable = true installer.install - formatted_executable = File.join @gemhome, 'bin', 'foo-executable-bar' + formatted_executable = File.join @gemhome, "bin", "foo-executable-bar" assert_equal true, File.exist?(formatted_executable) @cmd.options[:executables] = true @@ -162,7 +158,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase @cmd.execute assert_equal false, File.exist?(formatted_executable) - rescue + rescue StandardError Gem::Installer.exec_format = nil end @@ -197,19 +193,19 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - assert_equal 3, Gem::Specification.find_all_by_name('a').length + assert_equal 3, Gem::Specification.find_all_by_name("a").length - @cmd.options[:version] = '1' + @cmd.options[:version] = "1" @cmd.options[:force] = true - @cmd.options[:args] = ['a'] + @cmd.options[:args] = ["a"] use_ui ui do @cmd.execute end - assert_equal 2, Gem::Specification.find_all_by_name('a').length + assert_equal 2, Gem::Specification.find_all_by_name("a").length - assert File.exist? File.join(@gemhome, 'bin', 'executable') + assert File.exist? File.join(@gemhome, "bin", "executable") end def test_execute_with_version_specified_as_colon @@ -219,18 +215,38 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - assert_equal 3, Gem::Specification.find_all_by_name('a').length + assert_equal 3, Gem::Specification.find_all_by_name("a").length @cmd.options[:force] = true - @cmd.options[:args] = ['a:1'] + @cmd.options[:args] = ["a:1"] use_ui ui do @cmd.execute end - assert_equal 2, Gem::Specification.find_all_by_name('a').length + assert_equal 2, Gem::Specification.find_all_by_name("a").length + + assert File.exist? File.join(@gemhome, "bin", "executable") + end + + def test_execute_with_multiple_version_specified_as_colon + initial_install + + ui = Gem::MockGemUi.new "y\n" + + util_make_gems + + assert_equal 3, Gem::Specification.find_all_by_name("a").length + + @cmd.options[:force] = true + @cmd.options[:args] = ["a:1", "a:2"] + + use_ui ui do + @cmd.execute + end - assert File.exist? File.join(@gemhome, 'bin', 'executable') + assert_equal 1, Gem::Specification.find_all_by_name("a").length + assert_equal Gem::Version.new("3.a"), Gem::Specification.find_by_name("a").version end def test_uninstall_selection @@ -238,22 +254,22 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - list = Gem::Specification.find_all_by_name 'a' + list = Gem::Specification.find_all_by_name "a" - @cmd.options[:args] = ['a'] + @cmd.options[:args] = ["a"] use_ui ui do @cmd.execute end - updated_list = Gem::Specification.find_all_by_name('a') + updated_list = Gem::Specification.find_all_by_name("a") assert_equal list.length - 1, updated_list.length - assert_match ' 1. a-1', ui.output - assert_match ' 2. a-2', ui.output - assert_match ' 3. a-3.a', ui.output - assert_match ' 4. All versions', ui.output - assert_match 'uninstalled a-1', ui.output + assert_match " 1. a-1", ui.output + assert_match " 2. a-2", ui.output + assert_match " 3. a-3.a", ui.output + assert_match " 4. All versions", ui.output + assert_match "uninstalled a-1", ui.output end def test_uninstall_selection_multiple_gems @@ -261,31 +277,31 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - a_list = Gem::Specification.find_all_by_name('a') - b_list = Gem::Specification.find_all_by_name('b') + a_list = Gem::Specification.find_all_by_name("a") + b_list = Gem::Specification.find_all_by_name("b") list = a_list + b_list - @cmd.options[:args] = ['a', 'b'] + @cmd.options[:args] = ["a", "b"] use_ui ui do @cmd.execute end - updated_a_list = Gem::Specification.find_all_by_name('a') - updated_b_list = Gem::Specification.find_all_by_name('b') + updated_a_list = Gem::Specification.find_all_by_name("a") + updated_b_list = Gem::Specification.find_all_by_name("b") updated_list = updated_a_list + updated_b_list assert_equal list.length - 2, updated_list.length out = ui.output.split("\n") - assert_match 'uninstalled b-2', out.shift - assert_match '', out.shift - assert_match 'Select gem to uninstall:', out.shift - assert_match ' 1. a-1', out.shift - assert_match ' 2. a-2', out.shift - assert_match ' 3. a-3.a', out.shift - assert_match ' 4. All versions', out.shift - assert_match 'uninstalled a-1', out.shift + assert_match "uninstalled b-2", out.shift + assert_match "", out.shift + assert_match "Select gem to uninstall:", out.shift + assert_match " 1. a-1", out.shift + assert_match " 2. a-2", out.shift + assert_match " 3. a-3.a", out.shift + assert_match " 4. All versions", out.shift + assert_match "uninstalled a-1", out.shift assert_empty out end @@ -294,22 +310,22 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase ui = Gem::MockGemUi.new "y\n" - a_1, = util_gem 'a', 1 + a_1, = util_gem "a", 1 install_gem a_1 - a_3a, = util_gem 'a', '3.a' + a_3a, = util_gem "a", "3.a" install_gem a_3a - assert_equal 3, Gem::Specification.find_all_by_name('a').length + assert_equal 3, Gem::Specification.find_all_by_name("a").length @cmd.options[:force] = true - @cmd.options[:args] = ['a'] + @cmd.options[:args] = ["a"] use_ui ui do @cmd.execute end - assert_empty Gem::Specification.find_all_by_name('a') + assert_empty Gem::Specification.find_all_by_name("a") assert_match "Removing executable", ui.output refute File.exist? @executable end @@ -321,36 +337,32 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase util_make_gems - assert Gem::Specification.find_all_by_name('dep_x').length > 0 - assert Gem::Specification.find_all_by_name('x').length > 0 + assert Gem::Specification.find_all_by_name("dep_x").length > 0 + assert Gem::Specification.find_all_by_name("x").length > 0 @cmd.options[:force] = true - @cmd.options[:args] = ['x'] + @cmd.options[:args] = ["x"] use_ui ui do @cmd.execute end - assert Gem::Specification.find_all_by_name('dep_x').length > 0 - assert Gem::Specification.find_all_by_name('x').length.zero? + assert Gem::Specification.find_all_by_name("dep_x").length > 0 + assert Gem::Specification.find_all_by_name("x").length.zero? end def test_execute_all util_make_gems - default = new_default_spec 'default', '1' + default = new_default_spec "default", "1" install_default_gems default gemhome2 = "#{@gemhome}2" - a_4, = util_gem 'a', 4 + a_4, = util_gem "a", 4 install_gem a_4 - Gem::Specification.dirs = [@gemhome, gemhome2] - - assert_includes Gem::Specification.all_names, 'a-1' - assert_includes Gem::Specification.all_names, 'a-4' - assert_includes Gem::Specification.all_names, 'default-1' + assert_gems_presence "a-1", "a-4", "default-1", dirs: [@gemhome, gemhome2] @cmd.options[:all] = true @cmd.options[:args] = [] @@ -368,14 +380,12 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase gemhome2 = "#{@gemhome}2" - a_4, = util_gem 'a', 4 - install_gem a_4 , :install_dir => gemhome2 - - Gem::Specification.dirs = [@gemhome, gemhome2] + a_4, = util_gem "a", 4 + install_gem a_4, install_dir: gemhome2 - assert_includes Gem::Specification.all_names, 'a-4' + assert_gems_presence "a-4", dirs: [@gemhome, gemhome2] - @cmd.options[:args] = ['a:4'] + @cmd.options[:args] = ["a:4"] e = assert_raise Gem::InstallError do use_ui ui do @@ -386,6 +396,26 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase assert_includes e.message, "a is not installed in GEM_HOME" end + def test_execute_outside_gem_home_when_install_dir_given + gemhome2 = "#{@gemhome}2" + + a_4, = util_gem "a", 4 + install_gem a_4, install_dir: gemhome2 + + assert_gems_presence "a-4", dirs: [@gemhome, gemhome2] + + Gem::Specification.dirs = [@gemhome] + + @cmd.options[:install_dir] = gemhome2 + @cmd.options[:args] = ["a:4"] + + @cmd.execute + + Gem::Specification.dirs = [gemhome2] + + refute_includes Gem::Specification.all_names.sort, "a-4" + end + def test_handle_options @cmd.handle_options %w[] @@ -397,7 +427,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase end def test_handle_options_vendor - vendordir(File.join(@tempdir, 'vendor')) do + vendordir(File.join(@tempdir, "vendor")) do use_ui @ui do @cmd.handle_options %w[--vendor] end @@ -440,7 +470,7 @@ WARNING: Use your OS package manager to uninstall vendor gems @cmd.handle_options %w[--vendor] end - assert_equal 'invalid option: --vendor your platform is not supported', + assert_equal "invalid option: --vendor your platform is not supported", e.message refute @cmd.options[:vendor] @@ -449,7 +479,7 @@ WARNING: Use your OS package manager to uninstall vendor gems end def test_execute_with_gem_not_installed - @cmd.options[:args] = ['d'] + @cmd.options[:args] = ["d"] use_ui ui do @cmd.execute @@ -486,7 +516,7 @@ WARNING: Use your OS package manager to uninstall vendor gems end assert_empty @ui.output - assert_match %r{Error: unable to successfully uninstall '#{@spec.name}'}, @ui.error + assert_match(/Error: unable to successfully uninstall '#{@spec.name}'/, @ui.error) end private @@ -501,4 +531,12 @@ WARNING: Use your OS package manager to uninstall vendor gems end end end + + def assert_gems_presence(*gems, dirs:) + Gem::Specification.dirs = dirs + + gems.each do |full_name| + assert_includes Gem::Specification.all_names, full_name + end + end end |