1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/rubygems/test_gem_commands_install_command.rb

265 lines
7.2 KiB
Ruby
Raw Normal View History

require_relative 'gemutilities'
require 'rubygems/commands/install_command'
class TestGemCommandsInstallCommand < RubyGemTestCase
def setup
super
@cmd = Gem::Commands::InstallCommand.new
@cmd.options[:generate_rdoc] = false
@cmd.options[:generate_ri] = false
end
def test_execute_exclude_prerelease
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"))
@cmd.options[:args] = [@a2.name]
use_ui @ui do
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 0, e.exit_code, @ui.error
end
assert_match(/Successfully installed #{@a2.full_name}$/, @ui.output)
refute_match(/Successfully installed #{@a2_pre.full_name}$/, @ui.output)
end
def test_execute_explicit_version_includes_prerelease
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"))
@cmd.handle_options [@a2_pre.name, '--version', @a2_pre.version.to_s]
assert @cmd.options[:prerelease]
assert @cmd.options[:version].satisfied_by?(@a2_pre.version)
use_ui @ui do
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 0, e.exit_code, @ui.error
end
refute_match(/Successfully installed #{@a2.full_name}$/, @ui.output)
assert_match(/Successfully installed #{@a2_pre.full_name}$/, @ui.output)
end
def test_execute_include_dependencies
@cmd.options[:include_dependencies] = true
@cmd.options[:args] = []
assert_raises Gem::CommandLineError do
use_ui @ui do
@cmd.execute
end
end
output = @ui.output.split "\n"
assert_equal "INFO: `gem install -y` is now default and will be removed",
output.shift
assert_equal "INFO: use --ignore-dependencies to install only the gems you list",
output.shift
assert output.empty?, output.inspect
end
def test_execute_local
util_setup_fake_fetcher
@cmd.options[:domain] = :local
FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"),
File.join(@tempdir)
@cmd.options[:args] = [@a2.name]
use_ui @ui do
orig_dir = Dir.pwd
begin
Dir.chdir @tempdir
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 0, e.exit_code
ensure
Dir.chdir orig_dir
end
end
out = @ui.output.split "\n"
assert_equal "Successfully installed #{@a2.full_name}", out.shift
assert_equal "1 gem installed", out.shift
assert out.empty?, out.inspect
end
def test_no_user_install
skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
util_setup_fake_fetcher
@cmd.options[:user_install] = false
FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"),
File.join(@tempdir)
@cmd.options[:args] = [@a2.name]
use_ui @ui do
orig_dir = Dir.pwd
begin
File.chmod 0755, @userhome
File.chmod 0555, @gemhome
Dir.chdir @tempdir
assert_raises Gem::FilePermissionError do
@cmd.execute
end
ensure
Dir.chdir orig_dir
File.chmod 0755, @gemhome
end
end
end
def test_execute_local_missing
util_setup_fake_fetcher
@cmd.options[:domain] = :local
@cmd.options[:args] = %w[no_such_gem]
use_ui @ui do
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 2, e.exit_code
end
# HACK no repository was checked
assert_equal "ERROR: could not find gem no_such_gem locally or in a repository\n",
@ui.error
end
def test_execute_no_gem
@cmd.options[:args] = %w[]
assert_raises Gem::CommandLineError do
@cmd.execute
end
end
def test_execute_nonexistent
util_setup_fake_fetcher
util_setup_spec_fetcher
@cmd.options[:args] = %w[nonexistent]
use_ui @ui do
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 2, e.exit_code
end
assert_equal "ERROR: could not find gem nonexistent locally or in a repository\n",
@ui.error
end
def test_execute_prerelease
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"))
@cmd.options[:prerelease] = true
@cmd.options[:args] = [@a2_pre.name]
use_ui @ui do
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 0, e.exit_code, @ui.error
end
refute_match(/Successfully installed #{@a2.full_name}$/, @ui.output)
assert_match(/Successfully installed #{@a2_pre.full_name}$/, @ui.output)
end
def test_execute_remote
@cmd.options[:generate_rdoc] = true
@cmd.options[:generate_ri] = true
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"))
@cmd.options[:args] = [@a2.name]
use_ui @ui do
e = assert_raises Gem::SystemExitException do
capture_io do
@cmd.execute
end
end
assert_equal 0, e.exit_code
end
out = @ui.output.split "\n"
assert_equal "Successfully installed #{@a2.full_name}", out.shift
assert_equal "1 gem installed", out.shift
assert_equal "Installing ri documentation for #{@a2.full_name}...",
out.shift
assert_equal "Installing RDoc documentation for #{@a2.full_name}...",
out.shift
assert out.empty?, out.inspect
end
def test_execute_two
util_setup_fake_fetcher
@cmd.options[:domain] = :local
FileUtils.mv File.join(@gemhome, 'cache', "#{@a2.full_name}.gem"),
File.join(@tempdir)
FileUtils.mv File.join(@gemhome, 'cache', "#{@b2.full_name}.gem"),
File.join(@tempdir)
@cmd.options[:args] = [@a2.name, @b2.name]
use_ui @ui do
orig_dir = Dir.pwd
begin
Dir.chdir @tempdir
e = assert_raises Gem::SystemExitException do
@cmd.execute
end
assert_equal 0, e.exit_code
ensure
Dir.chdir orig_dir
end
end
out = @ui.output.split "\n"
assert_equal "Successfully installed #{@a2.full_name}", out.shift
assert_equal "Successfully installed #{@b2.full_name}", out.shift
assert_equal "2 gems installed", out.shift
assert out.empty?, out.inspect
end
end