summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_resolver.rb
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-14 03:30:02 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-14 03:30:02 +0000
commit4de117a61517e839f2c45eaf45d56fc243d6d5b2 (patch)
tree7cb5af7a7eb513e5dddf5e343746b1611e628387 /test/rubygems/test_gem_resolver.rb
parente548c09d429a5136285ea81aed418685359ed124 (diff)
* lib/rubygems: Update to RubyGems 2.4.1 master(713ab65)
Complete history at: https://github.com/rubygems/rubygems/blob/master/History.txt#L3-L216 * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_resolver.rb')
-rw-r--r--test/rubygems/test_gem_resolver.rb132
1 files changed, 130 insertions, 2 deletions
diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb
index c97e9e710c..2b9e9fe137 100644
--- a/test/rubygems/test_gem_resolver.rb
+++ b/test/rubygems/test_gem_resolver.rb
@@ -13,6 +13,12 @@ class TestGemResolver < Gem::TestCase
end
def set(*specs)
+ source = Gem::Source.new URI @gem_repo
+
+ specs = specs.map do |spec|
+ Gem::Resolver::SpecSpecification.new nil, spec, source
+ end
+
StaticSet.new(specs)
end
@@ -20,7 +26,7 @@ class TestGemResolver < Gem::TestCase
actual = resolver.resolve
exp = expected.sort_by { |s| s.full_name }
- act = actual.map { |a| a.spec }.sort_by { |s| s.full_name }
+ act = actual.map { |a| a.spec.spec }.sort_by { |s| s.full_name }
msg = "Set of gems was not the same: #{exp.map { |x| x.full_name}.inspect} != #{act.map { |x| x.full_name}.inspect}"
@@ -123,6 +129,30 @@ class TestGemResolver < Gem::TestCase
assert_equal ['b (= 2)'], reqs.to_a.map { |req| req.to_s }
end
+ def test_requests_development
+ a1 = util_spec 'a', 1, 'b' => 2
+
+ spec = Gem::Resolver::SpecSpecification.new nil, a1
+ def spec.fetch_development_dependencies
+ @called = true
+ end
+
+ r1 = Gem::Resolver::DependencyRequest.new dep('a', '= 1'), nil
+
+ act = Gem::Resolver::ActivationRequest.new spec, r1, false
+
+ res = Gem::Resolver.new [act]
+ res.development = true
+
+ reqs = Gem::Resolver::RequirementList.new
+
+ res.requests spec, act, reqs
+
+ assert_equal ['b (= 2)'], reqs.to_a.map { |req| req.to_s }
+
+ assert spec.instance_variable_defined? :@called
+ end
+
def test_requests_ignore_dependencies
a1 = util_spec 'a', 1, 'b' => 2
@@ -140,6 +170,104 @@ class TestGemResolver < Gem::TestCase
assert_empty reqs
end
+ def test_resolve_conservative
+ a1_spec = util_spec 'a', 1
+ a2_spec = util_spec 'a', 2 do |s|
+ s.add_dependency 'b', 2
+ s.add_dependency 'c'
+ end
+ b1_spec = util_spec 'b', 1
+ b2_spec = util_spec 'b', 2
+ c1_spec = util_spec 'c', 1 do |s| s.add_dependency 'd', 2 end
+ c2_spec = util_spec 'c', 2 do |s| s.add_dependency 'd', 2 end
+ d1_spec = util_spec 'd', 1 do |s| s.add_dependency 'e' end
+ d2_spec = util_spec 'd', 2 do |s| s.add_dependency 'e' end
+ e1_spec = util_spec 'e', 1
+ e2_spec = util_spec 'e', 2
+
+ a_dep = make_dep 'a', '= 2'
+ e_dep = make_dep 'e'
+
+ # When requesting to install:
+ # a-2, e
+ deps = [a_dep, e_dep]
+
+ s = set a1_spec, a2_spec, b1_spec, b2_spec, c1_spec, c2_spec, d1_spec, d2_spec, e1_spec, e2_spec
+
+ res = Gem::Resolver.new deps, s
+
+ # With the following gems already installed:
+ # a-1, b-1, c-1, e-1
+ res.skip_gems = {'a'=>[a1_spec], 'b'=>[b1_spec], 'c'=>[c1_spec], 'e'=>[e1_spec]}
+
+ # Make sure the following gems end up getting used/installed/upgraded:
+ # a-2 (upgraded)
+ # b-2 (upgraded), specific dependency from a-2
+ # c-1 (used, not upgraded), open dependency from a-2
+ # d-2 (installed), specific dependency from c-2
+ # e-1 (used, not upgraded), open dependency from request
+ assert_resolves_to [a2_spec, b2_spec, c1_spec, d2_spec, e1_spec], res
+ end
+
+ def test_resolve_development
+ a_spec = util_spec 'a', 1 do |s| s.add_development_dependency 'b' end
+ b_spec = util_spec 'b', 1 do |s| s.add_development_dependency 'c' end
+ c_spec = util_spec 'c', 1
+
+ a_dep = make_dep 'a', '= 1'
+
+ deps = [a_dep]
+
+ s = set a_spec, b_spec, c_spec
+
+ res = Gem::Resolver.new deps, s
+
+ res.development = true
+
+ assert_resolves_to [a_spec, b_spec, c_spec], res
+ end
+
+ def test_resolve_development_shallow
+ a_spec = util_spec 'a', 1 do |s|
+ s.add_development_dependency 'b'
+ s.add_runtime_dependency 'd'
+ end
+
+ b_spec = util_spec 'b', 1 do |s| s.add_development_dependency 'c' end
+ c_spec = util_spec 'c', 1
+
+ d_spec = util_spec 'd', 1 do |s| s.add_development_dependency 'e' end
+ e_spec = util_spec 'e', 1
+
+ a_dep = make_dep 'a', '= 1'
+
+ deps = [a_dep]
+
+ s = set a_spec, b_spec, c_spec, d_spec, e_spec
+
+ res = Gem::Resolver.new deps, s
+
+ res.development = true
+ res.development_shallow = true
+
+ assert_resolves_to [a_spec, b_spec, d_spec], res
+ end
+
+ def test_resolve_remote_missing_dependency
+ @fetcher = Gem::FakeFetcher.new
+ Gem::RemoteFetcher.fetcher = @fetcher
+
+ a_dep = make_dep 'a', '= 1'
+
+ res = Gem::Resolver.new [a_dep], Gem::Resolver::IndexSet.new
+
+ e = assert_raises Gem::UnsatisfiableDepedencyError do
+ res.resolve
+ end
+
+ refute_empty e.errors
+ end
+
def test_no_overlap_specificly
a = util_spec "a", '1'
b = util_spec "b", "1"
@@ -215,7 +343,7 @@ class TestGemResolver < Gem::TestCase
res = Gem::Resolver.new([ad], s)
- assert_resolves_to [a2_p1], res
+ assert_resolves_to [a2_p1.spec], res
end
def test_only_returns_spec_once