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
Hiroshi SHIBATA 7d463e360b Merge RubyGems 3.1.0.pre3
* Fix gem pristine not accounting for user installed gems. Pull request
    #2914 by Luis Sagastume.
  * Refactor keyword argument test for Ruby 2.7. Pull request #2947 by
    SHIBATA Hiroshi.
  * Fix errors at frozen Gem::Version. Pull request #2949 by Nobuyoshi
    Nakada.
  * Remove taint usage on Ruby 2.7+. Pull request #2951 by Jeremy Evans.
  * Check Manifest.txt is up to date. Pull request #2953 by David Rodríguez.
  * Clarify symlink conditionals in tests. Pull request #2962 by David
    Rodríguez.
  * Update command line parsing to work under ps. Pull request #2966 by
    David Rodríguez.
  * Properly test `Gem::Specifications.stub_for`. Pull request #2970 by
    David Rodríguez.
  * Fix Gem::LOADED_SPECS_MUTEX handling for recursive locking. Pull request
    #2985 by MSP-Greg.
2019-11-11 16:59:49 +09:00

271 lines
7.5 KiB
Ruby

# frozen_string_literal: true
require 'rubygems/test_case'
require 'rubygems/command_manager'
class TestGemCommandManager < Gem::TestCase
PROJECT_DIR = File.expand_path('../../..', __FILE__).tap(&Gem::UNTAINT)
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
# 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