summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_resolver.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_resolver.rb')
-rw-r--r--test/rubygems/test_gem_resolver.rb336
1 files changed, 199 insertions, 137 deletions
diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb
index eb798ad557..b7dadda708 100644
--- a/test/rubygems/test_gem_resolver.rb
+++ b/test/rubygems/test_gem_resolver.rb
@@ -1,19 +1,14 @@
# frozen_string_literal: true
-require_relative 'helper'
-class TestGemResolver < Gem::TestCase
- def setup
- super
-
- @DR = Gem::Resolver
- end
+require_relative "helper"
+class TestGemResolver < Gem::TestCase
def make_dep(name, *req)
Gem::Dependency.new(name, *req)
end
def set(*specs)
- source = Gem::Source.new URI @gem_repo
+ source = Gem::Source.new Gem::URI @gem_repo
specs = specs.map do |spec|
Gem::Resolver::SpecSpecification.new nil, spec, source
@@ -25,10 +20,10 @@ class TestGemResolver < Gem::TestCase
def assert_resolves_to(expected, resolver)
actual = resolver.resolve
- exp = expected.sort_by {|s| s.full_name }
- act = actual.map {|a| a.spec.spec }.sort_by {|s| s.full_name }
+ exp = expected.sort_by(&:full_name)
+ act = actual.map {|a| a.spec.spec }.sort_by(&:full_name)
- msg = "Set of gems was not the same: #{exp.map {|x| x.full_name }.inspect} != #{act.map {|x| x.full_name }.inspect}"
+ msg = "Set of gems was not the same: #{exp.map(&:full_name).inspect} != #{act.map(&:full_name).inspect}"
assert_equal exp, act, msg
rescue Gem::DependencyResolutionError => e
@@ -36,18 +31,18 @@ class TestGemResolver < Gem::TestCase
end
def test_self_compose_sets_best_set
- best_set = @DR::BestSet.new
+ best_set = Gem::Resolver::BestSet.new
- composed = @DR.compose_sets best_set
+ composed = Gem::Resolver.compose_sets best_set
assert_equal best_set, composed
end
def test_self_compose_sets_multiple
- index_set = @DR::IndexSet.new
- vendor_set = @DR::VendorSet.new
+ index_set = Gem::Resolver::IndexSet.new
+ vendor_set = Gem::Resolver::VendorSet.new
- composed = @DR.compose_sets index_set, vendor_set
+ composed = Gem::Resolver.compose_sets index_set, vendor_set
assert_kind_of Gem::Resolver::ComposedSet, composed
@@ -55,14 +50,14 @@ class TestGemResolver < Gem::TestCase
end
def test_self_compose_sets_nest
- index_set = @DR::IndexSet.new
- vendor_set = @DR::VendorSet.new
+ index_set = Gem::Resolver::IndexSet.new
+ vendor_set = Gem::Resolver::VendorSet.new
- inner = @DR.compose_sets index_set, vendor_set
+ inner = Gem::Resolver.compose_sets index_set, vendor_set
- current_set = @DR::CurrentSet.new
+ current_set = Gem::Resolver::CurrentSet.new
- composed = @DR.compose_sets inner, current_set
+ composed = Gem::Resolver.compose_sets inner, current_set
assert_kind_of Gem::Resolver::ComposedSet, composed
@@ -70,31 +65,31 @@ class TestGemResolver < Gem::TestCase
end
def test_self_compose_sets_nil
- index_set = @DR::IndexSet.new
+ index_set = Gem::Resolver::IndexSet.new
- composed = @DR.compose_sets index_set, nil
+ composed = Gem::Resolver.compose_sets index_set, nil
assert_same index_set, composed
e = assert_raise ArgumentError do
- @DR.compose_sets nil
+ Gem::Resolver.compose_sets nil
end
- assert_equal 'one set in the composition must be non-nil', e.message
+ assert_equal "one set in the composition must be non-nil", e.message
end
def test_self_compose_sets_single
- index_set = @DR::IndexSet.new
+ index_set = Gem::Resolver::IndexSet.new
- composed = @DR.compose_sets index_set
+ composed = Gem::Resolver.compose_sets index_set
assert_same index_set, composed
end
def test_requests
- a1 = util_spec 'a', 1, 'b' => 2
+ a1 = util_spec "a", 1, "b" => 2
- r1 = Gem::Resolver::DependencyRequest.new dep('a', '= 1'), nil
+ r1 = Gem::Resolver::DependencyRequest.new dep("a", "= 1"), nil
act = Gem::Resolver::ActivationRequest.new a1, r1
@@ -104,18 +99,18 @@ class TestGemResolver < Gem::TestCase
res.requests a1, act, reqs
- assert_equal ['b (= 2)'], reqs.map {|req| req.to_s }
+ assert_equal ["b (= 2)"], reqs.map(&:to_s)
end
def test_requests_development
- a1 = util_spec 'a', 1, 'b' => 2
+ 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
+ r1 = Gem::Resolver::DependencyRequest.new dep("a", "= 1"), nil
act = Gem::Resolver::ActivationRequest.new spec, r1
@@ -126,15 +121,15 @@ class TestGemResolver < Gem::TestCase
res.requests spec, act, reqs
- assert_equal ['b (= 2)'], reqs.map {|req| req.to_s }
+ assert_equal ["b (= 2)"], reqs.map(&:to_s)
assert spec.instance_variable_defined? :@called
end
def test_requests_ignore_dependencies
- a1 = util_spec 'a', 1, 'b' => 2
+ a1 = util_spec "a", 1, "b" => 2
- r1 = Gem::Resolver::DependencyRequest.new dep('a', '= 1'), nil
+ r1 = Gem::Resolver::DependencyRequest.new dep("a", "= 1"), nil
act = Gem::Resolver::ActivationRequest.new a1, r1
@@ -149,37 +144,37 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_conservative
- a1_spec = util_spec 'a', 1
+ a1_spec = util_spec "a", 1
- a2_spec = util_spec 'a', 2 do |s|
- s.add_dependency 'b', 2
- s.add_dependency 'c'
+ 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
+ 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
+ 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
+ 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'
+ 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'
+ 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
+ e1_spec = util_spec "e", 1
+ e2_spec = util_spec "e", 2
- a_dep = make_dep 'a', '= 2'
- e_dep = make_dep 'e'
+ a_dep = make_dep "a", "= 2"
+ e_dep = make_dep "e"
# When requesting to install:
# a-2, e
@@ -191,7 +186,7 @@ class TestGemResolver < Gem::TestCase
# 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]}
+ 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)
@@ -203,17 +198,17 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_development
- a_spec = util_spec 'a', 1 do |s|
- s.add_development_dependency 'b'
+ 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'
+ b_spec = util_spec "b", 1 do |s|
+ s.add_development_dependency "c"
end
- c_spec = util_spec 'c', 1
+ c_spec = util_spec "c", 1
- a_dep = make_dep 'a', '= 1'
+ a_dep = make_dep "a", "= 1"
deps = [a_dep]
@@ -227,24 +222,24 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_development_shallow
- a_spec = util_spec 'a', 1 do |s|
- s.add_development_dependency 'b'
- s.add_runtime_dependency 'd'
+ 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'
+ b_spec = util_spec "b", 1 do |s|
+ s.add_development_dependency "c"
end
- c_spec = util_spec 'c', 1
+ c_spec = util_spec "c", 1
- d_spec = util_spec 'd', 1 do |s|
- s.add_development_dependency 'e'
+ d_spec = util_spec "d", 1 do |s|
+ s.add_development_dependency "e"
end
- e_spec = util_spec 'e', 1
+ e_spec = util_spec "e", 1
- a_dep = make_dep 'a', '= 1'
+ a_dep = make_dep "a", "= 1"
deps = [a_dep]
@@ -262,19 +257,19 @@ class TestGemResolver < Gem::TestCase
@fetcher = Gem::FakeFetcher.new
Gem::RemoteFetcher.fetcher = @fetcher
- a_dep = make_dep 'a', '= 1'
+ a_dep = make_dep "a", "= 1"
res = Gem::Resolver.new [a_dep], Gem::Resolver::IndexSet.new
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
res.resolve
end
refute_empty e.errors
end
- def test_no_overlap_specificly
- a = util_spec "a", '1'
+ def test_no_overlap_specifically
+ a = util_spec "a", "1"
b = util_spec "b", "1"
ad = make_dep "a", "= 1"
@@ -290,7 +285,7 @@ class TestGemResolver < Gem::TestCase
end
def test_pulls_in_dependencies
- a = util_spec "a", '1'
+ a = util_spec "a", "1"
b = util_spec "b", "1", "c" => "= 1"
c = util_spec "c", "1"
@@ -307,8 +302,8 @@ class TestGemResolver < Gem::TestCase
end
def test_picks_highest_version
- a1 = util_spec "a", '1'
- a2 = util_spec "a", '2'
+ a1 = util_spec "a", "1"
+ a2 = util_spec "a", "2"
s = set(a1, a2)
@@ -321,17 +316,16 @@ class TestGemResolver < Gem::TestCase
def test_picks_best_platform
is = Gem::Resolver::IndexSpecification
- unknown = Gem::Platform.new 'unknown'
- a2_p1 = a3_p2 = nil
+ unknown = Gem::Platform.new "unknown"
spec_fetcher do |fetcher|
- fetcher.spec 'a', 2
+ fetcher.spec "a", 2
- a2_p1 = fetcher.spec 'a', 2 do |s|
+ fetcher.spec "a", 2 do |s|
s.platform = Gem::Platform.local
end
- a3_p2 = fetcher.spec 'a', 3 do |s|
+ fetcher.spec "a", 3 do |s|
s.platform = unknown
end
end
@@ -342,9 +336,9 @@ class TestGemResolver < Gem::TestCase
s = set
- a2 = is.new s, 'a', v2, source, Gem::Platform::RUBY
- a2_p1 = is.new s, 'a', v2, source, Gem::Platform.local.to_s
- a3_p2 = is.new s, 'a', v3, source, unknown
+ a2 = is.new s, "a", v2, source, Gem::Platform::RUBY
+ a2_p1 = is.new s, "a", v2, source, Gem::Platform.local.to_s
+ a3_p2 = is.new s, "a", v3, source, unknown
s.add a3_p2
s.add a2_p1
@@ -357,6 +351,74 @@ class TestGemResolver < Gem::TestCase
assert_resolves_to [a2_p1.spec], res
end
+ def test_does_not_pick_musl_variants_on_non_musl_linux
+ util_set_arch "aarch64-linux" do
+ is = Gem::Resolver::IndexSpecification
+
+ linux_musl = Gem::Platform.new("aarch64-linux-musl")
+
+ spec_fetcher do |fetcher|
+ fetcher.spec "libv8-node", "15.14.0.1" do |s|
+ s.platform = Gem::Platform.local
+ end
+
+ fetcher.spec "libv8-node", "15.14.0.1" do |s|
+ s.platform = linux_musl
+ end
+ end
+
+ v15 = v("15.14.0.1")
+ source = Gem::Source.new @gem_repo
+
+ s = set
+
+ v15_linux = is.new s, "libv8-node", v15, source, Gem::Platform.local.to_s
+ v15_linux_musl = is.new s, "libv8-node", v15, source, linux_musl.to_s
+
+ s.add v15_linux
+ s.add v15_linux_musl
+
+ ad = make_dep "libv8-node", "= 15.14.0.1"
+
+ res = Gem::Resolver.new([ad], s)
+
+ assert_resolves_to [v15_linux.spec], res
+ end
+ end
+
+ def test_pick_generic_linux_variants_on_musl_linux
+ util_set_arch "aarch64-linux-musl" do
+ is = Gem::Resolver::IndexSpecification
+
+ linux = Gem::Platform.new("aarch64-linux")
+
+ spec_fetcher do |fetcher|
+ fetcher.spec "libv8-node", "15.14.0.1" do |s|
+ s.platform = linux
+ end
+
+ fetcher.spec "libv8-node", "15.14.0.1"
+ end
+
+ v15 = v("15.14.0.1")
+ source = Gem::Source.new @gem_repo
+
+ s = set
+
+ v15_ruby = is.new s, "libv8-node", v15, source, Gem::Platform::RUBY
+ v15_linux = is.new s, "libv8-node", v15, source, linux.to_s
+
+ s.add v15_linux
+ s.add v15_ruby
+
+ ad = make_dep "libv8-node", "= 15.14.0.1"
+
+ res = Gem::Resolver.new([ad], s)
+
+ assert_resolves_to [v15_linux.spec], res
+ end
+ end
+
def test_only_returns_spec_once
a1 = util_spec "a", "1", "c" => "= 1"
b1 = util_spec "b", "1", "c" => "= 1"
@@ -469,7 +531,7 @@ class TestGemResolver < Gem::TestCase
r = Gem::Resolver.new([ad], set)
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
r.resolve
end
@@ -486,7 +548,7 @@ class TestGemResolver < Gem::TestCase
r = Gem::Resolver.new([ad], set(a1))
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
r.resolve
end
@@ -499,7 +561,7 @@ class TestGemResolver < Gem::TestCase
r = Gem::Resolver.new([ad], set(a1))
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
r.resolve
end
@@ -509,14 +571,14 @@ class TestGemResolver < Gem::TestCase
def test_raises_and_reports_an_implicit_request_properly
a1 = util_spec "a", "1" do |s|
- s.add_runtime_dependency 'b', '= 2'
+ s.add_runtime_dependency "b", "= 2"
end
ad = make_dep "a", "= 1"
r = Gem::Resolver.new([ad], set(a1))
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
r.resolve
end
@@ -546,14 +608,14 @@ class TestGemResolver < Gem::TestCase
dependency = e.conflict.dependency
assert_includes %w[a b], dependency.name
- assert_equal req('>= 0'), dependency.requirement
+ assert_equal req(">= 0"), dependency.requirement
activated = e.conflict.activated
- assert_equal 'c-1', activated.full_name
+ assert_equal "c-1", activated.full_name
- assert_equal dep('c', '= 1'), activated.request.dependency
+ assert_equal dep("c", "= 1"), activated.request.dependency
- assert_equal [dep('c', '>= 2'), dep('c', '= 1')],
+ assert_equal [dep("c", ">= 2"), dep("c", "= 1")],
e.conflict.conflicting_dependencies
end
@@ -617,15 +679,15 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_conflict
- a1 = util_spec 'a', 1
- a2 = util_spec 'a', 2
+ a1 = util_spec "a", 1
+ a2 = util_spec "a", 2
- b2 = util_spec 'b', 2, 'a' => '~> 2.0'
+ b2 = util_spec "b", 2, "a" => "~> 2.0"
s = set a1, a2, b2
- a_dep = dep 'a', '~> 1.0'
- b_dep = dep 'b'
+ a_dep = dep "a", "~> 1.0"
+ b_dep = dep "b"
r = Gem::Resolver.new [a_dep, b_dep], s
@@ -635,18 +697,18 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_bug_699
- a1 = util_spec 'a', '1', 'b' => '= 2',
- 'c' => '~> 1.0.3'
+ a1 = util_spec "a", "1", "b" => "= 2",
+ "c" => "~> 1.0.3"
- b1 = util_spec 'b', '2', 'c' => '~> 1.0'
+ b1 = util_spec "b", "2", "c" => "~> 1.0"
- c1 = util_spec 'c', '1.0.9'
- c2 = util_spec 'c', '1.1.0'
- c3 = util_spec 'c', '1.2.0'
+ c1 = util_spec "c", "1.0.9"
+ c2 = util_spec "c", "1.1.0"
+ c3 = util_spec "c", "1.2.0"
s = set a1, b1, c1, c2, c3
- a_dep = dep 'a', '= 1'
+ a_dep = dep "a", "= 1"
r = Gem::Resolver.new [a_dep], s
@@ -654,16 +716,16 @@ class TestGemResolver < Gem::TestCase
end
def test_resolve_rollback
- a1 = util_spec 'a', 1
- a2 = util_spec 'a', 2
+ a1 = util_spec "a", 1
+ a2 = util_spec "a", 2
- b1 = util_spec 'b', 1, 'a' => '~> 1.0'
- b2 = util_spec 'b', 2, 'a' => '~> 2.0'
+ b1 = util_spec "b", 1, "a" => "~> 1.0"
+ b2 = util_spec "b", 2, "a" => "~> 2.0"
s = set a1, a2, b1, b2
- a_dep = dep 'a', '~> 1.0'
- b_dep = dep 'b'
+ a_dep = dep "a", "~> 1.0"
+ b_dep = dep "b"
r = Gem::Resolver.new [a_dep, b_dep], s
@@ -711,42 +773,42 @@ class TestGemResolver < Gem::TestCase
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'
+ source_a = Gem::Source.new "http://example.com/a"
+ source_b = Gem::Source.new "http://example.com/b"
+ source_c = Gem::Source.new "http://example.com/c"
- spec_A_1 = util_spec 'some-dep', '0.0.1'
- spec_A_2 = util_spec 'some-dep', '1.0.0'
- spec_B_1 = util_spec 'some-dep', '0.0.1'
- spec_B_2 = util_spec 'some-dep', '0.0.2'
- spec_C_1 = util_spec 'some-dep', '0.1.0'
+ spec_a_1 = util_spec "some-dep", "0.0.1"
+ spec_a_2 = util_spec "some-dep", "1.0.0"
+ spec_b_1 = util_spec "some-dep", "0.0.1"
+ spec_b_2 = util_spec "some-dep", "0.0.2"
+ spec_c_1 = util_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),
+ Gem::Resolver::SpecSpecification.new(nil, spec_b_1, source_b),
+ Gem::Resolver::SpecSpecification.new(nil, spec_b_2, source_b),
+ Gem::Resolver::SpecSpecification.new(nil, spec_c_1, source_c),
+ Gem::Resolver::SpecSpecification.new(nil, spec_a_2, source_a),
+ Gem::Resolver::SpecSpecification.new(nil, spec_a_1, source_a),
]
- dependency = make_dep 'some-dep', '> 0'
+ dependency = make_dep "some-dep", "> 0"
resolver = Gem::Resolver.new [dependency], set
- assert_resolves_to [spec_B_2], resolver
+ assert_resolves_to [spec_b_2], resolver
end
def test_select_local_platforms
r = Gem::Resolver.new nil, nil
- a1 = util_spec 'a', 1
+ a1 = util_spec "a", 1
- a1_p1 = util_spec 'a', 1 do |s|
+ a1_p1 = util_spec "a", 1 do |s|
s.platform = Gem::Platform.local
end
- a1_p2 = util_spec 'a', 1 do |s|
- s.platform = 'unknown'
+ a1_p2 = util_spec "a", 1 do |s|
+ s.platform = "unknown"
end
selected = r.select_local_platforms [a1, a1_p1, a1_p2]
@@ -755,18 +817,18 @@ class TestGemResolver < Gem::TestCase
end
def test_search_for_local_platform_partial_string_match
- a1 = util_spec 'a', 1
+ a1 = util_spec "a", 1
- a1_p1 = util_spec 'a', 1 do |s|
+ a1_p1 = util_spec "a", 1 do |s|
s.platform = Gem::Platform.local.os
end
- a1_p2 = util_spec 'a', 1 do |s|
- s.platform = 'unknown'
+ a1_p2 = util_spec "a", 1 do |s|
+ s.platform = "unknown"
end
s = set(a1_p1, a1_p2, a1)
- d = [make_dep('a')]
+ d = [make_dep("a")]
r = Gem::Resolver.new(d, s)
assert_resolves_to [a1_p1], r
@@ -781,7 +843,7 @@ class TestGemResolver < Gem::TestCase
r = Gem::Resolver.new([ad], set(a1))
- e = assert_raise Gem::UnsatisfiableDepedencyError do
+ e = assert_raise Gem::UnsatisfiableDependencyError do
r.resolve
end