From 7ed9b794b4e3f3f9874f2ce19401461596d8a2c0 Mon Sep 17 00:00:00 2001 From: drbrain Date: Sun, 8 Dec 2013 01:22:39 +0000 Subject: * lib/rubygems: Update to RubyGems master 14749ce. This fixes bugs handling of gem dependencies lockfiles (Gemfile.lock). * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem_request_set.rb | 10 +- .../test_gem_request_set_gem_dependency_api.rb | 21 + test/rubygems/test_gem_request_set_lockfile.rb | 429 ++++++++++++++++++++- test/rubygems/test_gem_requirement.rb | 7 + test/rubygems/test_gem_resolver.rb | 23 +- test/rubygems/test_gem_resolver_git_set.rb | 28 +- .../test_gem_resolver_git_specification.rb | 16 + test/rubygems/test_gem_resolver_lock_set.rb | 4 +- .../test_gem_resolver_lock_specification.rb | 87 +++++ .../rubygems/test_gem_resolver_requirement_list.rb | 7 +- test/rubygems/test_gem_source_lock.rb | 7 + 11 files changed, 601 insertions(+), 38 deletions(-) create mode 100644 test/rubygems/test_gem_resolver_lock_specification.rb (limited to 'test/rubygems') diff --git a/test/rubygems/test_gem_request_set.rb b/test/rubygems/test_gem_request_set.rb index 324d0cd7a8..aaff97ab4f 100644 --- a/test/rubygems/test_gem_request_set.rb +++ b/test/rubygems/test_gem_request_set.rb @@ -95,6 +95,7 @@ class TestGemRequestSet < Gem::TestCase fetcher.gem 'a', 1 fetcher.gem 'a', 2 fetcher.gem 'b', 1, 'a' => '>= 0' + fetcher.clear end rs = Gem::RequestSet.new @@ -107,7 +108,7 @@ GEM specs: a (1) b (1) - a + a (~> 1.0) PLATFORMS #{Gem::Platform::RUBY} @@ -127,6 +128,9 @@ DEPENDENCIES assert_includes installed, 'b-1' assert_includes installed, 'a-1' + + assert_path_exists File.join @gemhome, 'specifications', 'a-1.gemspec' + assert_path_exists File.join @gemhome, 'specifications', 'b-1.gemspec' end def test_load_gemdeps @@ -301,7 +305,9 @@ DEPENDENCIES rs.resolve - installed = rs.install_into @tempdir + installed = rs.install_into @tempdir do + assert_equal @tempdir, ENV['GEM_HOME'] + end assert_path_exists File.join @tempdir, 'specifications', 'a-1.gemspec' assert_path_exists File.join @tempdir, 'specifications', 'b-1.gemspec' 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 c41d983744..cadaf76883 100644 --- a/test/rubygems/test_gem_request_set_gem_dependency_api.rb +++ b/test/rubygems/test_gem_request_set_gem_dependency_api.rb @@ -514,6 +514,27 @@ end assert_same @GDA, Gem::RequestSet::GemDepedencyAPI end + def test_pin_gem_source + gda = @GDA.new @set, nil + + gda.send :pin_gem_source, 'a' + gda.send :pin_gem_source, 'a' + + e = assert_raises ArgumentError do + gda.send :pin_gem_source, 'a', :path, 'vendor/a' + end + + assert_equal "duplicate source path: vendor/a for gem a", + e.message + + e = assert_raises ArgumentError do + gda.send :pin_gem_source, 'a', :git, 'git://example/repo.git' + end + + assert_equal "duplicate source git: git://example/repo.git for gem a", + e.message + end + def test_platform_mswin win_platform, Gem.win_platform = Gem.win_platform?, false diff --git a/test/rubygems/test_gem_request_set_lockfile.rb b/test/rubygems/test_gem_request_set_lockfile.rb index 18c44144fa..6c933d4ba1 100644 --- a/test/rubygems/test_gem_request_set_lockfile.rb +++ b/test/rubygems/test_gem_request_set_lockfile.rb @@ -13,8 +13,10 @@ class TestGemRequestSetLockfile < Gem::TestCase @set = Gem::RequestSet.new + @git_set = Gem::Resolver::GitSet.new @vendor_set = Gem::Resolver::VendorSet.new + @set.instance_variable_set :@git_set, @git_set @set.instance_variable_set :@vendor_set, @vendor_set @gem_deps_file = 'gem.deps.rb' @@ -49,15 +51,22 @@ class TestGemRequestSetLockfile < Gem::TestCase @lockfile.get :text end - expected = 'unexpected token [:section, "x"], expected :text (at 5:1)' + expected = + 'unexpected token [:section, "x"], expected :text (at line 1 column 5)' assert_equal expected, e.message - assert_equal 5, e.line - assert_equal 1, e.column + assert_equal 1, e.line + assert_equal 5, e.column assert_equal File.expand_path("#{@gem_deps_file}.lock"), e.path end + def test_get_type_multiple + @lockfile.instance_variable_set :@tokens, [[:section, 'x', 5, 1]] + + assert @lockfile.get [:text, :section] + end + def test_get_type_value_mismatch @lockfile.instance_variable_set :@tokens, [[:section, 'x', 5, 1]] @@ -66,21 +75,117 @@ class TestGemRequestSetLockfile < Gem::TestCase end expected = - 'unexpected token [:section, "x"], expected [:section, "y"] (at 5:1)' + 'unexpected token [:section, "x"], expected [:section, "y"] (at line 1 column 5)' assert_equal expected, e.message - assert_equal 5, e.line - assert_equal 1, e.column + assert_equal 1, e.line + assert_equal 5, e.column assert_equal File.expand_path("#{@gem_deps_file}.lock"), e.path end def test_parse + write_lockfile <<-LOCKFILE.strip +GEM + remote: #{@gem_repo} + specs: + a (2) + +PLATFORMS + #{Gem::Platform::RUBY} + +DEPENDENCIES + a + LOCKFILE + + @lockfile.parse + + assert_equal [dep('a')], @set.dependencies + + assert_equal [Gem::Platform::RUBY], @lockfile.platforms + + lockfile_set = @set.sets.find do |set| + Gem::Resolver::LockSet === set + end + + assert lockfile_set, 'could not find a LockSet' + + assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name } + end + + def test_parse_dependencies + write_lockfile <<-LOCKFILE +GEM + remote: #{@gem_repo} + specs: + a (2) + +PLATFORMS + #{Gem::Platform::RUBY} + +DEPENDENCIES + a (>= 1, <= 2) + LOCKFILE + + @lockfile.parse + + assert_equal [dep('a', '>= 1', '<= 2')], @set.dependencies + + assert_equal [Gem::Platform::RUBY], @lockfile.platforms + + lockfile_set = @set.sets.find do |set| + Gem::Resolver::LockSet === set + end + + assert lockfile_set, 'could not find a LockSet' + + assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name } + end + + def test_parse_GIT + write_lockfile <<-LOCKFILE +GIT + remote: git://example/a.git + revision: master + specs: + a (2) + b (>= 3) + +DEPENDENCIES + a! + LOCKFILE + + @lockfile.parse + + assert_equal [dep('a', '= 2')], @set.dependencies + + lockfile_set = @set.sets.find do |set| + Gem::Resolver::LockSet === set + end + + refute lockfile_set, 'fount a LockSet' + + git_set = @set.sets.find do |set| + Gem::Resolver::GitSet === set + end + + assert git_set, 'could not find a GitSet' + + assert_equal %w[a-2], git_set.specs.values.map { |s| s.full_name } + + assert_equal [dep('b', '>= 3')], git_set.specs.values.first.dependencies + end + + def test_parse_gem_specs_dependency write_lockfile <<-LOCKFILE GEM remote: #{@gem_repo} specs: a (2) + b (= 3) + c (~> 4) + d + e (~> 5.0, >= 5.0.1) PLATFORMS #{Gem::Platform::RUBY} @@ -102,6 +207,17 @@ DEPENDENCIES assert lockfile_set, 'could not find a LockSet' assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name } + + spec = lockfile_set.specs.first + + expected = [ + dep('b', '= 3'), + dep('c', '~> 4'), + dep('d'), + dep('e', '~> 5.0', '>= 5.0.1'), + ] + + assert_equal expected, spec.dependencies end def test_parse_missing @@ -120,6 +236,8 @@ DEPENDENCIES assert_equal :token, @lockfile.peek assert_equal :token, @lockfile.get + + assert_equal :EOF, @lockfile.peek end def test_skip @@ -147,6 +265,13 @@ GEM remote: #{@gem_repo} specs: a (2) + b (= 2) + c (!= 3) + d (> 4) + e (< 5) + f (>= 6) + g (<= 7) + h (~> 8) PLATFORMS #{Gem::Platform::RUBY} @@ -155,6 +280,106 @@ DEPENDENCIES a LOCKFILE + expected = [ + [:section, 'GEM', 0, 0], + [:newline, nil, 3, 0], + + [:entry, 'remote', 2, 1], + [:text, @gem_repo, 10, 1], + [:newline, nil, 34, 1], + + [:entry, 'specs', 2, 2], + [:newline, nil, 8, 2], + + [:text, 'a', 4, 3], + [:l_paren, nil, 6, 3], + [:text, '2', 7, 3], + [:r_paren, nil, 8, 3], + [:newline, nil, 9, 3], + + [:text, 'b', 6, 4], + [:l_paren, nil, 8, 4], + [:requirement, '=', 9, 4], + [:text, '2', 11, 4], + [:r_paren, nil, 12, 4], + [:newline, nil, 13, 4], + + [:text, 'c', 6, 5], + [:l_paren, nil, 8, 5], + [:requirement, '!=', 9, 5], + [:text, '3', 12, 5], + [:r_paren, nil, 13, 5], + [:newline, nil, 14, 5], + + [:text, 'd', 6, 6], + [:l_paren, nil, 8, 6], + [:requirement, '>', 9, 6], + [:text, '4', 11, 6], + [:r_paren, nil, 12, 6], + [:newline, nil, 13, 6], + + [:text, 'e', 6, 7], + [:l_paren, nil, 8, 7], + [:requirement, '<', 9, 7], + [:text, '5', 11, 7], + [:r_paren, nil, 12, 7], + [:newline, nil, 13, 7], + + [:text, 'f', 6, 8], + [:l_paren, nil, 8, 8], + [:requirement, '>=', 9, 8], + [:text, '6', 12, 8], + [:r_paren, nil, 13, 8], + [:newline, nil, 14, 8], + + [:text, 'g', 6, 9], + [:l_paren, nil, 8, 9], + [:requirement, '<=', 9, 9], + [:text, '7', 12, 9], + [:r_paren, nil, 13, 9], + [:newline, nil, 14, 9], + + [:text, 'h', 6, 10], + [:l_paren, nil, 8, 10], + [:requirement, '~>', 9, 10], + [:text, '8', 12, 10], + [:r_paren, nil, 13, 10], + [:newline, nil, 14, 10], + + [:newline, nil, 0, 11], + + [:section, 'PLATFORMS', 0, 12], + [:newline, nil, 9, 12], + + [:text, Gem::Platform::RUBY, 2, 13], + [:newline, nil, 6, 13], + + [:newline, nil, 0, 14], + + [:section, 'DEPENDENCIES', 0, 15], + [:newline, nil, 12, 15], + + [:text, 'a', 2, 16], + [:newline, nil, 3, 16], + ] + + assert_equal expected, @lockfile.tokenize + end + + def test_tokenize_capitals + write_lockfile <<-LOCKFILE +GEM + remote: #{@gem_repo} + specs: + Ab (2) + +PLATFORMS + #{Gem::Platform::RUBY} + +DEPENDENCIES + Ab + LOCKFILE + expected = [ [:section, 'GEM', 0, 0], [:newline, nil, 3, 0], @@ -163,11 +388,11 @@ DEPENDENCIES [:newline, nil, 34, 1], [:entry, 'specs', 2, 2], [:newline, nil, 8, 2], - [:text, 'a', 4, 3], - [:l_paren, nil, 6, 3], - [:text, '2', 7, 3], - [:r_paren, nil, 8, 3], - [:newline, nil, 9, 3], + [:text, 'Ab', 4, 3], + [:l_paren, nil, 7, 3], + [:text, '2', 8, 3], + [:r_paren, nil, 9, 3], + [:newline, nil, 10, 3], [:newline, nil, 0, 4], [:section, 'PLATFORMS', 0, 5], [:newline, nil, 9, 5], @@ -176,8 +401,8 @@ DEPENDENCIES [:newline, nil, 0, 7], [:section, 'DEPENDENCIES', 0, 8], [:newline, nil, 12, 8], - [:text, 'a', 2, 9], - [:newline, nil, 3, 9], + [:text, 'Ab', 2, 9], + [:newline, nil, 4, 9], ] assert_equal expected, @lockfile.tokenize @@ -190,7 +415,7 @@ DEPENDENCIES @lockfile.tokenize end - assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)", + assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)", e.message write_lockfile '|||||||' @@ -199,7 +424,7 @@ DEPENDENCIES @lockfile.tokenize end - assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)", + assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)", e.message write_lockfile '=======' @@ -208,7 +433,7 @@ DEPENDENCIES @lockfile.tokenize end - assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)", + assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)", e.message write_lockfile '>>>>>>>' @@ -217,16 +442,74 @@ DEPENDENCIES @lockfile.tokenize end - assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)", + assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)", e.message end + def test_tokenize_git + write_lockfile <<-LOCKFILE +DEPENDENCIES + a! + LOCKFILE + + expected = [ + [:section, 'DEPENDENCIES', 0, 0], + [:newline, nil, 12, 0], + + [:text, 'a', 2, 1], + [:bang, nil, 3, 1], + [:newline, nil, 4, 1], + ] + + assert_equal expected, @lockfile.tokenize + end + def test_tokenize_missing tokens = @lockfile.tokenize assert_empty tokens end + def test_tokenize_multiple + write_lockfile <<-LOCKFILE +GEM + remote: #{@gem_repo} + specs: + a (2) + b (~> 3.0, >= 3.0.1) + LOCKFILE + + expected = [ + [:section, 'GEM', 0, 0], + [:newline, nil, 3, 0], + + [:entry, 'remote', 2, 1], + [:text, @gem_repo, 10, 1], + [:newline, nil, 34, 1], + + [:entry, 'specs', 2, 2], + [:newline, nil, 8, 2], + + [:text, 'a', 4, 3], + [:l_paren, nil, 6, 3], + [:text, '2', 7, 3], + [:r_paren, nil, 8, 3], + [:newline, nil, 9, 3], + + [:text, 'b', 6, 4], + [:l_paren, nil, 8, 4], + [:requirement, '~>', 9, 4], + [:text, '3.0', 12, 4], + [:comma, nil, 15, 4], + [:requirement, '>=', 17, 4], + [:text, '3.0.1', 20, 4], + [:r_paren, nil, 25, 4], + [:newline, nil, 26, 4], + ] + + assert_equal expected, @lockfile.tokenize + end + def test_to_s_gem spec_fetcher do |fetcher| fetcher.spec 'a', 2 @@ -274,6 +557,8 @@ PLATFORMS DEPENDENCIES a + b + c LOCKFILE assert_equal expected, @lockfile.to_s @@ -328,6 +613,7 @@ PLATFORMS DEPENDENCIES a (>= 1) + b LOCKFILE assert_equal expected, @lockfile.to_s @@ -346,8 +632,6 @@ PATH specs: #{name} (#{version}) -GEM - PLATFORMS #{Gem::Platform::RUBY} @@ -371,8 +655,6 @@ PATH specs: #{name} (#{version}) -GEM - PLATFORMS #{Gem::Platform::RUBY} @@ -408,6 +690,111 @@ DEPENDENCIES assert_equal expected, @lockfile.to_s end + def test_to_s_gem_source + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + fetcher.clear + end + + spec_fetcher 'http://other.example/' do |fetcher| + fetcher.spec 'b', 2 + fetcher.clear + end + + Gem.sources << 'http://other.example/' + + @set.gem 'a' + @set.gem 'b' + + expected = <<-LOCKFILE +GEM + remote: #{@gem_repo} + specs: + a (2) + +GEM + remote: http://other.example/ + specs: + b (2) + +PLATFORMS + #{Gem::Platform::RUBY} + +DEPENDENCIES + a + b + LOCKFILE + + assert_equal expected, @lockfile.to_s + end + + def test_to_s_git + _, _, repository, = git_gem + + head = nil + + Dir.chdir repository do + FileUtils.mkdir 'b' + + Dir.chdir 'b' do + b = Gem::Specification.new 'b', 1 do |s| + s.add_dependency 'a', '~> 1.0' + s.add_dependency 'c', '~> 1.0' + end + + 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.mkdir 'c' + + Dir.chdir 'c' do + c = Gem::Specification.new 'c', 1 + + open 'c.gemspec', 'w' do |io| + io.write c.to_ruby + end + + system @git, 'add', 'c.gemspec' + system @git, 'commit', '--quiet', '-m', 'add c/c.gemspec' + end + + head = `#{@git} rev-parse HEAD`.strip + end + + @git_set.add_git_gem 'a', repository, 'HEAD', true + @git_set.add_git_gem 'b', repository, 'HEAD', true + @git_set.add_git_gem 'c', repository, 'HEAD', true + + @set.gem 'b' + + expected = <<-LOCKFILE +GIT + remote: #{repository} + revision: #{head} + specs: + a (1) + b (1) + a (~> 1.0) + c (~> 1.0) + c (1) + +PLATFORMS + ruby + +DEPENDENCIES + a! + b! + c! + LOCKFILE + + assert_equal expected, @lockfile.to_s + end + def test_unget @lockfile.instance_variable_set :@current_token, :token diff --git a/test/rubygems/test_gem_requirement.rb b/test/rubygems/test_gem_requirement.rb index 29a4675bc9..8adaf898bc 100644 --- a/test/rubygems/test_gem_requirement.rb +++ b/test/rubygems/test_gem_requirement.rb @@ -47,6 +47,13 @@ class TestGemRequirement < Gem::TestCase def test_for_lockfile assert_equal ' (~> 1.0)', req('~> 1.0').for_lockfile + assert_equal ' (~> 1.0, >= 1.0.1)', req('>= 1.0.1', '~> 1.0').for_lockfile + + duped = req '= 1.0' + duped.requirements << ['=', v('1.0')] + + assert_equal ' (= 1.0)', duped.for_lockfile + assert_nil Gem::Requirement.default.for_lockfile end diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb index 7383114af4..97ac64b85e 100644 --- a/test/rubygems/test_gem_resolver.rb +++ b/test/rubygems/test_gem_resolver.rb @@ -228,14 +228,27 @@ class TestGemResolver < Gem::TestCase res = Gem::Resolver.new([ad, bd], s) assert_resolves_to [a1, b1, c1, d4], res + end + + def test_backoff_higher_version_to_satisfy_dep + t3 = util_spec "railties", "3.2" + t4 = util_spec "railties", "4.0" + + r3 = util_spec "rails", "3.2", "railties" => "= 3.2" + r4 = util_spec "rails", "4.0", "railties" => "= 4.0" + + rd = make_dep "rails", "3.2" + + c3 = util_spec "coffee", "3.0", "railties" => "~> 3.0" + c4 = util_spec "coffee", "4.0", "railties" => "~> 4.0" + + cd = make_dep "coffee" - cons = res.conflicts + s = set(t3, t4, r3, r4, c3, c4) - assert_equal 1, cons.size - con = cons.first + res = Gem::Resolver.new([rd, cd], s) - assert_equal "c (= 1)", con.dependency.to_s - assert_equal "c-2", con.activated.full_name + assert_resolves_to [r3, t3, c3], res end def test_raises_dependency_error diff --git a/test/rubygems/test_gem_resolver_git_set.rb b/test/rubygems/test_gem_resolver_git_set.rb index b1a8d838bb..4643624ee0 100644 --- a/test/rubygems/test_gem_resolver_git_set.rb +++ b/test/rubygems/test_gem_resolver_git_set.rb @@ -36,13 +36,31 @@ class TestGemResolverGitSet < Gem::TestCase assert @set.need_submodules[repository] end + def test_add_git_spec + name, version, repository, revision = git_gem + + @set.add_git_spec name, version, repository, revision, true + + dependency = dep 'a' + + specs = @set.find_all dependency + + spec = specs.first + + assert_equal "#{name}-#{version}", spec.full_name + + assert @set.need_submodules[repository] + + refute_path_exists spec.source.repo_cache_dir + end + def test_find_all name, _, repository, = git_gem @set.add_git_gem name, repository, 'master', false dependency = dep 'a', '~> 1.0' - req = Gem::Resolver::ActivationRequest.new dependency, nil + req = Gem::Resolver::DependencyRequest.new dependency, nil @reqs.add req @set.prefetch @reqs @@ -66,7 +84,7 @@ class TestGemResolverGitSet < Gem::TestCase @set.add_git_gem name, repository, 'master', false dependency = dep name - req = Gem::Resolver::ActivationRequest.new dependency, nil + req = Gem::Resolver::DependencyRequest.new dependency, nil @reqs.add req @set.prefetch @reqs @@ -80,7 +98,7 @@ class TestGemResolverGitSet < Gem::TestCase @set.add_git_gem name, repository, 'master', false dependency = dep name - req = Gem::Resolver::ActivationRequest.new dependency, nil + req = Gem::Resolver::DependencyRequest.new dependency, nil @reqs.add req @set.prefetch @reqs @@ -98,7 +116,7 @@ class TestGemResolverGitSet < Gem::TestCase @set.add_git_gem name, repository, 'master', false dependency = dep 'b' - req = Gem::Resolver::ActivationRequest.new dependency, nil + req = Gem::Resolver::DependencyRequest.new dependency, nil @reqs.add req @set.prefetch @reqs @@ -112,7 +130,7 @@ class TestGemResolverGitSet < Gem::TestCase @set.add_git_gem name, repository, 'master', false dependency = dep name - req = Gem::Resolver::ActivationRequest.new dependency, nil + req = Gem::Resolver::DependencyRequest.new dependency, nil @reqs.add req @set.root_dir = "#{@gemhome}2" diff --git a/test/rubygems/test_gem_resolver_git_specification.rb b/test/rubygems/test_gem_resolver_git_specification.rb index b0163bc782..b13e4a83fd 100644 --- a/test/rubygems/test_gem_resolver_git_specification.rb +++ b/test/rubygems/test_gem_resolver_git_specification.rb @@ -80,5 +80,21 @@ class TestGemResolverGitSpecification < Gem::TestCase assert_path_exists File.join git_spec.spec.extension_install_dir, 'b.rb' end + def test_install_installed + git_gem 'a', 1 + + git_spec = Gem::Resolver::GitSpecification.new @set, @spec + + git_spec.install({}) + + called = false + + git_spec.install({}) do |installer| + called = installer + end + + assert called + end + end diff --git a/test/rubygems/test_gem_resolver_lock_set.rb b/test/rubygems/test_gem_resolver_lock_set.rb index 6d904fbaee..51ddad42f0 100644 --- a/test/rubygems/test_gem_resolver_lock_set.rb +++ b/test/rubygems/test_gem_resolver_lock_set.rb @@ -12,11 +12,11 @@ class TestGemResolverLockSet < Gem::TestCase end def test_add - @set.add 'a', '2', Gem::Platform::RUBY + spec = @set.add 'a', '2', Gem::Platform::RUBY assert_equal %w[a-2], @set.specs.map { |t| t.full_name } - spec = @set.specs.first + assert_kind_of Gem::Resolver::LockSpecification, spec assert_equal @set, spec.set assert_equal 'a', spec.name diff --git a/test/rubygems/test_gem_resolver_lock_specification.rb b/test/rubygems/test_gem_resolver_lock_specification.rb new file mode 100644 index 0000000000..5741950fe0 --- /dev/null +++ b/test/rubygems/test_gem_resolver_lock_specification.rb @@ -0,0 +1,87 @@ +require 'rubygems/test_case' +require 'rubygems/resolver' + +class TestGemResolverLockSpecification < Gem::TestCase + + def setup + super + + @LS = Gem::Resolver::LockSpecification + + @source = Gem::Source.new @gem_repo + @set = Gem::Resolver::LockSet.new @source + end + + def test_initialize + spec = @LS.new @set, 'a', v(2), @source, Gem::Platform::RUBY + + assert_equal 'a', spec.name + assert_equal v(2), spec.version + assert_equal Gem::Platform::RUBY, spec.platform + + assert_equal @source, spec.source + end + + def test_add_dependency + l_spec = @LS.new @set, 'a', v(2), @source, Gem::Platform::RUBY + + b_dep = dep('b', '>= 0') + + l_spec.add_dependency b_dep + + assert_equal [b_dep], l_spec.dependencies + end + + def test_install + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + fetcher.clear + end + + spec = @LS.new @set, 'a', v(2), @source, Gem::Platform::RUBY + + called = false + + spec.install({}) do |installer| + called = installer + end + + refute_nil called + end + + def test_install_installed + spec = @LS.new @set, 'a', v(2), @source, Gem::Platform::RUBY + + FileUtils.touch File.join(@gemhome, 'specifications', spec.spec.spec_name) + + called = false + + spec.install({}) do |installer| + called = installer + end + + assert_nil called + end + + def test_spec + version = v(2) + + l_spec = @LS.new @set, 'a', version, @source, Gem::Platform::RUBY + + b_dep = dep 'b', '>= 0' + c_dep = dep 'c', '~> 1' + + l_spec.add_dependency b_dep + l_spec.add_dependency c_dep + + spec = l_spec.spec + + assert_equal 'a', spec.name + assert_equal version, spec.version + assert_equal Gem::Platform::RUBY, spec.platform + + assert_equal [b_dep, c_dep], l_spec.spec.dependencies + end + +end + diff --git a/test/rubygems/test_gem_resolver_requirement_list.rb b/test/rubygems/test_gem_resolver_requirement_list.rb index 3d09ce5f92..fd9dccb70f 100644 --- a/test/rubygems/test_gem_resolver_requirement_list.rb +++ b/test/rubygems/test_gem_resolver_requirement_list.rb @@ -9,10 +9,11 @@ class TestGemResolverRequirementList < Gem::TestCase end def test_each - @list.add 1 - @list.add 2 + dep = Gem::Dependency.new "a", "= 1" + req = Gem::Resolver::DependencyRequest.new(dep, nil) + @list.add req - assert_equal [1, 2], @list.each.to_a + assert_equal [req], @list.each.to_a end end diff --git a/test/rubygems/test_gem_source_lock.rb b/test/rubygems/test_gem_source_lock.rb index d114dccbb7..c7c4b8ca3f 100644 --- a/test/rubygems/test_gem_source_lock.rb +++ b/test/rubygems/test_gem_source_lock.rb @@ -103,5 +103,12 @@ class TestGemSourceLock < Gem::TestCase assert_equal(-1, vendor.<=>(lock), 'vendor <=> lock') end + def test_uri + remote = Gem::Source.new @gem_repo + lock = Gem::Source::Lock.new remote + + assert_equal URI(@gem_repo), lock.uri + end + end -- cgit v1.2.3