2016-02-01 07:43:26 -05:00
# frozen_string_literal: true
2021-06-01 23:32:47 -04:00
require_relative 'helper'
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04: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 ,
2018-10-21 20:27:02 -04:00
" --no-document " ]
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04: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
2021-05-10 23:25:46 -04:00
assert_raise 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
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
2013-09-18 17:29:41 -04:00
assert_match " 1 gem installed " , @ui . output
2007-11-10 02:48:56 -05:00
end
2019-03-04 22:32:58 -05:00
def test_execute_local_dependency_nonexistent
specs = spec_fetcher do | fetcher |
fetcher . gem 'foo' , 2 , 'bar' = > '0.5'
end
@cmd . options [ :domain ] = :local
FileUtils . mv specs [ 'foo-2' ] . cache_file , @tempdir
@cmd . options [ :args ] = [ 'foo' ]
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir @tempdir
2021-05-10 23:25:46 -04:00
e = assert_raise Gem :: MockGemUi :: TermError do
2019-03-04 22:32:58 -05:00
@cmd . execute
end
assert_equal 2 , e . exit_code
ensure
Dir . chdir orig_dir
end
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_local_dependency_nonexistent_ignore_dependencies
specs = spec_fetcher do | fetcher |
fetcher . gem 'foo' , 2 , 'bar' = > '0.5'
end
@cmd . options [ :domain ] = :local
@cmd . options [ :ignore_dependencies ] = true
FileUtils . mv specs [ 'foo-2' ] . cache_file , @tempdir
@cmd . options [ :args ] = [ 'foo' ]
use_ui @ui do
orig_dir = Dir . pwd
begin
Dir . chdir orig_dir
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2019-03-04 22:32:58 -05:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
assert_match " 1 gem installed " , @ui . output
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 " ]
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2017-10-07 21:32:18 -04:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 b-2.a c-3 ] , @cmd . installed_specs . map { | spec | spec . full_name } . sort
2017-10-07 21:32:18 -04:00
assert_match " 3 gems installed " , @ui . output
end
2012-11-29 01:52:18 -05:00
def test_execute_no_user_install
2021-05-10 23:27:07 -04:00
pend 'skipped on MS Windows (chmod has no effect)' if win_platform?
pend '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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: FilePermissionError do
2009-06-09 17:38:59 -04:00
@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
2021-05-10 23:25:46 -04:00
e = assert_raise 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
2019-03-04 22:32:58 -05:00
def test_execute_local_missing_ignore_dependencies
spec_fetcher
@cmd . options [ :domain ] = :local
@cmd . options [ :ignore_dependencies ] = true
@cmd . options [ :args ] = %w[ no_such_gem ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
e = assert_raise Gem :: MockGemUi :: TermError do
2019-03-04 22:32:58 -05:00
@cmd . execute
end
assert_equal 2 , e . exit_code
end
# HACK no repository was checked
assert_match ( / ould not find a valid gem 'no_such_gem' / , @ui . error )
end
2007-11-10 02:48:56 -05:00
def test_execute_no_gem
@cmd . options [ :args ] = %w[ ]
2021-05-10 23:25:46 -04:00
assert_raise 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
2021-05-10 23:25:46 -04:00
e = assert_raise 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
2022-01-06 08:05:46 -05:00
def test_execute_nonexistent_force
spec_fetcher
@cmd . options [ :args ] = %w[ nonexistent ]
@cmd . options [ :force ] = true
use_ui @ui do
e = assert_raise Gem :: MockGemUi :: TermError do
@cmd . execute
end
assert_equal 2 , e . exit_code
end
assert_match ( / ould not find a valid gem 'nonexistent' / , @ui . error )
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
2021-05-10 23:25:46 -04:00
e = assert_raise Gem :: MockGemUi :: TermError do
2018-05-30 09:01:35 -04:00
@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
2021-05-10 23:25:46 -04:00
e = assert_raise ArgumentError , @ui . error do
2018-05-30 09:01:35 -04:00
@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
2021-05-10 23:25:46 -04:00
e = assert_raise 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 )
2020-03-24 14:51:43 -04: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
2021-05-10 23:25:46 -04:00
e = assert_raise Gem :: MockGemUi :: TermError do
2014-09-13 23:30:02 -04:00
@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
2021-05-10 23:25:46 -04:00
e = assert_raise 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
2021-05-10 23:25:46 -04:00
e = assert_raise 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 " ,
2020-12-08 02:33:39 -05:00
" ERROR: Possible alternatives: nonexistent-with_hint " ,
2014-09-13 23:30:02 -04:00
]
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: TermError do
2012-11-29 01:52:18 -05:00
@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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2.a ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
end
2018-11-27 22:08:14 -05:00
def test_execute_with_version_specified_by_colon
spec_fetcher do | fetcher |
fetcher . download 'a' , 1
fetcher . download 'a' , 2
end
@cmd . options [ :args ] = %w[ a:1 ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2018-11-27 22:08:14 -05:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2018-11-27 22:08:14 -05:00
end
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2009-06-09 17:38:59 -04:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2009-06-09 17:38:59 -04:00
end
2020-12-22 18:45:19 -05:00
def test_execute_required_ruby_version
2022-05-20 04:15:15 -04:00
next_ruby = Gem . ruby_version . segments . map . with_index { | n , i | i == 1 ? n + 1 : n } . join ( " . " )
2020-12-22 18:45:19 -05:00
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . download 'a' , 2
fetcher . download 'a' , 2 do | s |
s . required_ruby_version = " < #{ RUBY_VERSION } .a "
s . platform = local
end
fetcher . download 'a' , 3 do | s |
s . required_ruby_version = " >= #{ next_ruby } "
end
fetcher . download 'a' , 3 do | s |
s . required_ruby_version = " >= #{ next_ruby } "
s . platform = local
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
def test_execute_required_ruby_version_upper_bound
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . gem 'a' , 2 . 0
fetcher . gem 'a' , 2 . 0 do | s |
s . required_ruby_version = " < #{ RUBY_VERSION } .a "
s . platform = local
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
assert_equal %w[ a-2.0 ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
def test_execute_required_ruby_version_specific_not_met
spec_fetcher do | fetcher |
fetcher . gem 'a' , '1.0' do | s |
s . required_ruby_version = '= 1.4.6'
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: TermError do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
errs = @ui . error . split ( " \n " )
assert_equal " ERROR: Error installing a: " , errs . shift
assert_equal " \t a-1.0 requires Ruby version = 1.4.6. The current ruby version is #{ Gem . ruby_version } . " , errs . shift
end
def test_execute_required_ruby_version_specific_prerelease_met
spec_fetcher do | fetcher |
fetcher . gem 'a' , '1.0' do | s |
s . required_ruby_version = '>= 1.4.6.preview2'
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
assert_equal %w[ a-1.0 ] , @cmd . installed_specs . map { | spec | spec . full_name }
end
def test_execute_required_ruby_version_specific_prerelease_not_met
2022-05-20 04:15:15 -04:00
next_ruby_pre = Gem . ruby_version . segments . map . with_index { | n , i | i == 1 ? n + 1 : n } . join ( " . " ) + " .a "
2020-12-22 18:45:19 -05:00
spec_fetcher do | fetcher |
fetcher . gem 'a' , '1.0' do | s |
s . required_ruby_version = " > #{ next_ruby_pre } "
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: TermError do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
errs = @ui . error . split ( " \n " )
assert_equal " ERROR: Error installing a: " , errs . shift
assert_equal " \t a-1.0 requires Ruby version > #{ next_ruby_pre } . The current ruby version is #{ Gem . ruby_version } . " , errs . shift
end
def test_execute_required_rubygems_version_wrong
spec_fetcher do | fetcher |
fetcher . gem 'a' , '1.0' do | s |
s . required_rubygems_version = '< 0'
end
end
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: TermError do
2020-12-22 18:45:19 -05:00
@cmd . execute
end
end
errs = @ui . error . split ( " \n " )
assert_equal " ERROR: Error installing a: " , errs . shift
assert_equal " \t a-1.0 requires RubyGems version < 0. The current RubyGems version is #{ Gem . rubygems_version } . Try 'gem update --system' to update RubyGems itself. " , errs . shift
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
2021-05-10 23:25:46 -04:00
assert_raise 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
2020-05-25 08:05:45 -04:00
assert_path_exist File . join ( a2 . doc_dir , 'ri' )
assert_path_exist 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:06 -04:00
2018-05-30 09:01:35 -04:00
Gem . done_installing ( & Gem :: RDoc . method ( :generation_hook ) )
2018-08-27 06:05:06 -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:06 -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:06 -04:00
2018-05-30 09:01:35 -04:00
@cmd . options [ :args ] = %w[ a ]
2018-08-27 06:05:06 -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:06 -04:00
2018-05-30 09:01:35 -04:00
begin
Dir . chdir @tempdir
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2018-05-30 09:01:35 -04:00
@cmd . execute
end
ensure
Dir . chdir old
end
end
2018-08-27 06:05:06 -04:00
2018-05-30 09:01:35 -04:00
wait_for_child_process_to_exit
2018-08-27 06:05:06 -04:00
2020-05-25 08:05:45 -04:00
assert_path_exist 'whatever/doc/a-2' , 'documentation not installed'
2018-05-30 09:01:35 -04:00
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
2020-03-24 14:51:43 -04:00
args = %w[ --with-awesome=true --more-awesome=yes ]
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise 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
2020-05-25 08:05:45 -04:00
assert_path_exist path
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2008-03-31 18:40:06 -04:00
end
2007-11-10 02:48:56 -05:00
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2016-03-03 19:29:40 -05:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2016-03-03 19:29:40 -05:00
assert_match " 1 gem installed " , @ui . output
end
2021-12-23 19:32:59 -05:00
def test_execute_remote_truncates_existing_gemspecs
spec_fetcher do | fetcher |
fetcher . gem 'a' , 1
end
@cmd . options [ :domain ] = :remote
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
end
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
assert_match " 1 gem installed " , @ui . output
a1_gemspec = File . join ( @gemhome , 'specifications' , " a-1.gemspec " )
initial_a1_gemspec_content = File . read ( a1_gemspec )
modified_a1_gemspec_content = initial_a1_gemspec_content + " \n # AAAAAAA \n "
File . write ( a1_gemspec , modified_a1_gemspec_content )
use_ui @ui do
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
@cmd . execute
end
end
assert_equal initial_a1_gemspec_content , File . read ( a1_gemspec )
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
2019-08-22 11:36:29 -04:00
gemdir = File . join @gemhome , 'specifications'
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2012-11-29 01:52:18 -05:00
@cmd . execute
end
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise 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
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 b-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
e = assert_raise Gem :: MockGemUi :: TermError do
2012-11-29 01:52:18 -05:00
@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 " \
2018-11-27 22:08:14 -05:00
" version requirements 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
2018-11-27 22:08:14 -05:00
def test_execute_two_version_specified_by_colon
spec_fetcher do | fetcher |
fetcher . gem 'a' , 1
fetcher . gem 'a' , 2
fetcher . gem 'b' , 1
fetcher . gem 'b' , 2
end
@cmd . options [ :args ] = %w[ a:1 b:1 ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2018-11-27 22:08:14 -05:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-1 b-1 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2018-11-27 22:08:14 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException do
2011-01-18 19:08:49 -05:00
@cmd . execute
end
ensure
Dir . chdir orig_dir
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ b-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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'
2020-06-10 13:46:05 -04:00
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'
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2013-12-21 21:06:02 -05:00
end
2019-03-04 22:32:58 -05:00
def test_install_gem_ignore_dependencies_remote_platform_local
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . gem 'a' , 3
fetcher . gem 'a' , 3 do | s |
s . platform = local
end
end
@cmd . options [ :ignore_dependencies ] = true
@cmd . install_gem 'a' , '>= 0'
2020-06-10 13:46:05 -04:00
assert_equal %W[ a-3- #{ local } ] , @cmd . installed_specs . map { | spec | spec . full_name }
2019-03-04 22:32:58 -05:00
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
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | s | s . full_name }
2014-01-06 20:19:28 -05:00
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
2021-05-10 23:25:46 -04:00
e = assert_raise 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
2020-03-24 14:51:43 -04:00
assert_match %r{ Could not find a valid gem 'a' \ (= 10.0 \ ) } , @ui . error
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
e = assert_raise 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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-08-21 11:33:21 -04:00
def test_redact_credentials_from_uri_on_warning
spec_fetcher do | fetcher |
fetcher . download 'a' , 2
end
Gem . sources << " http://username:SECURE_TOKEN@nonexistent.example "
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
assert_raise 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
e = @ui . error
x = " WARNING: Unable to pull data from 'http://username:REDACTED@nonexistent.example': no data for http://username:REDACTED@nonexistent.example/specs.4.8.gz (http://username:REDACTED@nonexistent.example/specs.4.8.gz) \n "
assert_equal x , e
end
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2014-09-13 23:30:02 -04:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
2014-09-13 23:30:02 -04:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2014-09-13 23:30:02 -04:00
@cmd . execute
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ ] , @cmd . installed_specs . map { | spec | spec . full_name }
2014-09-13 23:30:02 -04:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
assert_equal %w[ a-2 ] , @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
names = @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
names = @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
names = @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
names = @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2013-10-18 17:56:18 -04:00
@cmd . execute
2012-11-29 01:52:18 -05:00
end
end
2020-06-10 13:46:05 -04:00
names = @cmd . installed_specs . map { | spec | spec . full_name }
2012-11-29 01:52:18 -05:00
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
2019-02-14 07:59:03 -05:00
def test_explain_platform_local
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . spec 'a' , 2
fetcher . spec 'a' , 2 do | s |
s . platform = local
end
end
@cmd . options [ :explain ] = true
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2019-02-14 07:59:03 -05:00
@cmd . execute
end
end
out = @ui . output . split " \n "
assert_equal " Gems to install: " , out . shift
assert_equal " a-2- #{ local } " , out . shift
assert_empty out
end
2019-03-04 22:32:58 -05:00
def test_explain_platform_local_ignore_dependencies
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . spec 'a' , 3
fetcher . spec 'a' , 3 do | s |
s . platform = local
end
end
@cmd . options [ :ignore_dependencies ] = true
@cmd . options [ :explain ] = true
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2019-03-04 22:32:58 -05:00
@cmd . execute
end
end
out = @ui . output . split " \n "
assert_equal " Gems to install: " , out . shift
assert_equal " a-3- #{ local } " , out . shift
assert_empty out
end
2019-02-14 07:59:03 -05:00
def test_explain_platform_ruby
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . spec 'a' , 2
fetcher . spec 'a' , 2 do | s |
s . platform = local
end
end
# equivalent to --platform=ruby
Gem . platforms = [ Gem :: Platform :: RUBY ]
@cmd . options [ :explain ] = true
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2019-02-14 07:59:03 -05:00
@cmd . execute
end
end
out = @ui . output . split " \n "
assert_equal " Gems to install: " , out . shift
assert_equal " a-2 " , out . shift
assert_empty out
end
2019-03-04 22:32:58 -05:00
def test_explain_platform_ruby_ignore_dependencies
local = Gem :: Platform . local
spec_fetcher do | fetcher |
fetcher . spec 'a' , 3
fetcher . spec 'a' , 3 do | s |
s . platform = local
end
end
# equivalent to --platform=ruby
Gem . platforms = [ Gem :: Platform :: RUBY ]
@cmd . options [ :ignore_dependencies ] = true
@cmd . options [ :explain ] = true
@cmd . options [ :args ] = %w[ a ]
use_ui @ui do
2021-05-10 23:25:46 -04:00
assert_raise Gem :: MockGemUi :: SystemExitException , @ui . error do
2019-03-04 22:32:58 -05:00
@cmd . execute
end
end
out = @ui . output . split " \n "
assert_equal " Gems to install: " , out . shift
assert_equal " a-3 " , out . shift
assert_empty out
end
2007-11-10 02:48:56 -05:00
end