summaryrefslogtreecommitdiff
path: root/test/rubygems
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-28 00:57:53 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-28 00:57:53 +0000
commit69934aeb8d7948c4ca590b7092504c41d8bce6ac (patch)
tree7ea2cdc73f64c5fd001a4e626613ba435a425c0c /test/rubygems
parentcc00f5bf36a2053e561d968a7e667ff31a9d72d7 (diff)
rubygems 2.6.7
* lib/rubygems.rb, lib/rubygems/*, test/rubygems/*: Update rubygems to 2.6.7. Release note of 2.6.7: https://github.com/rubygems/rubygems/commit/60f35bd1d2359fc30301d2d4cd72bc6833e8d12a git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_gem.rb90
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb19
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb15
-rw-r--r--test/rubygems/test_gem_config_file.rb3
-rw-r--r--test/rubygems/test_gem_installer.rb33
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb18
-rw-r--r--test/rubygems/test_gem_resolver.rb26
-rw-r--r--test/rubygems/test_gem_source.rb9
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb20
-rw-r--r--test/rubygems/test_gem_version.rb13
10 files changed, 229 insertions, 17 deletions
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index 90695b56d7..b9c0337c0a 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -157,6 +157,35 @@ class TestGem < Gem::TestCase
assert_match 'a-2/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
end
+ def test_activate_bin_path_resolves_eagerly
+ a1 = util_spec 'a', '1' do |s|
+ s.executables = ['exec']
+ s.add_dependency 'b'
+ end
+
+ b1 = util_spec 'b', '1' do |s|
+ s.add_dependency 'c', '2'
+ end
+
+ b2 = util_spec 'b', '2' do |s|
+ s.add_dependency 'c', '1'
+ end
+
+ c1 = util_spec 'c', '1'
+ c2 = util_spec 'c', '2'
+
+ install_specs c1, c2, b1, b2, a1
+
+ Gem.activate_bin_path("a", "exec", ">= 0")
+
+ # If we didn't eagerly resolve, this would activate c-2 and then the
+ # finish_resolve would cause a conflict
+ gem 'c'
+ Gem.finish_resolve
+
+ assert_equal %w(a-1 b-2 c-1), loaded_spec_names
+ end
+
def test_self_bin_path_no_exec_name
e = assert_raises ArgumentError do
Gem.bin_path 'a'
@@ -345,7 +374,7 @@ class TestGem < Gem::TestCase
begin
Dir.chdir 'detect/a/b'
- assert_empty Gem.detect_gemdeps
+ assert_equal [BUNDLER_FULL_NAME], Gem.detect_gemdeps.map(&:full_name)
ensure
Dir.chdir @tempdir
end
@@ -961,6 +990,9 @@ class TestGem < Gem::TestCase
def test_self_sources
assert_equal %w[http://gems.example.com/], Gem.sources
+ Gem.sources = nil
+ Gem.configuration.sources = %w[http://test.example.com/]
+ assert_equal %w[http://test.example.com/], Gem.sources
end
def test_try_activate_returns_true_for_activated_specs
@@ -1394,7 +1426,7 @@ class TestGem < Gem::TestCase
Gem.detect_gemdeps
- assert_equal %w!a-1 b-1 c-1!, loaded_spec_names
+ assert_equal %W(a-1 b-1 #{BUNDLER_FULL_NAME} c-1), loaded_spec_names
end
def test_auto_activation_of_detected_gemdeps_file
@@ -1417,10 +1449,40 @@ class TestGem < Gem::TestCase
ENV['RUBYGEMS_GEMDEPS'] = "-"
- assert_equal [a,b,c], Gem.detect_gemdeps.sort_by { |s| s.name }
+ assert_equal [a, b, util_spec("bundler", Bundler::VERSION), c], Gem.detect_gemdeps.sort_by { |s| s.name }
end
LIB_PATH = File.expand_path "../../../lib".dup.untaint, __FILE__.dup.untaint
+ BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }.dup.untaint
+ BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}"
+
+ def test_use_gemdeps_uses_bundler_postit_trampoline
+ refute_includes $LOADED_FEATURES, File.join(BUNDLER_LIB_PATH, "bundler/postit_trampoline.rb".dup.untaint)
+ ENV.delete("BUNDLE_DISABLE_POSTIT")
+
+ a = new_spec "a", "1", nil, "lib/a.rb"
+ b = new_spec "b", "1", nil, "lib/b.rb"
+ c = new_spec "c", "1", nil, "lib/c.rb"
+
+ install_specs a, b, c
+
+ path = File.join @tempdir, "gem.deps.rb"
+
+ File.open path, "w" do |f|
+ f.puts "gem 'a'"
+ f.puts "gem 'b'"
+ f.puts "gem 'c'"
+ end
+
+ ENV['RUBYGEMS_GEMDEPS'] = path
+
+ Gem.detect_gemdeps
+
+ assert_equal %W(a-1 b-1 #{BUNDLER_FULL_NAME} c-1), loaded_spec_names
+
+ trampoline_path = RUBY_VERSION > "1.9" ? File.join(BUNDLER_LIB_PATH, "bundler/postit_trampoline.rb".dup.untaint) : "bundler/postit_trampoline.rb"
+ assert_includes $LOADED_FEATURES, trampoline_path
+ end
def test_looks_for_gemdeps_files_automatically_on_start
util_clear_gems
@@ -1447,9 +1509,9 @@ class TestGem < Gem::TestCase
ENV['GEM_PATH'] = path
ENV['RUBYGEMS_GEMDEPS'] = "-"
- out = `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
+ out = `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -I "#{BUNDLER_LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
- assert_equal '["a-1", "b-1", "c-1"]', out.strip
+ assert_equal %W(a-1 b-1 #{BUNDLER_FULL_NAME} c-1).inspect, out.strip
end
def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
@@ -1479,12 +1541,12 @@ class TestGem < Gem::TestCase
Dir.mkdir "sub1"
out = Dir.chdir "sub1" do
- `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
+ `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -I "#{BUNDLER_LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
end
Dir.rmdir "sub1"
- assert_equal '["a-1", "b-1", "c-1"]', out.strip
+ assert_equal %W(a-1 b-1 #{BUNDLER_FULL_NAME} c-1).inspect, out.strip
end
def test_register_default_spec
@@ -1558,7 +1620,7 @@ class TestGem < Gem::TestCase
Gem.use_gemdeps gem_deps_file
- assert spec.activated?
+ assert_equal %W(a-1 #{BUNDLER_FULL_NAME}), loaded_spec_names
refute_nil Gem.gemdeps
end
@@ -1619,7 +1681,7 @@ class TestGem < Gem::TestCase
Gem.use_gemdeps
- assert spec.activated?
+ assert_equal %W(a-1 #{BUNDLER_FULL_NAME}), loaded_spec_names
ensure
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
end
@@ -1661,8 +1723,14 @@ class TestGem < Gem::TestCase
io.write 'gem "a"'
end
+ platform = Bundler::GemHelpers.generic_local_platform
+ if platform == Gem::Platform::RUBY
+ platform = ''
+ else
+ platform = " #{platform}"
+ end
expected = <<-EXPECTED
-Unable to resolve dependency: user requested 'a (>= 0)'
+Could not find gem 'a#{platform}' in any of the gem sources listed in your Gemfile or available on this machine.
You may need to `gem install -g` to install missing gems
EXPECTED
@@ -1690,7 +1758,7 @@ You may need to `gem install -g` to install missing gems
Gem.use_gemdeps
- assert spec.activated?
+ assert_equal %W(a-1 #{BUNDLER_FULL_NAME}), loaded_spec_names
ensure
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
end
diff --git a/test/rubygems/test_gem_commands_query_command.rb b/test/rubygems/test_gem_commands_query_command.rb
index 223f205b2d..329490bb71 100644
--- a/test/rubygems/test_gem_commands_query_command.rb
+++ b/test/rubygems/test_gem_commands_query_command.rb
@@ -557,6 +557,25 @@ EOF
assert_equal expected, @ui.output
end
+ def test_execute_show_default_gems_with_platform
+ a1 = new_default_spec 'a', 1
+ a1.platform = 'java'
+ install_default_specs a1
+
+ use_ui @ui do
+ @cmd.execute
+ end
+
+ expected = <<-EOF
+
+*** LOCAL GEMS ***
+
+a (default: 1 java)
+EOF
+
+ assert_equal expected, @ui.output
+ end
+
def test_execute_default_details
spec_fetcher do |fetcher|
fetcher.spec 'a', 2
diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb
index ae3d0500dc..99944cf53e 100644
--- a/test/rubygems/test_gem_commands_setup_command.rb
+++ b/test/rubygems/test_gem_commands_setup_command.rb
@@ -20,6 +20,13 @@ class TestGemCommandsSetupCommand < Gem::TestCase
open 'lib/rubygems.rb', 'w' do |io| io.puts '# rubygems.rb' end
open 'lib/rubygems/test_case.rb', 'w' do |io| io.puts '# test_case.rb' end
open 'lib/rubygems/ssl_certs/rubygems.org/foo.pem', 'w' do |io| io.puts 'PEM' end
+
+ FileUtils.mkdir_p 'bundler/exe'
+ FileUtils.mkdir_p 'bundler/lib/bundler'
+
+ open 'bundler/exe/bundle', 'w' do |io| io.puts '# bundle' end
+ open 'bundler/lib/bundler.rb', 'w' do |io| io.puts '# bundler.rb' end
+ open 'bundler/lib/bundler/b.rb', 'w' do |io| io.puts '# b.rb' end
end
def test_pem_files_in
@@ -40,12 +47,16 @@ class TestGemCommandsSetupCommand < Gem::TestCase
assert_path_exists File.join(dir, 'rubygems.rb')
assert_path_exists File.join(dir, 'rubygems/ssl_certs/rubygems.org/foo.pem')
+
+ assert_path_exists File.join(dir, 'bundler.rb')
+ assert_path_exists File.join(dir, 'bundler/b.rb')
end
end
def test_remove_old_lib_files
lib = File.join @install_dir, 'lib'
lib_rubygems = File.join lib, 'rubygems'
+ lib_bundler = File.join lib, 'bundler'
lib_rubygems_defaults = File.join lib_rubygems, 'defaults'
securerandom_rb = File.join lib, 'securerandom.rb'
@@ -55,13 +66,16 @@ class TestGemCommandsSetupCommand < Gem::TestCase
old_builder_rb = File.join lib_rubygems, 'builder.rb'
old_format_rb = File.join lib_rubygems, 'format.rb'
+ old_bundler_c_rb = File.join lib_bundler, 'c.rb'
FileUtils.mkdir_p lib_rubygems_defaults
+ FileUtils.mkdir_p lib_bundler
open securerandom_rb, 'w' do |io| io.puts '# securerandom.rb' end
open old_builder_rb, 'w' do |io| io.puts '# builder.rb' end
open old_format_rb, 'w' do |io| io.puts '# format.rb' end
+ open old_bundler_c_rb, 'w' do |io| io.puts '# c.rb' end
open engine_defaults_rb, 'w' do |io| io.puts '# jruby.rb' end
open os_defaults_rb, 'w' do |io| io.puts '# operating_system.rb' end
@@ -70,6 +84,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
refute_path_exists old_builder_rb
refute_path_exists old_format_rb
+ refute_path_exists old_bundler_c_rb
assert_path_exists securerandom_rb
assert_path_exists engine_defaults_rb
diff --git a/test/rubygems/test_gem_config_file.rb b/test/rubygems/test_gem_config_file.rb
index 9b5f0b96f8..e09a76ef98 100644
--- a/test/rubygems/test_gem_config_file.rb
+++ b/test/rubygems/test_gem_config_file.rb
@@ -61,12 +61,11 @@ class TestGemConfigFile < Gem::TestCase
end
util_config_file
-
assert_equal true, @cfg.backtrace
assert_equal 10, @cfg.bulk_threshold
assert_equal false, @cfg.verbose
assert_equal false, @cfg.update_sources
- assert_equal %w[http://more-gems.example.com], Gem.sources
+ assert_equal %w[http://more-gems.example.com], @cfg.sources
assert_equal '--wrappers', @cfg[:install]
assert_equal(['/usr/ruby/1.8/lib/ruby/gems/1.8', '/var/ruby/1.8/gem_home'],
@cfg.path)
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index 2d747bed72..9083cbe661 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -1141,6 +1141,35 @@ gem 'other', version
refute_path_exists should_be_removed
end
+ def test_install_user_extension_dir
+ @spec.extensions << "extconf.rb"
+ write_file File.join(@tempdir, "extconf.rb") do |io|
+ io.write <<-RUBY
+ require "mkmf"
+ create_makefile("#{@spec.name}")
+ RUBY
+ end
+
+ @spec.files += %w[extconf.rb]
+
+ # Create the non-user ext dir
+ expected_extension_dir = @spec.extension_dir.dup
+ FileUtils.mkdir_p expected_extension_dir
+
+ use_ui @ui do
+ path = Gem::Package.build @spec
+
+ installer = Gem::Installer.at path, :user_install => true
+ installer.install
+ end
+
+ expected_makefile = File.join Gem.user_dir, 'gems', @spec.full_name, 'Makefile'
+
+ assert_path_exists expected_makefile
+ assert_path_exists expected_extension_dir
+ refute_path_exists File.join expected_extension_dir, 'gem_make.out'
+ end
+
# ruby core repository needs to `depend` file for extension build.
# but 1.9.2 and earlier mkmf.rb does not create TOUCH file like depend.
if RUBY_VERSION < '1.9.3'
@@ -1387,7 +1416,7 @@ gem 'other', version
def test_pre_install_checks_ruby_version
use_ui @ui do
installer = Gem::Installer.at old_ruby_required
- e = assert_raises Gem::InstallError do
+ e = assert_raises Gem::RuntimeRequirementNotMetError do
installer.pre_install_checks
end
assert_equal 'old_ruby_required requires Ruby version = 1.4.6.',
@@ -1406,7 +1435,7 @@ gem 'other', version
use_ui @ui do
@installer = Gem::Installer.at gem
- e = assert_raises Gem::InstallError do
+ e = assert_raises Gem::RuntimeRequirementNotMetError do
@installer.pre_install_checks
end
assert_equal 'old_rubygems_required requires RubyGems version < 0. ' +
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index cf1b27d547..ca62a8342e 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -687,6 +687,23 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
assert_equal "too many redirects (#{url})", e.message
end
+ def test_fetch_http_redirects_without_location
+ fetcher = Gem::RemoteFetcher.new nil
+ @fetcher = fetcher
+ url = 'http://gems.example.com/redirect'
+
+ def fetcher.request(uri, request_class, last_modified = nil)
+ res = Net::HTTPMovedPermanently.new nil, 301, nil
+ res
+ end
+
+ e = assert_raises Gem::RemoteFetcher::FetchError do
+ fetcher.fetch_http URI.parse(url)
+ end
+
+ assert_equal "redirecting but no redirect location was given (#{url})", e.message
+ end
+
def test_fetch_http_with_additional_headers
ENV["http_proxy"] = @proxy_uri
ENV["no_proxy"] = URI::parse(@server_uri).host
@@ -1036,4 +1053,3 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
end
end
-
diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb
index cf457db198..f2469ac70f 100644
--- a/test/rubygems/test_gem_resolver.rb
+++ b/test/rubygems/test_gem_resolver.rb
@@ -683,6 +683,32 @@ class TestGemResolver < Gem::TestCase
assert_resolves_to [b1, c1, d2], r
end
+ def test_sorts_by_source_then_version
+ sourceA = Gem::Source.new 'http://example.com/a'
+ sourceB = Gem::Source.new 'http://example.com/b'
+ sourceC = Gem::Source.new 'http://example.com/c'
+
+ spec_A_1 = new_spec 'some-dep', '0.0.1'
+ spec_A_2 = new_spec 'some-dep', '1.0.0'
+ spec_B_1 = new_spec 'some-dep', '0.0.1'
+ spec_B_2 = new_spec 'some-dep', '0.0.2'
+ spec_C_1 = new_spec 'some-dep', '0.1.0'
+
+ set = StaticSet.new [
+ Gem::Resolver::SpecSpecification.new(nil, spec_B_1, sourceB),
+ Gem::Resolver::SpecSpecification.new(nil, spec_B_2, sourceB),
+ Gem::Resolver::SpecSpecification.new(nil, spec_C_1, sourceC),
+ Gem::Resolver::SpecSpecification.new(nil, spec_A_2, sourceA),
+ Gem::Resolver::SpecSpecification.new(nil, spec_A_1, sourceA),
+ ]
+
+ dependency = make_dep 'some-dep', '> 0'
+
+ resolver = Gem::Resolver.new [dependency], set
+
+ assert_resolves_to [spec_B_2], resolver
+ end
+
def test_select_local_platforms
r = Gem::Resolver.new nil, nil
diff --git a/test/rubygems/test_gem_source.rb b/test/rubygems/test_gem_source.rb
index 64dfa42468..4a93e222f8 100644
--- a/test/rubygems/test_gem_source.rb
+++ b/test/rubygems/test_gem_source.rb
@@ -228,6 +228,15 @@ class TestGemSource < Gem::TestCase
assert_equal(-1, remote. <=>(no_uri), 'remote <=> no_uri')
end
+ def test_spaceship_order_is_preserved_when_uri_differs
+ sourceA = Gem::Source.new "http://example.com/a"
+ sourceB = Gem::Source.new "http://example.com/b"
+
+ assert_equal( 0, sourceA. <=>(sourceA), 'sourceA <=> sourceA')
+ assert_equal( 1, sourceA. <=>(sourceB), 'sourceA <=> sourceB')
+ assert_equal( 1, sourceB. <=>(sourceA), 'sourceB <=> sourceA')
+ end
+
def test_update_cache_eh
assert @source.update_cache?
end
diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb
index 53bb31a910..558869fe99 100644
--- a/test/rubygems/test_gem_spec_fetcher.rb
+++ b/test/rubygems/test_gem_spec_fetcher.rb
@@ -169,6 +169,26 @@ class TestGemSpecFetcher < Gem::TestCase
assert_equal "bad news from the internet (#{@gem_repo})", sfp.error.message
end
+ def test_suggest_gems_from_name_latest
+ spec_fetcher do|fetcher|
+ fetcher.spec 'example', 1
+ fetcher.spec 'other-example', 1
+ end
+
+ suggestions = @sf.suggest_gems_from_name('examplw')
+ assert_equal ['example'], suggestions
+ end
+
+ def test_suggest_gems_from_name_prerelease
+ spec_fetcher do|fetcher|
+ fetcher.spec 'example', '1.a'
+ fetcher.spec 'other-example', 1
+ end
+
+ suggestions = @sf.suggest_gems_from_name('examplw')
+ assert_equal ['example'], suggestions
+ end
+
def test_available_specs_latest
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
diff --git a/test/rubygems/test_gem_version.rb b/test/rubygems/test_gem_version.rb
index 9898669ce6..46453cd9e9 100644
--- a/test/rubygems/test_gem_version.rb
+++ b/test/rubygems/test_gem_version.rb
@@ -65,7 +65,8 @@ class TestGemVersion < Gem::TestCase
def test_hash
assert_equal v("1.2").hash, v("1.2").hash
refute_equal v("1.2").hash, v("1.3").hash
- refute_equal v("1.2").hash, v("1.2.0").hash
+ assert_equal v("1.2").hash, v("1.2.0").hash
+ assert_equal v("1.2.pre.1").hash, v("1.2.0.pre.1.0").hash
end
def test_initialize
@@ -99,6 +100,9 @@ class TestGemVersion < Gem::TestCase
assert_prerelease '1.A'
+ assert_prerelease '1-1'
+ assert_prerelease '1-a'
+
refute_prerelease "1.2.0"
refute_prerelease "2.9"
refute_prerelease "22.1.50.0"
@@ -154,6 +158,12 @@ class TestGemVersion < Gem::TestCase
assert_equal [9,8,7], v("9.8.7").segments
end
+ def test_canonical_segments
+ assert_equal [1], v("1.0.0").canonical_segments
+ assert_equal [1, "a", 1], v("1.0.0.a.1.0").canonical_segments
+ assert_equal [1, 2, 3, "pre", 1], v("1.2.3-1").canonical_segments
+ end
+
# Asserts that +version+ is a prerelease.
def assert_prerelease version
@@ -183,6 +193,7 @@ class TestGemVersion < Gem::TestCase
def assert_version_equal expected, actual
assert_equal v(expected), v(actual)
+ assert_equal v(expected).hash, v(actual).hash, "since #{actual} == #{expected}, they must have the same hash"
end
# Assert that two versions are eql?. Checks both directions.