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_command_manager.rb
hsbt 08f8cfe14e Merge RubyGems upstream: 56c0bbb69e4506bda7ef7f447dfec5db820df20b
It fixed the multiple vulnerabilities.
  https://blog.rubygems.org/2019/03/05/security-advisories-2019-03.html

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-03-05 03:32:58 +00:00

279 lines
7.7 KiB
Ruby

# frozen_string_literal: true
require 'rubygems/test_case'
require 'rubygems/command_manager'
class TestGemCommandManager < Gem::TestCase
def setup
super
@command_manager = Gem::CommandManager.new
end
def test_find_command
command = @command_manager.find_command 'install'
assert_kind_of Gem::Commands::InstallCommand, command
command = @command_manager.find_command 'ins'
assert_kind_of Gem::Commands::InstallCommand, command
end
def test_find_command_ambiguous
e = assert_raises Gem::CommandLineError do
@command_manager.find_command 'u'
end
assert_equal 'Ambiguous command u matches [uninstall, unpack, update]',
e.message
end
def test_find_alias_command
command = @command_manager.find_command 'i'
assert_kind_of Gem::Commands::InstallCommand, command
end
def test_find_command_ambiguous_exact
ins_command = Class.new
Gem::Commands.send :const_set, :InsCommand, ins_command
@command_manager.register_command :ins
command = @command_manager.find_command 'ins'
assert_kind_of ins_command, command
ensure
Gem::Commands.send :remove_const, :InsCommand
end
def test_find_command_unknown
e = assert_raises Gem::CommandLineError do
@command_manager.find_command 'xyz'
end
assert_equal 'Unknown command xyz', e.message
end
def test_run_interrupt
old_load_path = $:.dup
$: << File.expand_path("test/rubygems", @@project_dir)
Gem.load_env_plugins
@command_manager.register_command :interrupt
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@command_manager.run %w[interrupt]
end
assert_equal '', ui.output
assert_equal "ERROR: Interrupted\n", ui.error
end
ensure
$:.replace old_load_path
Gem::CommandManager.reset
end
def test_run_crash_command
old_load_path = $:.dup
$: << File.expand_path("test/rubygems", @@project_dir)
@command_manager.register_command :crash
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@command_manager.run %w[crash]
end
assert_equal '', ui.output
err = ui.error.split("\n").first
assert_equal "ERROR: Loading command: crash (RuntimeError)", err
end
ensure
$:.replace old_load_path
@command_manager.unregister_command :crash
end
def test_process_args_bad_arg
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@command_manager.process_args %w[--bad-arg]
end
end
assert_match(/invalid option: --bad-arg/i, @ui.error)
end
def test_process_args_bad_no_ri
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@command_manager.process_args %w[--no-ri]
end
end
assert_match(/invalid option: --no-ri. Use --no-document instead./i, @ui.error)
end
# HACK move to install command test
def test_process_args_install
#capture all install options
use_ui @ui do
check_options = nil
@command_manager['install'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[install]
assert_equal %w[ri], check_options[:document].sort
assert_equal false, check_options[:force]
assert_equal :both, check_options[:domain]
assert_equal true, check_options[:wrappers]
assert_equal Gem::Requirement.default, check_options[:version]
assert_nil check_options[:install_dir]
assert_nil check_options[:bin_dir]
#check settings
check_options = nil
@command_manager.process_args %w[
install --force --local --document=ri,rdoc --install-dir .
--version 3.0 --no-wrapper --bindir .
]
assert_equal %w[rdoc ri], check_options[:document].sort
assert_equal true, check_options[:force]
assert_equal :local, check_options[:domain]
assert_equal false, check_options[:wrappers]
assert_equal Gem::Requirement.new('3.0'), check_options[:version]
assert_equal Dir.pwd, check_options[:install_dir]
assert_equal Dir.pwd, check_options[:bin_dir]
#check remote domain
check_options = nil
@command_manager.process_args %w[install --remote]
assert_equal :remote, check_options[:domain]
#check both domain
check_options = nil
@command_manager.process_args %w[install --both]
assert_equal :both, check_options[:domain]
#check both domain
check_options = nil
@command_manager.process_args %w[install --both]
assert_equal :both, check_options[:domain]
end
end
# HACK move to uninstall command test
def test_process_args_uninstall
#capture all uninstall options
check_options = nil
@command_manager['uninstall'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[uninstall]
assert_equal Gem::Requirement.default, check_options[:version]
#check settings
check_options = nil
@command_manager.process_args %w[uninstall foobar --version 3.0]
assert_equal "foobar", check_options[:args].first
assert_equal Gem::Requirement.new('3.0'), check_options[:version]
end
# HACK move to check command test
def test_process_args_check
#capture all check options
check_options = nil
@command_manager['check'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[check]
assert_equal true, check_options[:alien]
#check settings
check_options = nil
@command_manager.process_args %w[check foobar --alien]
assert_equal true, check_options[:alien]
end
# HACK move to build command test
def test_process_args_build
#capture all build options
check_options = nil
@command_manager['build'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[build]
#NOTE: Currently no defaults
#check settings
check_options = nil
@command_manager.process_args %w[build foobar.rb]
assert_equal 'foobar.rb', check_options[:args].first
end
# HACK move to query command test
def test_process_args_query
#capture all query options
check_options = nil
@command_manager['query'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[query]
assert_equal(//, check_options[:name])
assert_equal :local, check_options[:domain]
assert_equal false, check_options[:details]
#check settings
check_options = nil
@command_manager.process_args %w[query --name foobar --local --details]
assert_equal(/foobar/i, check_options[:name])
assert_equal :local, check_options[:domain]
assert_equal true, check_options[:details]
#remote domain
check_options = nil
@command_manager.process_args %w[query --remote]
assert_equal :remote, check_options[:domain]
#both (local/remote) domains
check_options = nil
@command_manager.process_args %w[query --both]
assert_equal :both, check_options[:domain]
end
# HACK move to update command test
def test_process_args_update
#capture all update options
check_options = nil
@command_manager['update'].when_invoked do |options|
check_options = options
true
end
#check defaults
@command_manager.process_args %w[update]
assert_includes check_options[:document], 'rdoc'
#check settings
check_options = nil
@command_manager.process_args %w[update --force --document=ri --install-dir .]
assert_includes check_options[:document], 'ri'
assert_equal true, check_options[:force]
assert_equal Dir.pwd, check_options[:install_dir]
end
end