summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_commands_uninstall_command.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_commands_uninstall_command.rb')
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb210
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