From 5307d803f5cce7b14a6afd1d51f6d53ec85ca87d Mon Sep 17 00:00:00 2001 From: drbrain Date: Thu, 21 Nov 2013 23:27:30 +0000 Subject: * lib/rubygems: Update to RubyGems master 50a8210. Important changes in this commit: RubyGems now automatically checks for gem.deps.rb or Gemfile when running ruby executables. This behavior is similar to `bundle exec rake`. This change may be reverted before Ruby 2.1.0 if too many bugs are found. * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem.rb | 54 ++++++++ .../test_gem_impossible_dependencies_error.rb | 12 +- test/rubygems/test_gem_request_set.rb | 4 +- .../test_gem_request_set_gem_dependency_api.rb | 4 +- test/rubygems/test_gem_resolver.rb | 15 ++ test/rubygems/test_gem_resolver_api_set.rb | 151 ++++++++++++++++++++- .../test_gem_resolver_api_specification.rb | 36 +++++ test/rubygems/test_gem_resolver_conflict.rb | 30 +++- test/rubygems/test_gem_resolver_git_set.rb | 20 ++- test/rubygems/test_gem_source_git.rb | 38 +++++- test/rubygems/test_gem_specification.rb | 4 +- test/rubygems/test_gem_util.rb | 4 + 12 files changed, 344 insertions(+), 28 deletions(-) (limited to 'test/rubygems') diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index ec7f7299ec..33d4b25e0d 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -1245,6 +1245,60 @@ class TestGem < Gem::TestCase end end + def test_use_gemdeps + rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], nil + + spec = util_spec 'a', 1 + + refute spec.activated? + + open 'Gemfile', 'w' do |io| + io.write 'gem "a"' + end + + Gem.use_gemdeps + + assert spec.activated? + ensure + ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps + end + + def test_use_gemdeps_disabled + rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '' + + spec = util_spec 'a', 1 + + refute spec.activated? + + open 'Gemfile', 'w' do |io| + io.write 'gem "a"' + end + + Gem.use_gemdeps + + refute spec.activated? + ensure + ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps + end + + def test_use_gemdeps_specific + rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x' + + spec = util_spec 'a', 1 + + refute spec.activated? + + open 'x', 'w' do |io| + io.write 'gem "a"' + end + + Gem.use_gemdeps + + assert spec.activated? + ensure + ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps + end + def with_plugin(path) test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}", @@project_dir) diff --git a/test/rubygems/test_gem_impossible_dependencies_error.rb b/test/rubygems/test_gem_impossible_dependencies_error.rb index f61b86e490..577ee580ec 100644 --- a/test/rubygems/test_gem_impossible_dependencies_error.rb +++ b/test/rubygems/test_gem_impossible_dependencies_error.rb @@ -28,10 +28,14 @@ class TestGemImpossibleDependenciesError < Gem::TestCase expected = <<-EXPECTED rye-0.9.8 requires net-ssh (>= 2.0.13) but it conflicted: - Activated net-ssh-2.6.5 instead of (~> 2.2.2) via: - net-ssh-2.6.5, rye-0.9.8 - Activated net-ssh-2.2.2 instead of (>= 2.6.5) via: - net-ssh-2.2.2, rye-0.9.8 + Activated net-ssh-2.6.5 via: + net-ssh-2.6.5 (>= 2.0.13), rye-0.9.8 (= 0.9.8) + instead of (~> 2.2.2) via: + net-ssh-2.6.5 (>= 2.0.13), rye-0.9.8 (= 0.9.8) + Activated net-ssh-2.2.2 via: + net-ssh-2.2.2 (>= 2.0.13), rye-0.9.8 (= 0.9.8) + instead of (>= 2.6.5) via: + net-ssh-2.2.2 (>= 2.0.13), rye-0.9.8 (= 0.9.8) EXPECTED assert_equal expected, error.message diff --git a/test/rubygems/test_gem_request_set.rb b/test/rubygems/test_gem_request_set.rb index 531b6c09d1..6719be372c 100644 --- a/test/rubygems/test_gem_request_set.rb +++ b/test/rubygems/test_gem_request_set.rb @@ -123,7 +123,7 @@ class TestGemRequestSet < Gem::TestCase assert_equal %w[a-1], names - assert_equal [@DR::IndexSet, @DR::GitSet, @DR::VendorSet], + assert_equal [@DR::BestSet, @DR::GitSet, @DR::VendorSet], rs.sets.map { |set| set.class } end @@ -169,7 +169,7 @@ class TestGemRequestSet < Gem::TestCase assert_equal ["a-1", "b-2"], names - assert_equal [@DR::IndexSet, @DR::GitSet, @DR::VendorSet], + assert_equal [@DR::BestSet, @DR::GitSet, @DR::VendorSet], rs.sets.map { |set| set.class } end diff --git a/test/rubygems/test_gem_request_set_gem_dependency_api.rb b/test/rubygems/test_gem_request_set_gem_dependency_api.rb index 4286a761cb..c41d983744 100644 --- a/test/rubygems/test_gem_request_set_gem_dependency_api.rb +++ b/test/rubygems/test_gem_request_set_gem_dependency_api.rb @@ -272,10 +272,12 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase def test_gem_require @gda.gem 'a', :require => %w[b c] + @gda.gem 'd', :require => 'e' - assert_equal [dep('a')], @set.dependencies + assert_equal [dep('a'), dep('d')], @set.dependencies assert_equal %w[b c], @gda.requires['a'] + assert_equal %w[e], @gda.requires['d'] end def test_gem_require_false diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb index 80769de8cf..91cf84c5fc 100644 --- a/test/rubygems/test_gem_resolver.rb +++ b/test/rubygems/test_gem_resolver.rb @@ -44,6 +44,21 @@ class TestGemResolver < Gem::TestCase assert_equal [index_set, vendor_set], composed.sets end + def test_self_compose_sets_nest + index_set = @DR::IndexSet.new + vendor_set = @DR::VendorSet.new + + inner = @DR.compose_sets index_set, vendor_set + + current_set = @DR::CurrentSet.new + + composed = @DR.compose_sets inner, current_set + + assert_kind_of Gem::Resolver::ComposedSet, composed + + assert_equal [index_set, vendor_set, current_set], composed.sets + end + def test_self_compose_sets_nil index_set = @DR::IndexSet.new diff --git a/test/rubygems/test_gem_resolver_api_set.rb b/test/rubygems/test_gem_resolver_api_set.rb index 976d861cdf..288f496c93 100644 --- a/test/rubygems/test_gem_resolver_api_set.rb +++ b/test/rubygems/test_gem_resolver_api_set.rb @@ -6,20 +6,161 @@ class TestGemResolverAPISet < Gem::TestCase super @DR = Gem::Resolver + @dep_uri = URI "#{@gem_repo}api/v1/dependencies" end def test_initialize set = @DR::APISet.new - assert_equal URI('https://rubygems.org/api/v1/dependencies'), - set.dep_uri + assert_equal URI('https://rubygems.org/api/v1/dependencies'), set.dep_uri + assert_equal URI('https://rubygems.org'), set.uri + assert_equal Gem::Source.new(URI('https://rubygems.org')), set.source end def test_initialize_uri - set = @DR::APISet.new @gem_repo + set = @DR::APISet.new @dep_uri - assert_equal URI('http://gems.example.com/'), - set.dep_uri + assert_equal URI("#{@gem_repo}api/v1/dependencies"), set.dep_uri + assert_equal URI("#{@gem_repo}"), set.uri + end + + def test_find_all + spec_fetcher + + data = [ + { :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], }, + ] + + @fetcher.data["#{@dep_uri}?gems=a"] = Marshal.dump data + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + + expected = [ + @DR::APISpecification.new(set, data.first) + ] + + assert_equal expected, set.find_all(a_dep) + end + + def test_find_all_cache + spec_fetcher + + data = [ + { :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], }, + ] + + @fetcher.data["#{@dep_uri}?gems=a"] = Marshal.dump data + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + + set.prefetch [a_dep] + + @fetcher.data.delete "#{@dep_uri}?gems=a" + + expected = [ + @DR::APISpecification.new(set, data.first) + ] + + assert_equal expected, set.find_all(a_dep) + end + + def test_find_all_missing + spec_fetcher + + @fetcher.data["#{@dep_uri}?gems=a"] = Marshal.dump [] + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + + assert_empty set.find_all(a_dep) + + @fetcher.data.delete "#{@dep_uri}?gems=a" + + assert_empty set.find_all(a_dep) + end + + def test_prefetch + spec_fetcher + + data = [ + { :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], }, + ] + + @fetcher.data["#{@dep_uri}?gems=a,b"] = Marshal.dump data + @fetcher.data["#{@dep_uri}?gems=b"] = Marshal.dump [] + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + b_dep = @DR::DependencyRequest.new dep('b'), nil + + set.prefetch [a_dep, b_dep] + + assert_equal %w[a-1], set.find_all(a_dep).map { |s| s.full_name } + assert_empty set.find_all(b_dep) + end + + def test_prefetch_cache + spec_fetcher + + data = [ + { :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], }, + ] + + @fetcher.data["#{@dep_uri}?gems=a"] = Marshal.dump data + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + b_dep = @DR::DependencyRequest.new dep('b'), nil + + set.prefetch [a_dep] + + @fetcher.data.delete "#{@dep_uri}?gems=a" + @fetcher.data["#{@dep_uri}?gems=b"] = Marshal.dump [] + + set.prefetch [a_dep, b_dep] + end + + def test_prefetch_cache_missing + spec_fetcher + + data = [ + { :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], }, + ] + + @fetcher.data["#{@dep_uri}?gems=a,b"] = Marshal.dump data + + set = @DR::APISet.new @dep_uri + + a_dep = @DR::DependencyRequest.new dep('a'), nil + b_dep = @DR::DependencyRequest.new dep('b'), nil + + set.prefetch [a_dep, b_dep] + + @fetcher.data.delete "#{@dep_uri}?gems=a,b" + + set.prefetch [a_dep, b_dep] end end diff --git a/test/rubygems/test_gem_resolver_api_specification.rb b/test/rubygems/test_gem_resolver_api_specification.rb index e61d30c7c6..4a94135f06 100644 --- a/test/rubygems/test_gem_resolver_api_specification.rb +++ b/test/rubygems/test_gem_resolver_api_specification.rb @@ -28,5 +28,41 @@ class TestGemResolverAPISpecification < Gem::TestCase assert_equal expected, spec.dependencies end + def test_source + set = Gem::Resolver::APISet.new + data = { + :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], + } + + api_spec = Gem::Resolver::APISpecification.new set, data + + assert_equal set.source, api_spec.source + end + + def test_spec + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + end + + dep_uri = URI(@gem_repo) + 'api/v1/dependencies' + set = Gem::Resolver::APISet.new dep_uri + data = { + :name => 'a', + :number => '1', + :platform => 'ruby', + :dependencies => [], + } + + api_spec = Gem::Resolver::APISpecification.new set, data + + spec = api_spec.spec + + assert_kind_of Gem::Specification, spec + assert_equal 'a-1', spec.full_name + end + end diff --git a/test/rubygems/test_gem_resolver_conflict.rb b/test/rubygems/test_gem_resolver_conflict.rb index 3ae2a7cf5f..f8bba3f16f 100644 --- a/test/rubygems/test_gem_resolver_conflict.rb +++ b/test/rubygems/test_gem_resolver_conflict.rb @@ -12,12 +12,20 @@ class TestGemResolverConflict < Gem::TestCase child = dependency_request dep('net-ssh', '>= 2.6.5'), 'net-ssh', '2.2.2', root + dep = Gem::Resolver::DependencyRequest.new dep('net-ssh', '>= 2.0.13'), nil + + spec = quick_spec 'net-ssh', '2.2.2' + active = + Gem::Resolver::ActivationRequest.new spec, dep + conflict = - Gem::Resolver::Conflict.new child, child.requester + Gem::Resolver::Conflict.new child, active expected = <<-EXPECTED - Activated net-ssh-2.2.2 instead of (>= 2.6.5) via: - net-ssh-2.2.2, rye-0.9.8 + Activated net-ssh-2.2.2 via: + net-ssh-2.2.2 (>= 2.0.13) + instead of (>= 2.6.5) via: + net-ssh-2.2.2 (>= 2.0.13), rye-0.9.8 (= 0.9.8) EXPECTED assert_equal expected, conflict.explanation @@ -36,7 +44,9 @@ class TestGemResolverConflict < Gem::TestCase conflict = @DR::Conflict.new a1_req, activated expected = <<-EXPECTED - Activated a-2 instead of (= 1) via: + Activated a-2 via: + a-2 (= 2) + instead of (= 1) via: user request (gem command or Gemfile) EXPECTED @@ -46,13 +56,19 @@ class TestGemResolverConflict < Gem::TestCase def test_request_path root = dependency_request dep('net-ssh', '>= 2.0.13'), 'rye', '0.9.8' + child = - dependency_request dep('net-ssh', '>= 2.6.5'), 'net-ssh', '2.2.2', root + dependency_request dep('other', '>= 1.0'), 'net-ssh', '2.2.2', root conflict = - Gem::Resolver::Conflict.new child, nil + Gem::Resolver::Conflict.new nil, nil + + expected = [ + 'net-ssh-2.2.2 (>= 2.0.13)', + 'rye-0.9.8 (= 0.9.8)' + ] - assert_equal %w[net-ssh-2.2.2 rye-0.9.8], conflict.request_path + assert_equal expected, conflict.request_path(child.requester) end end diff --git a/test/rubygems/test_gem_resolver_git_set.rb b/test/rubygems/test_gem_resolver_git_set.rb index 6943df9ec8..1ca12a7251 100644 --- a/test/rubygems/test_gem_resolver_git_set.rb +++ b/test/rubygems/test_gem_resolver_git_set.rb @@ -66,6 +66,24 @@ class TestGemResolverGitSet < Gem::TestCase refute_empty @set.specs end + def test_prefetch_cache + name, _, repository, = git_gem + + @set.add_git_gem name, repository, 'master', false + + dependency = dep name + req = Gem::Resolver::ActivationRequest.new dependency, nil + @reqs.add req + + @set.prefetch @reqs + + spec = @set.specs[name] + + @set.prefetch @reqs + + assert_same spec, @set.specs[name] + end + def test_prefetch_filter name, _, repository, = git_gem @@ -77,7 +95,7 @@ class TestGemResolverGitSet < Gem::TestCase @set.prefetch @reqs - assert_empty @set.specs + refute_empty @set.specs, 'the git source does not filter' end end diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb index f1c5eb9b71..9cdcbc0ed5 100644 --- a/test/rubygems/test_gem_source_git.rb +++ b/test/rubygems/test_gem_source_git.rb @@ -78,12 +78,6 @@ class TestGemSourceGit < Gem::TestCase refute_equal @source, source end - def test_load_spec - spec = @source.load_spec @name - - assert_equal "#{@name}-#{@version}", spec.full_name - end - def test_install_dir @source.cache @@ -133,6 +127,38 @@ class TestGemSourceGit < Gem::TestCase assert_equal(-1, git. <=>(installed), 'git <=> installed') end + def test_specs + source = Gem::Source::Git.new @name, @repository, 'master', true + + Dir.chdir 'git/a' do + FileUtils.mkdir 'b' + + Dir.chdir 'b' do + b = Gem::Specification.new 'b', 1 + + open 'b.gemspec', 'w' do |io| + io.write b.to_ruby + end + + system @git, 'add', 'b.gemspec' + system @git, 'commit', '--quiet', '-m', 'add b/b.gemspec' + end + + FileUtils.touch 'c.gemspec' + + system @git, 'add', 'c.gemspec' + system @git, 'commit', '--quiet', '-m', 'add c.gemspec' + end + + specs = nil + + capture_io do + specs = source.specs + end + + assert_equal %w[a-1 b-1], specs.map { |spec| spec.full_name } + end + def test_uri_hash assert_equal @hash, @source.uri_hash diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 3924191db9..d08e77faff 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -2447,8 +2447,8 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use: end assert_match <<-warning, @ui.error -WARNING: licenses is empty. Use a license abbreviation from: - http://opensource.org/licenses/alphabetical +WARNING: licenses is empty, but is recommended. Use a license abbreviation from: +http://opensource.org/licenses/alphabetical warning end diff --git a/test/rubygems/test_gem_util.rb b/test/rubygems/test_gem_util.rb index bf67b14d38..17a19dd302 100644 --- a/test/rubygems/test_gem_util.rb +++ b/test/rubygems/test_gem_util.rb @@ -5,6 +5,10 @@ class TestGemUtil < Gem::TestCase def test_class_popen assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-e', 'p 0') + + assert_raises Errno::ECHILD do + Process.wait -1 + end end end -- cgit v1.2.3