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.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb
new file mode 100644
index 0000000000..dfe84dc348
--- /dev/null
+++ b/test/rubygems/test_gem_commands_uninstall_command.rb
@@ -0,0 +1,60 @@
+require 'test/unit'
+require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
+require File.join(File.expand_path(File.dirname(__FILE__)),
+ 'gem_installer_test_case')
+require 'rubygems/commands/uninstall_command'
+
+class TestGemCommandsUninstallCommand < GemInstallerTestCase
+
+ def setup
+ super
+
+ ui = MockGemUi.new
+ util_setup_gem ui
+
+ use_ui ui do
+ @installer.install
+ end
+
+ @cmd = Gem::Commands::UninstallCommand.new
+ @cmd.options[:executables] = true
+ @executable = File.join(@gemhome, 'bin', 'executable')
+ end
+
+ def test_execute_removes_executable
+ if win_platform?
+ assert_equal true, File.exist?(@executable)
+ else
+ assert_equal true, File.symlink?(@executable)
+ end
+
+ # Evil hack to prevent false removal success
+ FileUtils.rm_f @executable
+ File.open(@executable, "wb+") {|f| f.puts "binary"}
+
+ @cmd.options[:args] = Array(@spec.name)
+ use_ui @ui do
+ @cmd.execute
+ end
+
+ output = @ui.output.split "\n"
+ assert_match(/Removing executable/, output.shift)
+ assert_match(/Successfully uninstalled/, output.shift)
+ assert_equal false, File.exist?(@executable)
+ assert_nil output.shift, "UI output should have contained only two lines"
+ end
+
+ def test_execute_not_installed
+ @cmd.options[:args] = ["foo"]
+ e = assert_raise(Gem::InstallError) do
+ use_ui @ui do
+ @cmd.execute
+ end
+ end
+
+ assert_match(/\AUnknown gem foo >= 0$/, e.message)
+ output = @ui.output.split "\n"
+ assert output.empty?, "UI output should be empty after an uninstall error"
+ end
+end
+