2016-02-01 07:43:26 -05:00
# frozen_string_literal: true
2011-01-28 18:46:47 -05:00
require 'rubygems/test_case'
2007-11-10 02:48:56 -05:00
require 'rubygems/commands/install_command'
2015-07-05 19:03:21 -04:00
require 'rubygems/request_set'
2013-08-03 08:23:01 -04:00
require 'rubygems/rdoc'
2007-11-10 02:48:56 -05:00
2011-01-28 18:46:47 -05:00
class TestGemCommandsInstallCommand < Gem :: TestCase
2007-11-10 02:48:56 -05:00
def setup
super
2013-09-14 04:59:02 -04:00
common_installer_setup
2007-11-10 02:48:56 -05:00
@cmd = Gem :: Commands :: InstallCommand . new
2012-11-29 01:52:18 -05:00
@cmd . options [ :document ] = [ ]
@gemdeps = " tmp_install_gemdeps "
@orig_args = Gem :: Command . build_args
2013-09-18 17:29:41 -04:00
common_installer_setup
2012-11-29 01:52:18 -05:00
end
def teardown
super
2013-09-18 17:29:41 -04:00
common_installer_teardown
2012-11-29 01:52:18 -05:00
Gem :: Command . build_args = @orig_args
File . unlink @gemdeps if File . file? @gemdeps
2014-09-13 23:30:02 -04:00
File . unlink " #{ @gemdeps } .lock " if File . file? " #{ @gemdeps } .lock "
2007-11-10 02:48:56 -05:00
end
2009-06-09 17:38:59 -04:00
def test_execute_exclude_prerelease
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
fetcher . gem 'a' , '2.pre'
end
2009-06-09 17:38:59 -04:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2009-06-09 17:38:59 -04:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2009-06-09 17:38:59 -04:00
end
def test_execute_explicit_version_includes_prerelease
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
fetcher . gem 'a' , '2.a'
end
2009-06-09 17:38:59 -04:00
2013-11-11 19:16:41 -05:00
a2_pre = specs [ 'a-2.a' ]
2009-06-09 17:38:59 -04:00
2013-11-11 19:16:41 -05:00
@cmd . handle_options [ a2_pre . name , '--version' , a2_pre . version . to_s ,
2011-03-07 03:44:45 -05:00
" --no-ri " , " --no-rdoc " ]
2009-06-09 17:38:59 -04:00
assert @cmd . options [ :prerelease ]
2013-11-11 19:16:41 -05:00
assert @cmd . options [ :version ] . satisfied_by? ( a2_pre . version )
2009-06-09 17:38:59 -04:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2.a ] , @cmd . installed_specs . map { | spec | spec . full_name }
2007-11-10 02:48:56 -05:00
end
def test_execute_local
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2007-11-10 02:48:56 -05:00
@cmd . options [ :domain ] = :local
2013-11-11 19:16:41 -05:00
FileUtils . mv specs [ 'a-2' ] . cache_file , @tempdir
2007-11-10 02:48:56 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2007-11-10 02:48:56 -05:00
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2008-03-31 18:40:06 -04:00
@cmd . execute
end
2007-11-10 02:48:56 -05:00
ensure
Dir . chdir orig_dir
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2007-11-10 02:48:56 -05:00
end
2017-10-07 21:32:18 -04:00
def test_execute_local_transitive_prerelease
specs = spec_fetcher do | fetcher |
fetcher . download 'a' , 2 , 'b' = > " 2.a " , 'c' = > '3'
fetcher . download 'b' , '2.a'
fetcher . download 'c' , '3'
end
@cmd . options [ :domain ] = :local
FileUtils . mv specs [ 'a-2' ] . cache_file , @tempdir
FileUtils . mv specs [ 'b-2.a' ] . cache_file , @tempdir
FileUtils . mv specs [ 'c-3' ] . cache_file , @tempdir
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
FileUtils . rm_r [ @gemhome , " gems " ]
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
assert_equal %w[ a-2 b-2.a c-3 ] , @cmd . installed_specs . map { | spec | spec . full_name } . sort
assert_match " 3 gems installed " , @ui . output
end
2012-11-29 01:52:18 -05:00
def test_execute_no_user_install
2009-06-09 17:38:59 -04:00
skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
2018-02-05 21:58:35 -05:00
skip 'skipped in root privilege' if Process . uid . zero?
2009-06-09 17:38:59 -04:00
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2009-06-09 17:38:59 -04:00
@cmd . options [ :user_install ] = false
2013-11-11 19:16:41 -05:00
FileUtils . mv specs [ 'a-2' ] . cache_file , @tempdir
2009-06-09 17:38:59 -04:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2009-06-09 17:38:59 -04:00
use_ui @ui do
orig_dir = Dir . pwd
begin
2011-05-31 23:45:05 -04:00
FileUtils . chmod 0755 , @userhome
FileUtils . chmod 0555 , @gemhome
2009-06-09 17:38:59 -04:00
Dir . chdir @tempdir
assert_raises Gem :: FilePermissionError do
@cmd . execute
end
ensure
Dir . chdir orig_dir
2011-05-31 23:45:05 -04:00
FileUtils . chmod 0755 , @gemhome
2009-06-09 17:38:59 -04:00
end
end
end
2007-11-10 02:48:56 -05:00
def test_execute_local_missing
2013-11-11 19:16:41 -05:00
spec_fetcher
2007-11-10 02:48:56 -05:00
@cmd . options [ :domain ] = :local
2008-03-31 18:40:06 -04:00
@cmd . options [ :args ] = %w[ no_such_gem ]
2007-11-10 02:48:56 -05:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2008-03-31 18:40:06 -04:00
@cmd . execute
end
assert_equal 2 , e . exit_code
2007-11-10 02:48:56 -05:00
end
# HACK no repository was checked
2010-04-22 04:24:42 -04:00
assert_match ( / ould not find a valid gem 'no_such_gem' / , @ui . error )
2007-11-10 02:48:56 -05:00
end
def test_execute_no_gem
@cmd . options [ :args ] = %w[ ]
2008-10-25 18:58:43 -04:00
assert_raises Gem :: CommandLineError do
2007-11-10 02:48:56 -05:00
@cmd . execute
end
end
def test_execute_nonexistent
2013-11-11 19:16:41 -05:00
spec_fetcher
2007-11-10 02:48:56 -05:00
@cmd . options [ :args ] = %w[ nonexistent ]
use_ui @ui do
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2008-03-31 18:40:06 -04:00
@cmd . execute
end
assert_equal 2 , e . exit_code
2007-11-10 02:48:56 -05:00
end
2010-04-22 04:24:42 -04:00
assert_match ( / ould not find a valid gem 'nonexistent' / , @ui . error )
2007-11-10 02:48:56 -05:00
end
2018-05-30 09:01:35 -04:00
def test_execute_dependency_nonexistent
spec_fetcher do | fetcher |
fetcher . spec 'foo' , 2 , 'bar' = > '0.5'
end
@cmd . options [ :args ] = [ 'foo' ]
use_ui @ui do
e = assert_raises Gem :: MockGemUi :: TermError do
@cmd . execute
end
assert_equal 2 , e . exit_code
end
expected = <<-EXPECTED
ERROR : Could not find a valid gem 'bar' ( = 0 . 5 ) ( required by 'foo' ( > = 0 ) ) in any repository
EXPECTED
assert_equal expected , @ui . error
end
def test_execute_http_proxy
use_ui @ui do
e = assert_raises ArgumentError , @ui . error do
@cmd . handle_options %w[ -p=foo.bar.com ]
end
2018-08-27 06:05:04 -04:00
assert_match " Invalid uri scheme for =foo.bar.com \n Preface URLs with one of [ \" http:// \" , \" https:// \" , \" file:// \" , \" s3:// \" ] " , e . message
2018-05-30 09:01:35 -04:00
end
end
2012-04-17 20:04:12 -04:00
def test_execute_bad_source
2013-11-11 19:16:41 -05:00
spec_fetcher
2012-04-17 20:04:12 -04:00
# This is needed because we need to exercise the cache path
# within SpecFetcher
2013-09-14 04:59:02 -04:00
path = File . join Gem . spec_cache_dir , " not-there.nothing%80 " , " latest_specs.4.8 "
2012-04-17 20:04:12 -04:00
FileUtils . mkdir_p File . dirname ( path )
File . open path , " w " do | f |
f . write Marshal . dump ( [ ] )
end
Gem . sources . replace [ " http://not-there.nothing " ]
@cmd . options [ :args ] = %w[ nonexistent ]
use_ui @ui do
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2012-04-17 20:04:12 -04:00
@cmd . execute
end
assert_equal 2 , e . exit_code
end
errs = @ui . error . split ( " \n " )
assert_match ( / ould not find a valid gem 'nonexistent' / , errs . shift )
2012-11-29 01:52:18 -05:00
assert_match ( %r!Unable to download data from http://not-there.nothing! , errs . shift )
2012-04-17 20:04:12 -04:00
end
2014-09-13 23:30:02 -04:00
def test_execute_nonexistent_hint_disabled
misspelled = " nonexistent_with_hint "
correctly_spelled = " non_existent_with_hint "
spec_fetcher do | fetcher |
fetcher . spec correctly_spelled , 2
end
@cmd . options [ :args ] = [ misspelled ]
@cmd . options [ :suggest_alternate ] = false
use_ui @ui do
e = assert_raises Gem :: MockGemUi :: TermError do
@cmd . execute
end
assert_equal 2 , e . exit_code
end
expected = <<-EXPECTED
ERROR : Could not find a valid gem 'nonexistent_with_hint' ( > = 0 ) in any repository
EXPECTED
assert_equal expected , @ui . error
end
2011-01-18 19:08:49 -05:00
def test_execute_nonexistent_with_hint
misspelled = " nonexistent_with_hint "
correctly_spelled = " non_existent_with_hint "
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . spec correctly_spelled , 2
end
2011-01-18 19:08:49 -05:00
@cmd . options [ :args ] = [ misspelled ]
use_ui @ui do
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2011-01-18 19:08:49 -05:00
@cmd . execute
end
assert_equal 2 , e . exit_code
end
expected = " ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any repository
ERROR : Possible alternatives : non_existent_with_hint
"
assert_equal expected , @ui . error
end
2012-11-29 01:52:18 -05:00
def test_execute_nonexistent_with_dashes
misspelled = " non-existent_with-hint "
correctly_spelled = " nonexistent-with_hint "
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download correctly_spelled , 2
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
@cmd . options [ :args ] = [ misspelled ]
use_ui @ui do
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
assert_equal 2 , e . exit_code
end
2014-09-13 23:30:02 -04:00
expected = [
" ERROR: Could not find a valid gem 'non-existent_with-hint' (>= 0) in any repository " ,
" ERROR: Possible alternatives: nonexistent-with_hint "
]
2012-11-29 01:52:18 -05:00
output = @ui . error . split " \n "
assert_equal expected , output
end
def test_execute_conflicting_install_options
@cmd . options [ :user_install ] = true
@cmd . options [ :install_dir ] = " whatever "
use_ui @ui do
assert_raises Gem :: MockGemUi :: TermError do
@cmd . execute
end
end
expected = " ERROR: Use --install-dir or --user-install but not both \n "
assert_equal expected , @ui . error
end
def test_execute_prerelease_skipped_when_no_flag_set
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , 1
fetcher . gem 'a' , '3.a'
end
2012-11-29 01:52:18 -05:00
@cmd . options [ :prerelease ] = false
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2012-11-29 01:52:18 -05:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
def test_execute_prerelease_wins_over_previous_ver
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'a' , 1
fetcher . download 'a' , '2.a'
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
@cmd . options [ :prerelease ] = true
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2012-11-29 01:52:18 -05:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
assert_equal %w[ a-2.a ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
def test_execute_prerelease_skipped_when_non_pre_available
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , '2.pre'
fetcher . gem 'a' , 2
end
2009-06-09 17:38:59 -04:00
@cmd . options [ :prerelease ] = true
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2009-06-09 17:38:59 -04:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2009-06-09 17:38:59 -04:00
end
2012-11-29 01:52:18 -05:00
def test_execute_rdoc
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2012-11-29 01:52:18 -05:00
Gem . done_installing ( & Gem :: RDoc . method ( :generation_hook ) )
@cmd . options [ :document ] = %w[ rdoc ri ]
@cmd . options [ :domain ] = :local
2013-11-11 19:16:41 -05:00
a2 = specs [ 'a-2' ]
FileUtils . mv a2 . cache_file , @tempdir
2008-06-17 18:04:18 -04:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2012-11-29 01:52:18 -05:00
use_ui @ui do
# Don't use Dir.chdir with a block, it warnings a lot because
# of a downstream Dir.chdir with a block
old = Dir . getwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
ensure
Dir . chdir old
end
end
wait_for_child_process_to_exit
2013-11-11 19:16:41 -05:00
assert_path_exists File . join ( a2 . doc_dir , 'ri' )
2015-04-12 04:36:37 -04:00
assert_path_exists File . join ( a2 . doc_dir , 'rdoc' )
2012-11-29 01:52:18 -05:00
end
2018-05-30 09:01:35 -04:00
def test_execute_rdoc_with_path
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
Gem . done_installing ( & Gem :: RDoc . method ( :generation_hook ) )
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
@cmd . options [ :document ] = %w[ rdoc ri ]
@cmd . options [ :domain ] = :local
@cmd . options [ :install_dir ] = 'whatever'
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
a2 = specs [ 'a-2' ]
FileUtils . mv a2 . cache_file , @tempdir
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
@cmd . options [ :args ] = %w[ a ]
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
use_ui @ui do
# Don't use Dir.chdir with a block, it warnings a lot because
# of a downstream Dir.chdir with a block
old = Dir . getwd
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
begin
Dir . chdir @tempdir
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
ensure
Dir . chdir old
end
end
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
wait_for_child_process_to_exit
2018-08-27 06:05:04 -04:00
2018-05-30 09:01:35 -04:00
assert_path_exists 'whatever/doc/a-2' , 'documentation not installed'
end
2012-11-29 01:52:18 -05:00
def test_execute_saves_build_args
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2012-11-29 01:52:18 -05:00
args = %w!--with-awesome=true --more-awesome=yes!
Gem :: Command . build_args = args
2013-11-11 19:16:41 -05:00
a2 = specs [ 'a-2' ]
FileUtils . mv a2 . cache_file , @tempdir
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :domain ] = :local
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2012-11-29 01:52:18 -05:00
use_ui @ui do
# Don't use Dir.chdir with a block, it warnings a lot because
# of a downstream Dir.chdir with a block
old = Dir . getwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
ensure
Dir . chdir old
end
end
2013-11-11 19:16:41 -05:00
path = a2 . build_info_file
2012-11-29 01:52:18 -05:00
assert_path_exists path
2013-11-11 19:16:41 -05:00
assert_equal args , a2 . build_args
2012-11-29 01:52:18 -05:00
end
def test_execute_remote
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2007-11-10 02:48:56 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2007-11-10 02:48:56 -05:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2008-03-31 18:40:06 -04:00
end
2007-11-10 02:48:56 -05:00
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2007-11-10 02:48:56 -05:00
end
2016-03-03 19:29:40 -05:00
def test_execute_with_invalid_gem_file
FileUtils . touch ( " a.gem " )
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
end
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
assert_match " 1 gem installed " , @ui . output
end
2012-11-29 01:52:18 -05:00
def test_execute_remote_ignores_files
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 1
fetcher . gem 'a' , 2
end
2012-11-29 01:52:18 -05:00
@cmd . options [ :domain ] = :remote
2013-11-11 19:16:41 -05:00
a1 = specs [ 'a-1' ]
a2 = specs [ 'a-2' ]
FileUtils . mv a2 . cache_file , @tempdir
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
@fetcher . data [ " #{ @gem_repo } gems/ #{ a2 . file_name } " ] =
read_binary ( a1 . cache_file )
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = [ a2 . name ]
2012-11-29 01:52:18 -05:00
gemdir = File . join @gemhome , 'specifications'
a2_gemspec = File . join ( gemdir , " a-2.gemspec " )
a1_gemspec = File . join ( gemdir , " a-1.gemspec " )
FileUtils . rm_rf a1_gemspec
FileUtils . rm_rf a2_gemspec
start = Dir [ " #{ gemdir } /* " ]
use_ui @ui do
Dir . chdir @tempdir do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
end
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2012-11-29 01:52:18 -05:00
fin = Dir [ " #{ gemdir } /* " ]
assert_equal [ a1_gemspec ] , fin - start
end
2007-11-10 02:48:56 -05:00
def test_execute_two
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
fetcher . gem 'b' , 2
end
2007-11-10 02:48:56 -05:00
2013-11-11 19:16:41 -05:00
FileUtils . mv specs [ 'a-2' ] . cache_file , @tempdir
FileUtils . mv specs [ 'b-2' ] . cache_file , @tempdir
2007-11-10 02:48:56 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :domain ] = :local
2007-11-10 02:48:56 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a b ]
2007-11-10 02:48:56 -05:00
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
2008-03-31 18:40:06 -04:00
@cmd . execute
end
2007-11-10 02:48:56 -05:00
ensure
Dir . chdir orig_dir
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ a-2 b-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " 2 gems installed " , @ui . output
2007-11-10 02:48:56 -05:00
end
2012-11-29 01:52:18 -05:00
def test_execute_two_version
@cmd . options [ :args ] = %w[ a b ]
@cmd . options [ :version ] = Gem :: Requirement . new ( " > 1 " )
use_ui @ui do
e = assert_raises Gem :: MockGemUi :: TermError do
@cmd . execute
end
assert_equal 1 , e . exit_code
end
assert_empty @cmd . installed_specs
2018-05-30 09:01:35 -04:00
msg = " ERROR: Can't use --version with multiple gems. You can specify multiple gems with " \
" version requirments using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'` "
2012-11-29 01:52:18 -05:00
assert_empty @ui . output
assert_equal msg , @ui . error . chomp
end
2011-01-18 19:08:49 -05:00
def test_execute_conservative
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'b' , 2
2011-01-18 19:08:49 -05:00
2013-11-11 19:16:41 -05:00
fetcher . gem 'a' , 2
end
2011-01-18 19:08:49 -05:00
@cmd . options [ :conservative ] = true
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a b ]
2011-01-18 19:08:49 -05:00
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException do
2011-01-18 19:08:49 -05:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
2012-11-29 01:52:18 -05:00
assert_equal %w[ b-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2011-05-31 23:45:05 -04:00
assert_equal " " , @ui . error
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2011-01-18 19:08:49 -05:00
end
2012-11-29 01:52:18 -05:00
2013-12-21 21:06:02 -05:00
def test_install_gem_ignore_dependencies_both
2014-09-13 23:30:02 -04:00
done_installing = false
Gem . done_installing do
done_installing = true
end
2017-10-07 21:32:18 -04:00
spec = util_spec 'a' , 2
2013-12-21 21:06:02 -05:00
util_build_gem spec
FileUtils . mv spec . cache_file , @tempdir
@cmd . options [ :ignore_dependencies ] = true
@cmd . install_gem 'a' , '>= 0'
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | s | s . full_name }
2014-09-13 23:30:02 -04:00
assert done_installing , 'documentation was not generated'
2013-12-21 21:06:02 -05:00
end
def test_install_gem_ignore_dependencies_remote
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
@cmd . options [ :ignore_dependencies ] = true
@cmd . install_gem 'a' , '>= 0'
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
2014-01-06 20:19:28 -05:00
def test_install_gem_ignore_dependencies_specific_file
2017-10-07 21:32:18 -04:00
spec = util_spec 'a' , 2
2014-01-06 20:19:28 -05:00
util_build_gem spec
FileUtils . mv spec . cache_file , @tempdir
@cmd . options [ :ignore_dependencies ] = true
@cmd . install_gem File . join ( @tempdir , spec . file_name ) , nil
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | s | s . full_name }
end
2012-11-29 01:52:18 -05:00
def test_parses_requirement_from_gemname
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
fetcher . gem 'b' , 2
end
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
@cmd . options [ :domain ] = :local
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
req = " a:10.0 "
2012-11-29 01:52:18 -05:00
@cmd . options [ :args ] = [ req ]
e = nil
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
assert_equal 2 , e . exit_code
assert_match %r!Could not find a valid gem 'a' \(= 10.0\)! , @ui . error
end
def test_show_errors_on_failure
Gem . sources . replace [ " http://not-there.nothing " ]
@cmd . options [ :args ] = [ " blah " ]
e = nil
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2013-10-18 17:56:18 -04:00
e = assert_raises Gem :: MockGemUi :: TermError do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
assert_equal 2 , e . exit_code
2014-09-13 23:30:02 -04:00
assert_match 'Unable to download data' , @ui . error
2012-11-29 01:52:18 -05:00
end
def test_show_source_problems_even_on_success
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'a' , 2
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
Gem . sources << " http://nonexistent.example "
2013-11-11 19:16:41 -05:00
@cmd . options [ :args ] = %w[ a ]
2012-11-29 01:52:18 -05:00
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2012-11-29 01:52:18 -05:00
e = @ui . error
2014-09-13 23:30:02 -04:00
x = " WARNING: Unable to pull data from 'http://nonexistent.example': no data for http://nonexistent.example/specs.4.8.gz (http://nonexistent.example/specs.4.8.gz) \n "
2012-11-29 01:52:18 -05:00
assert_equal x , e
end
def test_execute_uses_from_a_gemdeps
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'a' "
end
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " Using a (2) " , @ui . output
2014-09-13 23:30:02 -04:00
assert File . exist? ( " #{ @gemdeps } .lock " )
end
def test_execute_uses_from_a_gemdeps_with_no_lock
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2
end
File . open @gemdeps , " w " do | f |
f << " gem 'a' "
end
@cmd . handle_options %w[ --no-lock ]
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
end
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
assert_match " Using a (2) " , @ui . output
assert ! File . exist? ( " #{ @gemdeps } .lock " )
end
def test_execute_installs_from_a_gemdeps_with_conservative
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'a' , 2
2014-09-13 23:30:02 -04:00
fetcher . gem 'a' , 1
end
File . open @gemdeps , " w " do | f |
f << " gem 'a' "
end
@cmd . handle_options %w[ --conservative ]
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
end
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
assert_match " Using a (1) " , @ui . output
2012-11-29 01:52:18 -05:00
end
def test_execute_installs_from_a_gemdeps
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'a' , 2
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'a' "
end
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-09-18 17:29:41 -04:00
assert_match " Installing a (2) " , @ui . output
2012-11-29 01:52:18 -05:00
end
def test_execute_installs_deps_a_gemdeps
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'q' , '1.0'
fetcher . download 'r' , '2.0' , 'q' = > nil
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'r' "
end
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
names = @cmd . installed_specs . map { | spec | spec . full_name }
assert_equal %w[ q-1.0 r-2.0 ] , names
2013-09-18 17:29:41 -04:00
assert_match " Installing q (1.0) " , @ui . output
assert_match " Installing r (2.0) " , @ui . output
2012-11-29 01:52:18 -05:00
end
def test_execute_uses_deps_a_gemdeps
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'r' , '2.0' , 'q' = > nil
2012-11-29 01:52:18 -05:00
2013-11-11 19:16:41 -05:00
fetcher . spec 'q' , '1.0'
end
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'r' "
end
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
names = @cmd . installed_specs . map { | spec | spec . full_name }
assert_equal %w[ r-2.0 ] , names
2013-09-18 17:29:41 -04:00
assert_match " Using q (1.0) " , @ui . output
assert_match " Installing r (2.0) " , @ui . output
2012-11-29 01:52:18 -05:00
end
def test_execute_installs_deps_a_gemdeps_into_a_path
2013-11-11 19:16:41 -05:00
spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'q' , '1.0'
fetcher . download 'r' , '2.0' , 'q' = > nil
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'r' "
end
@cmd . options [ :install_dir ] = " gf-path "
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
names = @cmd . installed_specs . map { | spec | spec . full_name }
assert_equal %w[ q-1.0 r-2.0 ] , names
2013-09-18 17:29:41 -04:00
assert_match " Installing q (1.0) " , @ui . output
assert_match " Installing r (2.0) " , @ui . output
2012-11-29 01:52:18 -05:00
assert File . file? ( " gf-path/specifications/q-1.0.gemspec " ) , " not installed "
assert File . file? ( " gf-path/specifications/r-2.0.gemspec " ) , " not installed "
end
def test_execute_with_gemdeps_path_ignores_system
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
2015-07-01 17:50:14 -04:00
fetcher . download 'q' , '1.0'
fetcher . download 'r' , '2.0' , 'q' = > nil
2013-11-11 19:16:41 -05:00
end
2012-11-29 01:52:18 -05:00
2015-07-01 17:50:14 -04:00
install_specs specs [ 'q-1.0' ]
2012-11-29 01:52:18 -05:00
File . open @gemdeps , " w " do | f |
f << " gem 'r' "
end
@cmd . options [ :install_dir ] = " gf-path "
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
names = @cmd . installed_specs . map { | spec | spec . full_name }
assert_equal %w[ q-1.0 r-2.0 ] , names
2013-09-18 17:29:41 -04:00
assert_match " Installing q (1.0) " , @ui . output
assert_match " Installing r (2.0) " , @ui . output
2012-11-29 01:52:18 -05:00
assert File . file? ( " gf-path/specifications/q-1.0.gemspec " ) , " not installed "
assert File . file? ( " gf-path/specifications/r-2.0.gemspec " ) , " not installed "
end
def test_execute_uses_deps_a_gemdeps_with_a_path
2013-11-11 19:16:41 -05:00
specs = spec_fetcher do | fetcher |
fetcher . gem 'q' , '1.0'
fetcher . gem 'r' , '2.0' , 'q' = > nil
end
2012-11-29 01:52:18 -05:00
2015-07-01 17:50:14 -04:00
i = Gem :: Installer . at specs [ 'q-1.0' ] . cache_file , :install_dir = > " gf-path "
2012-11-29 01:52:18 -05:00
i . install
assert File . file? ( " gf-path/specifications/q-1.0.gemspec " ) , " not installed "
File . open @gemdeps , " w " do | f |
f << " gem 'r' "
end
@cmd . options [ :install_dir ] = " gf-path "
@cmd . options [ :gemdeps ] = @gemdeps
use_ui @ui do
2013-10-18 17:56:18 -04:00
assert_raises Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
names = @cmd . installed_specs . map { | spec | spec . full_name }
assert_equal %w[ r-2.0 ] , names
2013-09-18 17:29:41 -04:00
assert_match " Using q (1.0) " , @ui . output
assert_match " Installing r (2.0) " , @ui . output
2012-11-29 01:52:18 -05:00
end
2013-10-15 20:43:14 -04:00
def test_handle_options_file
2013-12-08 18:41:14 -05:00
FileUtils . touch 'Gemfile'
2013-10-15 20:43:14 -04:00
@cmd . handle_options %w[ -g Gemfile ]
assert_equal 'Gemfile' , @cmd . options [ :gemdeps ]
2013-12-08 18:41:14 -05:00
FileUtils . rm 'Gemfile'
FileUtils . touch 'gem.deps.rb'
2013-10-15 20:43:14 -04:00
@cmd . handle_options %w[ --file gem.deps.rb ]
assert_equal 'gem.deps.rb' , @cmd . options [ :gemdeps ]
2013-12-08 18:41:14 -05:00
FileUtils . rm 'gem.deps.rb'
2013-10-15 20:43:14 -04:00
FileUtils . touch 'Isolate'
@cmd . handle_options %w[ -g ]
assert_equal 'Isolate' , @cmd . options [ :gemdeps ]
FileUtils . touch 'Gemfile'
@cmd . handle_options %w[ -g ]
assert_equal 'Gemfile' , @cmd . options [ :gemdeps ]
FileUtils . touch 'gem.deps.rb'
@cmd . handle_options %w[ -g ]
assert_equal 'gem.deps.rb' , @cmd . options [ :gemdeps ]
end
2012-11-29 01:52:18 -05:00
2014-09-13 23:30:02 -04:00
def test_handle_options_suggest
assert @cmd . options [ :suggest_alternate ]
@cmd . handle_options %w[ --no-suggestions ]
refute @cmd . options [ :suggest_alternate ]
@cmd . handle_options %w[ --suggestions ]
assert @cmd . options [ :suggest_alternate ]
end
2013-11-10 12:51:40 -05:00
def test_handle_options_without
@cmd . handle_options %w[ --without test ]
assert_equal [ :test ] , @cmd . options [ :without_groups ]
@cmd . handle_options %w[ --without test,development ]
assert_equal [ :test , :development ] , @cmd . options [ :without_groups ]
end
2007-11-10 02:48:56 -05:00
end