From a7fa4d5d9aab150ad4b0c3f3217fe444df69f527 Mon Sep 17 00:00:00 2001 From: drbrain Date: Tue, 19 Nov 2013 00:34:13 +0000 Subject: * lib/rubygems: Update to RubyGems master 6a3d9f9. Changes include: Compatibly renamed Gem::DependencyResolver to Gem::Resolver. Added support for git gems in gem.deps.rb and Gemfile. Fixed resolver bugs. * test/rubygems: ditto. * lib/rubygems/LICENSE.txt: Updated to license from RubyGems trunk. [ruby-trunk - Bug #9086] * lib/rubygems/commands/which_command.rb: RubyGems now indicates failure when any file is missing. [ruby-trunk - Bug #9004] * lib/rubygems/ext/builder: Extensions are now installed into the extension install directory and the first directory in the require path from the gem. This allows backwards compatibility with msgpack and other gems that calculate full require paths. [ruby-trunk - Bug #9106] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem.rb | 2 +- test/rubygems/test_gem_commands_which_command.rb | 4 +- .../test_gem_dependency_resolution_error.rb | 4 +- test/rubygems/test_gem_dependency_resolver.rb | 540 --------------------- ...t_gem_dependency_resolver_activation_request.rb | 63 --- .../test_gem_dependency_resolver_api_set.rb | 27 -- ...st_gem_dependency_resolver_api_specification.rb | 33 -- .../test_gem_dependency_resolver_best_set.rb | 31 -- ..._gem_dependency_resolver_dependency_conflict.rb | 56 --- ...t_gem_dependency_resolver_dependency_request.rb | 20 - .../test_gem_dependency_resolver_index_set.rb | 29 -- ..._gem_dependency_resolver_index_specification.rb | 68 --- ..._dependency_resolver_installed_specification.rb | 19 - .../test_gem_dependency_resolver_installer_set.rb | 23 - .../test_gem_dependency_resolver_lock_set.rb | 57 --- .../test_gem_dependency_resolver_vendor_set.rb | 66 --- ...gem_dependency_resolver_vendor_specification.rb | 72 --- test/rubygems/test_gem_ext_builder.rb | 22 +- .../test_gem_impossible_dependencies_error.rb | 4 +- test/rubygems/test_gem_installer.rb | 14 +- test/rubygems/test_gem_remote_fetcher.rb | 2 +- test/rubygems/test_gem_request_set.rb | 31 +- .../test_gem_request_set_gem_dependency_api.rb | 199 +++++++- test/rubygems/test_gem_request_set_lockfile.rb | 4 +- test/rubygems/test_gem_resolver.rb | 535 ++++++++++++++++++++ .../test_gem_resolver_activation_request.rb | 63 +++ test/rubygems/test_gem_resolver_api_set.rb | 26 + .../test_gem_resolver_api_specification.rb | 32 ++ test/rubygems/test_gem_resolver_best_set.rb | 30 ++ test/rubygems/test_gem_resolver_conflict.rb | 59 +++ .../test_gem_resolver_dependency_request.rb | 20 + test/rubygems/test_gem_resolver_git_set.rb | 84 ++++ .../test_gem_resolver_git_specification.rb | 36 ++ test/rubygems/test_gem_resolver_index_set.rb | 28 ++ .../test_gem_resolver_index_specification.rb | 67 +++ .../test_gem_resolver_installed_specification.rb | 18 + test/rubygems/test_gem_resolver_installer_set.rb | 22 + test/rubygems/test_gem_resolver_lock_set.rb | 56 +++ .../rubygems/test_gem_resolver_requirement_list.rb | 19 + test/rubygems/test_gem_resolver_vendor_set.rb | 65 +++ .../test_gem_resolver_vendor_specification.rb | 71 +++ test/rubygems/test_gem_source.rb | 4 +- test/rubygems/test_gem_source_git.rb | 153 ++++++ test/rubygems/test_gem_source_vendor.rb | 14 + test/rubygems/test_gem_specification.rb | 4 +- test/rubygems/test_gem_stub_specification.rb | 4 +- test/rubygems/test_gem_util.rb | 11 + 47 files changed, 1679 insertions(+), 1132 deletions(-) delete mode 100644 test/rubygems/test_gem_dependency_resolver.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_activation_request.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_api_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_api_specification.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_best_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_dependency_request.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_index_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_index_specification.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_installed_specification.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_installer_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_lock_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_vendor_set.rb delete mode 100644 test/rubygems/test_gem_dependency_resolver_vendor_specification.rb create mode 100644 test/rubygems/test_gem_resolver.rb create mode 100644 test/rubygems/test_gem_resolver_activation_request.rb create mode 100644 test/rubygems/test_gem_resolver_api_set.rb create mode 100644 test/rubygems/test_gem_resolver_api_specification.rb create mode 100644 test/rubygems/test_gem_resolver_best_set.rb create mode 100644 test/rubygems/test_gem_resolver_conflict.rb create mode 100644 test/rubygems/test_gem_resolver_dependency_request.rb create mode 100644 test/rubygems/test_gem_resolver_git_set.rb create mode 100644 test/rubygems/test_gem_resolver_git_specification.rb create mode 100644 test/rubygems/test_gem_resolver_index_set.rb create mode 100644 test/rubygems/test_gem_resolver_index_specification.rb create mode 100644 test/rubygems/test_gem_resolver_installed_specification.rb create mode 100644 test/rubygems/test_gem_resolver_installer_set.rb create mode 100644 test/rubygems/test_gem_resolver_lock_set.rb create mode 100644 test/rubygems/test_gem_resolver_requirement_list.rb create mode 100644 test/rubygems/test_gem_resolver_vendor_set.rb create mode 100644 test/rubygems/test_gem_resolver_vendor_specification.rb create mode 100644 test/rubygems/test_gem_source_git.rb create mode 100644 test/rubygems/test_gem_util.rb (limited to 'test/rubygems') diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index fd4d1de5c6..ec7f7299ec 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -1120,7 +1120,7 @@ class TestGem < Gem::TestCase ENV['RUBYGEMS_GEMDEPS'] = "-" - assert_equal [a,b,c], Gem.detect_gemdeps + assert_equal [a,b,c], Gem.detect_gemdeps.sort_by { |s| s.name } end LIB_PATH = File.expand_path "../../../lib".untaint, __FILE__.untaint diff --git a/test/rubygems/test_gem_commands_which_command.rb b/test/rubygems/test_gem_commands_which_command.rb index b19f204c4a..7ce26c861a 100644 --- a/test/rubygems/test_gem_commands_which_command.rb +++ b/test/rubygems/test_gem_commands_which_command.rb @@ -44,7 +44,9 @@ class TestGemCommandsWhichCommand < Gem::TestCase @cmd.handle_options %w[foo_bar missinglib] use_ui @ui do - @cmd.execute + assert_raises Gem::MockGemUi::TermError do + @cmd.execute + end end assert_equal "#{@foo_bar.full_gem_path}/lib/foo_bar.rb\n", @ui.output diff --git a/test/rubygems/test_gem_dependency_resolution_error.rb b/test/rubygems/test_gem_dependency_resolution_error.rb index 0ac0b06028..0442082e6a 100644 --- a/test/rubygems/test_gem_dependency_resolution_error.rb +++ b/test/rubygems/test_gem_dependency_resolution_error.rb @@ -5,7 +5,7 @@ class TestGemDependencyResolutionError < Gem::TestCase def setup super - @DR = Gem::DependencyResolver + @DR = Gem::Resolver @spec = util_spec 'a', 2 @@ -14,7 +14,7 @@ class TestGemDependencyResolutionError < Gem::TestCase @activated = @DR::ActivationRequest.new @spec, @a2_req - @conflict = @DR::DependencyConflict.new @a1_req, @activated + @conflict = @DR::Conflict.new @a1_req, @activated @error = Gem::DependencyResolutionError.new @conflict end diff --git a/test/rubygems/test_gem_dependency_resolver.rb b/test/rubygems/test_gem_dependency_resolver.rb deleted file mode 100644 index ceecab6d55..0000000000 --- a/test/rubygems/test_gem_dependency_resolver.rb +++ /dev/null @@ -1,540 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolver < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver - end - - def make_dep(name, *req) - Gem::Dependency.new(name, *req) - end - - def set(*specs) - StaticSet.new(specs) - end - - def assert_resolves_to expected, resolver - actual = resolver.resolve - - exp = expected.sort_by { |s| s.full_name } - act = actual.map { |a| a.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}" - - assert_equal exp, act, msg - rescue Gem::DependencyResolutionError => e - flunk e.message - end - - def test_self_compose_sets_multiple - index_set = @DR::IndexSet.new - vendor_set = @DR::VendorSet.new - - composed = @DR.compose_sets index_set, vendor_set - - assert_kind_of Gem::DependencyResolver::ComposedSet, composed - - assert_equal [index_set, vendor_set], composed.sets - end - - def test_self_compose_sets_nil - index_set = @DR::IndexSet.new - - composed = @DR.compose_sets index_set, nil - - assert_same index_set, composed - - e = assert_raises ArgumentError do - @DR.compose_sets nil - end - - 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 - - composed = @DR.compose_sets index_set - - assert_same index_set, composed - end - - def test_handle_conflict - a1 = util_spec 'a', 1 - - r1 = Gem::DependencyResolver::DependencyRequest.new dep('a', '= 1'), nil - r2 = Gem::DependencyResolver::DependencyRequest.new dep('a', '= 2'), nil - r3 = Gem::DependencyResolver::DependencyRequest.new dep('a', '= 3'), nil - - existing = Gem::DependencyResolver::ActivationRequest.new a1, r1, false - - res = Gem::DependencyResolver.new [a1] - - res.handle_conflict r2, existing - res.handle_conflict r2, existing - res.handle_conflict r3, existing - - assert_equal 2, res.conflicts.length - end - - def test_no_overlap_specificly - a = util_spec "a", '1' - b = util_spec "b", "1" - - ad = make_dep "a", "= 1" - bd = make_dep "b", "= 1" - - deps = [ad, bd] - - s = set(a, b) - - res = Gem::DependencyResolver.new(deps, s) - - assert_resolves_to [a, b], res - end - - def test_pulls_in_dependencies - a = util_spec "a", '1' - b = util_spec "b", "1", "c" => "= 1" - c = util_spec "c", "1" - - ad = make_dep "a", "= 1" - bd = make_dep "b", "= 1" - - deps = [ad, bd] - - s = set(a, b, c) - - res = Gem::DependencyResolver.new(deps, s) - - assert_resolves_to [a, b, c], res - end - - def test_picks_highest_version - a1 = util_spec "a", '1' - a2 = util_spec "a", '2' - - s = set(a1, a2) - - ad = make_dep "a" - - res = Gem::DependencyResolver.new([ad], s) - - assert_resolves_to [a2], res - end - - def test_picks_best_platform - is = Gem::DependencyResolver::IndexSpecification - unknown = Gem::Platform.new 'unknown' - a2_p1 = a3_p2 = nil - - spec_fetcher do |fetcher| - a2_p1 = fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end - a3_p2 = fetcher.spec 'a', 3 do |s| s.platform = unknown end - end - - v2 = v(2) - v3 = v(3) - source = Gem::Source.new @gem_repo - - 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 - - s.add a3_p2 - s.add a2_p1 - s.add a2 - - ad = make_dep "a" - - res = Gem::DependencyResolver.new([ad], s) - - assert_resolves_to [a2_p1], res - end - - def test_only_returns_spec_once - a1 = util_spec "a", "1", "c" => "= 1" - b1 = util_spec "b", "1", "c" => "= 1" - - c1 = util_spec "c", "1" - - ad = make_dep "a" - bd = make_dep "b" - - s = set(a1, b1, c1) - - res = Gem::DependencyResolver.new([ad, bd], s) - - assert_resolves_to [a1, b1, c1], res - end - - def test_picks_lower_version_when_needed - a1 = util_spec "a", "1", "c" => ">= 1" - b1 = util_spec "b", "1", "c" => "= 1" - - c1 = util_spec "c", "1" - c2 = util_spec "c", "2" - - ad = make_dep "a" - bd = make_dep "b" - - s = set(a1, b1, c1, c2) - - res = Gem::DependencyResolver.new([ad, bd], s) - - assert_resolves_to [a1, b1, c1], res - - cons = res.conflicts - - assert_equal 1, cons.size - con = cons.first - - assert_equal "c (= 1)", con.dependency.to_s - assert_equal "c-2", con.activated.full_name - end - - def test_conflict_resolution_only_effects_correct_spec - a1 = util_spec "a", "1", "c" => ">= 1" - b1 = util_spec "b", "1", "d" => ">= 1" - - d3 = util_spec "d", "3", "c" => "= 1" - d4 = util_spec "d", "4", "c" => "= 1" - - c1 = util_spec "c", "1" - c2 = util_spec "c", "2" - - ad = make_dep "a" - bd = make_dep "b" - - s = set(a1, b1, d3, d4, c1, c2) - - res = Gem::DependencyResolver.new([ad, bd], s) - - assert_resolves_to [a1, b1, c1, d4], res - - cons = res.conflicts - - assert_equal 1, cons.size - con = cons.first - - assert_equal "c (= 1)", con.dependency.to_s - assert_equal "c-2", con.activated.full_name - end - - def test_raises_dependency_error - a1 = util_spec "a", "1", "c" => "= 1" - b1 = util_spec "b", "1", "c" => "= 2" - - c1 = util_spec "c", "1" - c2 = util_spec "c", "2" - - ad = make_dep "a" - bd = make_dep "b" - - s = set(a1, b1, c1, c2) - - r = Gem::DependencyResolver.new([ad, bd], s) - - e = assert_raises Gem::DependencyResolutionError do - r.resolve - end - - deps = [make_dep("c", "= 2"), make_dep("c", "= 1")] - assert_equal deps, e.conflicting_dependencies - - con = e.conflict - - act = con.activated - assert_equal "c-1", act.spec.full_name - - parent = act.parent - assert_equal "a-1", parent.spec.full_name - - act = con.requester - assert_equal "b-1", act.spec.full_name - end - - def test_raises_when_a_gem_is_missing - ad = make_dep "a" - - r = Gem::DependencyResolver.new([ad], set) - - e = assert_raises Gem::UnsatisfiableDepedencyError do - r.resolve - end - - assert_equal "Unable to resolve dependency: user requested 'a (>= 0)'", - e.message - - assert_equal "a (>= 0)", e.dependency.to_s - end - - def test_raises_when_a_gem_version_is_missing - a1 = util_spec "a", "1" - - ad = make_dep "a", "= 3" - - r = Gem::DependencyResolver.new([ad], set(a1)) - - e = assert_raises Gem::UnsatisfiableDepedencyError do - r.resolve - end - - assert_equal "a (= 3)", e.dependency.to_s - end - - def test_raises_and_reports_a_toplevel_request_properly - a1 = util_spec "a", "1" - ad = make_dep "a", "= 3" - - r = Gem::DependencyResolver.new([ad], set(a1)) - - e = assert_raises Gem::UnsatisfiableDepedencyError do - r.resolve - end - - assert_equal "Unable to resolve dependency: user requested 'a (= 3)'", - e.message - end - - def test_raises_and_reports_an_implicit_request_properly - a1 = util_spec "a", "1" do |s| - s.add_runtime_dependency 'b', '= 2' - end - - ad = make_dep "a", "= 1" - - r = Gem::DependencyResolver.new([ad], set(a1)) - - e = assert_raises Gem::UnsatisfiableDepedencyError do - r.resolve - end - - assert_equal "Unable to resolve dependency: 'a (= 1)' requires 'b (= 2)'", - e.message - end - - def test_raises_when_possibles_are_exhausted - a1 = util_spec "a", "1", "c" => ">= 2" - b1 = util_spec "b", "1", "c" => "= 1" - - c1 = util_spec "c", "1" - c2 = util_spec "c", "2" - c3 = util_spec "c", "3" - - s = set(a1, b1, c1, c2, c3) - - ad = make_dep "a" - bd = make_dep "b" - - r = Gem::DependencyResolver.new([ad, bd], s) - - e = assert_raises Gem::DependencyResolutionError do - r.resolve - end - - dependency = e.conflict.dependency - - assert_equal 'a', dependency.name - assert_equal req('>= 0'), dependency.requirement - - activated = e.conflict.activated - assert_equal 'c-2', activated.full_name - - assert_equal dep('c', '>= 2'), activated.request.dependency - - assert_equal [dep('c', '= 1'), dep('c', '>= 2')], - e.conflict.conflicting_dependencies - end - - def test_keeps_resolving_after_seeing_satisfied_dep - a1 = util_spec "a", "1", "b" => "= 1", "c" => "= 1" - b1 = util_spec "b", "1" - c1 = util_spec "c", "1" - - ad = make_dep "a" - bd = make_dep "b" - - s = set(a1, b1, c1) - - r = Gem::DependencyResolver.new([ad, bd], s) - - assert_resolves_to [a1, b1, c1], r - end - - def test_common_rack_activation_scenario - rack100 = util_spec "rack", "1.0.0" - rack101 = util_spec "rack", "1.0.1" - - lib1 = util_spec "lib", "1", "rack" => ">= 1.0.1" - - rails = util_spec "rails", "3", "actionpack" => "= 3" - ap = util_spec "actionpack", "3", "rack" => ">= 1.0.0" - - d1 = make_dep "rails" - d2 = make_dep "lib" - - s = set(lib1, rails, ap, rack100, rack101) - - r = Gem::DependencyResolver.new([d1, d2], s) - - assert_resolves_to [rails, ap, rack101, lib1], r - - # check it with the deps reverse too - - r = Gem::DependencyResolver.new([d2, d1], s) - - assert_resolves_to [lib1, rack101, rails, ap], r - end - - def test_backtracks_to_the_first_conflict - a1 = util_spec "a", "1" - a2 = util_spec "a", "2" - a3 = util_spec "a", "3" - a4 = util_spec "a", "4" - - d1 = make_dep "a" - d2 = make_dep "a", ">= 2" - d3 = make_dep "a", "= 1" - - s = set(a1, a2, a3, a4) - - r = Gem::DependencyResolver.new([d1, d2, d3], s) - - assert_raises Gem::DependencyResolutionError do - r.resolve - end - end - - def test_resolve_conflict - a1 = util_spec 'a', 1 - a2 = util_spec 'a', 2 - - b2 = util_spec 'b', 2, 'a' => '~> 2.0' - - s = set a1, a2, b2 - - a_dep = dep 'a', '~> 1.0' - b_dep = dep 'b' - - r = Gem::DependencyResolver.new [a_dep, b_dep], s - - assert_raises Gem::DependencyResolutionError do - r.resolve - end - end - - def test_resolve_bug_699 - a1 = util_spec 'a', '1', 'b' => '= 2', - 'c' => '~> 1.0.3' - - 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' - - s = set a1, b1, c1, c2, c3 - - a_dep = dep 'a', '= 1' - - r = Gem::DependencyResolver.new [a_dep], s - - assert_resolves_to [a1, b1, c1], r - end - - def test_resolve_rollback - 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' - - s = set a1, a2, b1, b2 - - a_dep = dep 'a', '~> 1.0' - b_dep = dep 'b' - - r = Gem::DependencyResolver.new [a_dep, b_dep], s - - assert_resolves_to [a1, b1], r - end - - # actionmailer 2.3.4 - # activemerchant 1.5.0 - # activesupport 2.3.5, 2.3.4 - # Activemerchant needs activesupport >= 2.3.2. When you require activemerchant, it will activate the latest version that meets that requirement which is 2.3.5. Actionmailer on the other hand needs activesupport = 2.3.4. When rubygems tries to activate activesupport 2.3.4, it will raise an error. - - - def test_simple_activesupport_problem - sup1 = util_spec "activesupport", "2.3.4" - sup2 = util_spec "activesupport", "2.3.5" - - merch = util_spec "activemerchant", "1.5.0", "activesupport" => ">= 2.3.2" - mail = util_spec "actionmailer", "2.3.4", "activesupport" => "= 2.3.4" - - s = set(mail, merch, sup1, sup2) - - d1 = make_dep "activemerchant" - d2 = make_dep "actionmailer" - - r = Gem::DependencyResolver.new([d1, d2], s) - - assert_resolves_to [merch, mail, sup1], r - end - - def test_second_level_backout - b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" - b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" - c1 = new_spec "c", "1" - c2 = new_spec "c", "2" - d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb" - d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" - - s = set(b1, b2, c1, c2, d1, d2) - - p1 = make_dep "b", "> 0" - p2 = make_dep "d", "> 0" - - r = Gem::DependencyResolver.new([p1, p2], s) - - assert_resolves_to [b1, c1, d2], r - end - - def test_select_local_platforms - r = Gem::DependencyResolver.new nil, nil - - a1 = util_spec 'a', 1 - 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' end - - selected = r.select_local_platforms [a1, a1_p1, a1_p2] - - assert_equal [a1, a1_p1], selected - end - - def test_raises_and_explains_when_platform_prevents_install - a1 = util_spec "a", "1" do |s| - s.platform = Gem::Platform.new %w[c p 1] - end - - ad = make_dep "a", "= 1" - - r = Gem::DependencyResolver.new([ad], set(a1)) - - e = assert_raises Gem::UnsatisfiableDepedencyError do - r.resolve - end - - assert_match "No match for 'a (= 1)' on this platform. Found: c-p-1", - e.message - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_activation_request.rb b/test/rubygems/test_gem_dependency_resolver_activation_request.rb deleted file mode 100644 index ac554d128c..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_activation_request.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'rubygems/test_case' - -class TestGemDependencyResolverActivationRequest < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver - - @dep = @DR::DependencyRequest.new dep('a', '>= 0'), nil - - source = Gem::Source::Local.new - platform = Gem::Platform::RUBY - - @a1 = @DR::IndexSpecification.new nil, 'a', v(1), source, platform - @a2 = @DR::IndexSpecification.new nil, 'a', v(2), source, platform - @a3 = @DR::IndexSpecification.new nil, 'a', v(3), source, platform - - @req = @DR::ActivationRequest.new @a3, @dep, [@a1, @a2] - end - - def test_inspect - assert_match 'a-3', @req.inspect - assert_match 'from a (>= 0)', @req.inspect - assert_match '(others possible: a-1, a-2)', @req.inspect - end - - def test_inspect_legacy - req = @DR::ActivationRequest.new @a3, @dep, true - - assert_match '(others possible)', req.inspect - - req = @DR::ActivationRequest.new @a3, @dep, false - - refute_match '(others possible)', req.inspect - end - - def test_installed_eh - v_spec = Gem::DependencyResolver::VendorSpecification.new nil, @a3 - - @req = @DR::ActivationRequest.new v_spec, @dep, [@a1, @a2] - - assert @req.installed? - end - - def test_others_possible_eh - assert @req.others_possible? - - req = @DR::ActivationRequest.new @a3, @dep, [] - - refute req.others_possible? - - req = @DR::ActivationRequest.new @a3, @dep, true - - assert req.others_possible? - - req = @DR::ActivationRequest.new @a3, @dep, false - - refute req.others_possible? - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_api_set.rb b/test/rubygems/test_gem_dependency_resolver_api_set.rb deleted file mode 100644 index ef99b6ca7f..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_api_set.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverAPISet < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver - end - - def test_initialize - set = @DR::APISet.new - - assert_equal URI('https://rubygems.org/api/v1/dependencies'), - set.dep_uri - end - - def test_initialize_uri - set = @DR::APISet.new @gem_repo - - assert_equal URI('http://gems.example.com/'), - set.dep_uri - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_api_specification.rb b/test/rubygems/test_gem_dependency_resolver_api_specification.rb deleted file mode 100644 index cdbecec822..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_api_specification.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverAPISpecification < Gem::TestCase - - def test_initialize - set = Gem::DependencyResolver::APISet.new - data = { - :name => 'rails', - :number => '3.0.3', - :platform => 'ruby', - :dependencies => [ - ['bundler', '~> 1.0'], - ['railties', '= 3.0.3'], - ], - } - - spec = Gem::DependencyResolver::APISpecification.new set, data - - assert_equal 'rails', spec.name - assert_equal Gem::Version.new('3.0.3'), spec.version - assert_equal Gem::Platform::RUBY, spec.platform - - expected = [ - Gem::Dependency.new('bundler', '~> 1.0'), - Gem::Dependency.new('railties', '= 3.0.3'), - ] - - assert_equal expected, spec.dependencies - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_best_set.rb b/test/rubygems/test_gem_dependency_resolver_best_set.rb deleted file mode 100644 index 20fbf4514f..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_best_set.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverBestSet < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver - end - - def test_find_all_index - spec_fetcher do |fetcher| - fetcher.spec 'a', 1 - fetcher.spec 'a', 2 - fetcher.spec 'b', 1 - end - - set = @DR::BestSet.new - - dependency = dep 'a', '~> 1' - - req = @DR::DependencyRequest.new dependency, nil - - found = set.find_all req - - assert_equal %w[a-1], found.map { |s| s.full_name } - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb b/test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb deleted file mode 100644 index 68e17f8a98..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverDependencyConflict < Gem::TestCase - - def test_explanation - 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 - - conflict = - Gem::DependencyResolver::DependencyConflict.new child, child.requester - - expected = <<-EXPECTED - Activated net-ssh-2.2.2 instead of (>= 2.6.5) via: - net-ssh-2.2.2, rye-0.9.8 - EXPECTED - - assert_equal expected, conflict.explanation - end - - def test_explanation_user_request - @DR = Gem::DependencyResolver - - spec = util_spec 'a', 2 - - a1_req = @DR::DependencyRequest.new dep('a', '= 1'), nil - a2_req = @DR::DependencyRequest.new dep('a', '= 2'), nil - - activated = @DR::ActivationRequest.new spec, a2_req - - conflict = @DR::DependencyConflict.new a1_req, activated - - expected = <<-EXPECTED - Activated a-2 instead of (= 1) via: - user request (gem command or Gemfile) - EXPECTED - - assert_equal expected, conflict.explanation - end - - 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 - - conflict = - Gem::DependencyResolver::DependencyConflict.new child, nil - - assert_equal %w[net-ssh-2.2.2 rye-0.9.8], conflict.request_path - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_dependency_request.rb b/test/rubygems/test_gem_dependency_resolver_dependency_request.rb deleted file mode 100644 index f5b3a6960e..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_dependency_request.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rubygems/test_case' - -class TestGemDependencyResolverDependencyRequest < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver::DependencyRequest - end - - def test_requirement - dependency = dep 'a', '>= 1' - - dr = @DR.new dependency, nil - - assert_equal dependency, dr.dependency - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_index_set.rb b/test/rubygems/test_gem_dependency_resolver_index_set.rb deleted file mode 100644 index 83b7cce501..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_index_set.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverIndexSet < Gem::TestCase - - def setup - super - - @DR = Gem::DependencyResolver - end - - def test_initialize - set = @DR::IndexSet.new - - fetcher = set.instance_variable_get :@f - - assert_same Gem::SpecFetcher.fetcher, fetcher - end - - def test_initialize_source - set = @DR::IndexSet.new 'http://alternate.example' - - fetcher = set.instance_variable_get :@f - - refute_same Gem::SpecFetcher.fetcher, fetcher - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_index_specification.rb b/test/rubygems/test_gem_dependency_resolver_index_specification.rb deleted file mode 100644 index 751ed34db3..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_index_specification.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' -require 'rubygems/available_set' - -class TestGemDependencyResolverIndexSpecification < Gem::TestCase - - def test_initialize - set = Gem::DependencyResolver::IndexSet.new - source = Gem::Source.new @gem_repo - version = Gem::Version.new '3.0.3' - - spec = Gem::DependencyResolver::IndexSpecification.new( - set, 'rails', version, source, Gem::Platform::RUBY) - - assert_equal 'rails', spec.name - assert_equal version, spec.version - assert_equal Gem::Platform::RUBY, spec.platform - - assert_equal source, spec.source - end - - def test_initialize_platform - set = Gem::DependencyResolver::IndexSet.new - source = Gem::Source::Local.new - version = Gem::Version.new '3.0.3' - - spec = Gem::DependencyResolver::IndexSpecification.new( - set, 'rails', version, source, Gem::Platform.local) - - assert_equal Gem::Platform.local.to_s, spec.platform - end - - def test_spec - specs = spec_fetcher do |fetcher| - fetcher.spec 'a', 2 - fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end - end - - source = Gem::Source.new @gem_repo - version = v 2 - - set = Gem::DependencyResolver::IndexSet.new - i_spec = Gem::DependencyResolver::IndexSpecification.new \ - set, 'a', version, source, Gem::Platform.local - - spec = i_spec.spec - - assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name - end - - def test_spec_local - a_2_p = util_spec 'a', 2 do |s| s.platform = Gem::Platform.local end - Gem::Package.build a_2_p - - source = Gem::Source::Local.new - set = Gem::DependencyResolver::InstallerSet.new :local - set.always_install << a_2_p - - i_spec = Gem::DependencyResolver::IndexSpecification.new \ - set, 'a', v(2), source, Gem::Platform.local - - spec = i_spec.spec - - assert_equal a_2_p.full_name, spec.full_name - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_installed_specification.rb b/test/rubygems/test_gem_dependency_resolver_installed_specification.rb deleted file mode 100644 index e1f4262e4b..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_installed_specification.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverInstalledSpecification < Gem::TestCase - - def test_initialize - set = Gem::DependencyResolver::CurrentSet.new - - source_spec = util_spec 'a' - - spec = Gem::DependencyResolver::InstalledSpecification.new set, source_spec - - assert_equal 'a', spec.name - assert_equal Gem::Version.new(2), spec.version - assert_equal Gem::Platform::RUBY, spec.platform - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_installer_set.rb b/test/rubygems/test_gem_dependency_resolver_installer_set.rb deleted file mode 100644 index 6341c6bc73..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_installer_set.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverInstallerSet < Gem::TestCase - - def test_load_spec - specs = spec_fetcher do |fetcher| - fetcher.spec 'a', 2 - fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end - end - - source = Gem::Source.new @gem_repo - version = v 2 - - set = Gem::DependencyResolver::InstallerSet.new :remote - - spec = set.load_spec 'a', version, Gem::Platform.local, source - - assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_lock_set.rb b/test/rubygems/test_gem_dependency_resolver_lock_set.rb deleted file mode 100644 index 6142f2b8d0..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_lock_set.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverLockSet < Gem::TestCase - - def setup - super - - @source = Gem::Source.new @gem_repo - - @set = Gem::DependencyResolver::LockSet.new @source - end - - def test_add - @set.add 'a', '2', Gem::Platform::RUBY - - assert_equal %w[a-2], @set.specs.map { |t| t.full_name } - - spec = @set.specs.first - - assert_equal @set, spec.set - 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_find_all - @set.add 'a', '2', Gem::Platform::RUBY - @set.add 'b', '2', Gem::Platform::RUBY - - found = @set.find_all dep 'a' - - assert_equal %w[a-2], found.map { |s| s.full_name } - end - - def test_load_spec - spec_fetcher do |fetcher| - fetcher.spec 'a', 2 - end - - version = v(2) - @set.add 'a', version, Gem::Platform::RUBY - - loaded = @set.load_spec 'a', version, Gem::Platform::RUBY, @source - - assert_kind_of Gem::Specification, loaded - - assert_equal 'a-2', loaded.full_name - end - - def test_prefetch - assert_respond_to @set, :prefetch - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_vendor_set.rb b/test/rubygems/test_gem_dependency_resolver_vendor_set.rb deleted file mode 100644 index 227cf369c8..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_vendor_set.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverVendorSet < Gem::TestCase - - def setup - super - - @set = Gem::DependencyResolver::VendorSet.new - end - - def test_add_vendor_gem - name, version, directory = vendor_gem - - @set.add_vendor_gem name, directory - - spec = @set.load_spec name, version, Gem::Platform::RUBY, nil - - assert_equal "#{name}-#{version}", spec.full_name - end - - def test_add_vendor_gem_missing - name, _, directory = vendor_gem - - FileUtils.rm_r directory - - e = assert_raises Gem::GemNotFoundException do - @set.add_vendor_gem name, directory - end - - assert_equal "unable to find #{directory}/#{name}.gemspec for gem #{name}", - e.message - end - - def test_find_all - name, version, directory = vendor_gem - - @set.add_vendor_gem name, directory - - dependency = dep 'a', '~> 1' - - req = Gem::DependencyResolver::DependencyRequest.new dependency, nil - - found = @set.find_all req - - spec = @set.load_spec name, version, Gem::Platform::RUBY, nil - - source = Gem::Source::Vendor.new directory - - expected = [ - Gem::DependencyResolver::VendorSpecification.new(@set, spec, source) - ] - - assert_equal expected, found - end - - def test_load_spec - error = Object.const_defined?(:KeyError) ? KeyError : IndexError - - assert_raises error do - @set.load_spec 'a', v(1), Gem::Platform::RUBY, nil - end - end - -end - diff --git a/test/rubygems/test_gem_dependency_resolver_vendor_specification.rb b/test/rubygems/test_gem_dependency_resolver_vendor_specification.rb deleted file mode 100644 index 77d78d1dc7..0000000000 --- a/test/rubygems/test_gem_dependency_resolver_vendor_specification.rb +++ /dev/null @@ -1,72 +0,0 @@ -require 'rubygems/test_case' -require 'rubygems/dependency_resolver' - -class TestGemDependencyResolverVendorSpecification < Gem::TestCase - - def setup - super - - @set = Gem::DependencyResolver::VendorSet.new - @spec = Gem::Specification.new 'a', 1 - end - - def test_equals2 - v_spec_a = Gem::DependencyResolver::VendorSpecification.new @set, @spec - - assert_equal v_spec_a, v_spec_a - - spec_b = Gem::Specification.new 'b', 1 - v_spec_b = Gem::DependencyResolver::VendorSpecification.new @set, spec_b - - refute_equal v_spec_a, v_spec_b - - v_set = Gem::DependencyResolver::VendorSet.new - v_spec_s = Gem::DependencyResolver::VendorSpecification.new v_set, @spec - - refute_equal v_spec_a, v_spec_s - - i_set = Gem::DependencyResolver::IndexSet.new - source = Gem::Source.new @gem_repo - i_spec = Gem::DependencyResolver::IndexSpecification.new( - i_set, 'a', v(1), source, Gem::Platform::RUBY) - - refute_equal v_spec_a, i_spec - end - - def test_dependencies - @spec.add_dependency 'b' - @spec.add_dependency 'c' - - v_spec = Gem::DependencyResolver::VendorSpecification.new @set, @spec - - assert_equal [dep('b'), dep('c')], v_spec.dependencies - end - - def test_full_name - v_spec = Gem::DependencyResolver::VendorSpecification.new @set, @spec - - assert_equal 'a-1', v_spec.full_name - end - - def test_name - v_spec = Gem::DependencyResolver::VendorSpecification.new @set, @spec - - assert_equal 'a', v_spec.name - end - - def test_platform - v_spec = Gem::DependencyResolver::VendorSpecification.new @set, @spec - - assert_equal Gem::Platform::RUBY, v_spec.platform - end - - def test_version - spec = Gem::Specification.new 'a', 1 - - v_spec = Gem::DependencyResolver::VendorSpecification.new @set, spec - - assert_equal v(1), v_spec.version - end - -end - diff --git a/test/rubygems/test_gem_ext_builder.rb b/test/rubygems/test_gem_ext_builder.rb index d7e5880a96..3da9bc9e60 100644 --- a/test/rubygems/test_gem_ext_builder.rb +++ b/test/rubygems/test_gem_ext_builder.rb @@ -98,22 +98,26 @@ install: end def test_build_extensions - @spec.extensions << 'extconf.rb' + @spec.extensions << 'ext/extconf.rb' - FileUtils.mkdir_p @spec.gem_dir + ext_dir = File.join @spec.gem_dir, 'ext' + + FileUtils.mkdir_p ext_dir - extconf_rb = File.join @spec.gem_dir, 'extconf.rb' + extconf_rb = File.join ext_dir, 'extconf.rb' open extconf_rb, 'w' do |f| f.write <<-'RUBY' - open 'Makefile', 'w' do |f| - f.puts "clean:\n\techo cleaned" - f.puts "default:\n\techo built" - f.puts "install:\n\techo installed" - end + require 'mkmf' + + create_makefile 'a' RUBY end + ext_lib_dir = File.join ext_dir, 'lib' + FileUtils.mkdir ext_lib_dir + FileUtils.touch File.join ext_lib_dir, 'a.rb' + use_ui @ui do @builder.build_extensions end @@ -121,6 +125,8 @@ install: assert_path_exists @spec.extension_install_dir assert_path_exists @spec.gem_build_complete_path assert_path_exists File.join @spec.extension_install_dir, 'gem_make.out' + assert_path_exists File.join @spec.extension_install_dir, 'a.rb' + assert_path_exists File.join @spec.gem_dir, 'lib', 'a.rb' end def test_build_extensions_none diff --git a/test/rubygems/test_gem_impossible_dependencies_error.rb b/test/rubygems/test_gem_impossible_dependencies_error.rb index 9a0472fa36..f61b86e490 100644 --- a/test/rubygems/test_gem_impossible_dependencies_error.rb +++ b/test/rubygems/test_gem_impossible_dependencies_error.rb @@ -15,10 +15,10 @@ class TestGemImpossibleDependenciesError < Gem::TestCase net_ssh_2_6_5 = dependency_request dep('net-ssh', '~> 2.2.2'), 'net-ssh', '2.6.5', request - conflict1 = Gem::DependencyResolver::DependencyConflict.new \ + conflict1 = Gem::Resolver::Conflict.new \ net_ssh_2_6_5, net_ssh_2_6_5.requester - conflict2 = Gem::DependencyResolver::DependencyConflict.new \ + conflict2 = Gem::Resolver::Conflict.new \ net_ssh_2_2_2, net_ssh_2_2_2.requester conflicts << [net_ssh_2_6_5.requester.spec, conflict1] diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 0abb58b655..f0dd52cd36 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -1004,6 +1004,10 @@ gem 'other', version skip '1.9.2 and earlier mkmf.rb does not create TOUCH' if RUBY_VERSION < '1.9.3' + if RUBY_VERSION == "1.9.3" and RUBY_PATCHLEVEL <= 194 + skip "TOUCH was introduced into 1.9.3 after p194" + end + @spec.require_paths = ["."] @spec.extensions << "extconf.rb" @@ -1038,8 +1042,14 @@ gem 'other', version puts '-' * 78 puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile') puts '-' * 78 - puts File.read File.join(@gemhome, 'gems', 'a-2', 'gem_make.out') - puts '-' * 78 + + path = File.join(@gemhome, 'gems', 'a-2', 'gem_make.out') + + if File.exists?(path) + puts File.read(path) + puts '-' * 78 + end + raise end diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb index 5f36e71807..7e6d9c7693 100644 --- a/test/rubygems/test_gem_remote_fetcher.rb +++ b/test/rubygems/test_gem_remote_fetcher.rb @@ -165,7 +165,7 @@ gems: def test_api_endpoint uri = URI.parse "http://gems.example.com/foo" target = MiniTest::Mock.new - target.expect :target, "http://blah.com" + target.expect :target, "blah.com" dns = MiniTest::Mock.new dns.expect :getresource, target, [String, Object] diff --git a/test/rubygems/test_gem_request_set.rb b/test/rubygems/test_gem_request_set.rb index 9b215c2bc7..531b6c09d1 100644 --- a/test/rubygems/test_gem_request_set.rb +++ b/test/rubygems/test_gem_request_set.rb @@ -7,7 +7,7 @@ class TestGemRequestSet < Gem::TestCase Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new - @DR = Gem::DependencyResolver + @DR = Gem::Resolver end def test_gem @@ -69,6 +69,7 @@ class TestGemRequestSet < Gem::TestCase assert_equal [dep('a')], rs.dependencies + assert rs.git_set assert rs.vendor_set end @@ -100,6 +101,32 @@ class TestGemRequestSet < Gem::TestCase assert_equal ["a-2", "b-2"], names end + def test_resolve_git + name, _, repository, = git_gem + + rs = Gem::RequestSet.new + + Tempfile.open 'gem.deps.rb' do |io| + io.puts <<-gems_deps_rb + gem "#{name}", :git => "#{repository}" + gems_deps_rb + + io.flush + + rs.load_gemdeps io.path + end + + res = rs.resolve + assert_equal 1, res.size + + names = res.map { |s| s.full_name }.sort + + assert_equal %w[a-1], names + + assert_equal [@DR::IndexSet, @DR::GitSet, @DR::VendorSet], + rs.sets.map { |set| set.class } + end + def test_resolve_incompatible a1 = util_spec 'a', 1 a2 = util_spec 'a', 2 @@ -142,7 +169,7 @@ class TestGemRequestSet < Gem::TestCase assert_equal ["a-1", "b-2"], names - assert_equal [@DR::IndexSet, @DR::VendorSet], + assert_equal [@DR::IndexSet, @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 154449dde2..4286a761cb 100644 --- a/test/rubygems/test_gem_request_set_gem_dependency_api.rb +++ b/test/rubygems/test_gem_request_set_gem_dependency_api.rb @@ -10,9 +10,11 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase @set = Gem::RequestSet.new - @vendor_set = Gem::DependencyResolver::VendorSet.new + @git_set = Gem::Resolver::GitSet.new + @vendor_set = Gem::Resolver::VendorSet.new @gda = @GDA.new @set, 'gem.deps.rb' + @gda.instance_variable_set :@git_set, @git_set @gda.instance_variable_set :@vendor_set, @vendor_set end @@ -48,6 +50,18 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase Gem.instance_variables.include? :@ruby_version end + def test_gemspec_without_group + @gda.send :add_dependencies, [:development], [dep('a', '= 1')] + + assert_equal [dep('a', '= 1')], @set.dependencies + + @gda.without_groups << :development + + @gda.send :add_dependencies, [:development], [dep('b', '= 2')] + + assert_equal [dep('a', '= 1')], @set.dependencies + end + def test_gem @gda.gem 'a' @@ -56,6 +70,65 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase assert_equal %w[a], @gda.requires['a'] end + def test_gem_git + @gda.gem 'a', :git => 'git/a' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git/a master], @git_set.repositories['a'] + end + + def test_gem_git_branch + @gda.gem 'a', :git => 'git/a', :branch => 'other', :tag => 'v1' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git/a other], @git_set.repositories['a'] + end + + def test_gem_git_gist + @gda.gem 'a', :gist => 'a' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[https://gist.github.com/a.git master], + @git_set.repositories['a'] + end + + def test_gem_git_ref + @gda.gem 'a', :git => 'git/a', :ref => 'abcd123', :branch => 'other' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git/a abcd123], @git_set.repositories['a'] + end + + def test_gem_git_submodules + @gda.gem 'a', :git => 'git/a', :submodules => true + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git/a master], @git_set.repositories['a'] + assert_equal %w[git/a], @git_set.need_submodules.keys + end + + def test_gem_git_tag + @gda.gem 'a', :git => 'git/a', :tag => 'v1' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git/a v1], @git_set.repositories['a'] + end + + def test_gem_github + @gda.gem 'a', :github => 'example/repository' + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[git://github.com/example/repository.git master], + @git_set.repositories['a'] + end + def test_gem_group @gda.gem 'a', :group => :test @@ -284,6 +357,130 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase assert_equal [:a, :b, :c, :d], groups.sort_by { |group| group.to_s } end + def test_gemspec + spec = util_spec 'a', 1, 'b' => 2 + spec.add_development_dependency 'c', 3 + + open 'a.gemspec', 'w' do |io| + io.write spec.to_ruby_for_cache + end + + @gda.gemspec + + assert_equal [dep('b', '= 2'), dep('c', '=3')], @set.dependencies + + assert_equal %w[a], @gda.requires['a'] + end + + def test_gemspec_bad + FileUtils.touch 'a.gemspec' + + e = assert_raises ArgumentError do + capture_io do + @gda.gemspec + end + end + + assert_equal 'invalid gemspec ./a.gemspec', e.message + end + + def test_gemspec_development_group + spec = util_spec 'a', 1, 'b' => 2 + spec.add_development_dependency 'c', 3 + + open 'a.gemspec', 'w' do |io| + io.write spec.to_ruby_for_cache + end + + @gda.without_groups << :other + + @gda.gemspec :development_group => :other + + assert_equal [dep('b', '= 2')], @set.dependencies + + assert_equal %w[a], @gda.requires['a'] + end + + def test_gemspec_multiple + open 'a.gemspec', 'w' do |io| + spec = util_spec 'a', 1, 'b' => 2 + io.write spec.to_ruby_for_cache + end + + open 'b.gemspec', 'w' do |io| + spec = util_spec 'b', 2, 'c' => 3 + io.write spec.to_ruby_for_cache + end + + e = assert_raises ArgumentError do + @gda.gemspec + end + + assert_equal "found multiple gemspecs at #{@tempdir}, use the name: option to specify the one you want", e.message + end + + def test_gemspec_name + open 'a.gemspec', 'w' do |io| + spec = util_spec 'a', 1, 'b' => 2 + io.write spec.to_ruby_for_cache + end + + open 'b.gemspec', 'w' do |io| + spec = util_spec 'b', 2, 'c' => 3 + io.write spec.to_ruby_for_cache + end + + @gda.gemspec :name => 'b' + + assert_equal [dep('c', '= 3')], @set.dependencies + end + + def test_gemspec_named + spec = util_spec 'a', 1, 'b' => 2 + + open 'other.gemspec', 'w' do |io| + io.write spec.to_ruby_for_cache + end + + @gda.gemspec + + assert_equal [dep('b', '= 2')], @set.dependencies + end + + def test_gemspec_none + e = assert_raises ArgumentError do + @gda.gemspec + end + + assert_equal "no gemspecs found at #{@tempdir}", e.message + end + + def test_gemspec_path + spec = util_spec 'a', 1, 'b' => 2 + + FileUtils.mkdir 'other' + + open 'other/a.gemspec', 'w' do |io| + io.write spec.to_ruby_for_cache + end + + @gda.gemspec :path => 'other' + + assert_equal [dep('b', '= 2')], @set.dependencies + end + + def test_git + @gda.git 'git://example/repo.git' do + @gda.gem 'a' + @gda.gem 'b' + end + + assert_equal [dep('a'), dep('b')], @set.dependencies + + assert_equal %w[git://example/repo.git master], @git_set.repositories['a'] + assert_equal %w[git://example/repo.git master], @git_set.repositories['b'] + end + def test_group @gda.group :test do @gda.gem 'a' diff --git a/test/rubygems/test_gem_request_set_lockfile.rb b/test/rubygems/test_gem_request_set_lockfile.rb index 9e947f54ec..fcd4ecfaf7 100644 --- a/test/rubygems/test_gem_request_set_lockfile.rb +++ b/test/rubygems/test_gem_request_set_lockfile.rb @@ -13,7 +13,7 @@ class TestGemRequestSetLockfile < Gem::TestCase @set = Gem::RequestSet.new - @vendor_set = Gem::DependencyResolver::VendorSet.new + @vendor_set = Gem::Resolver::VendorSet.new @set.instance_variable_set :@vendor_set, @vendor_set @@ -96,7 +96,7 @@ DEPENDENCIES assert_equal [Gem::Platform::RUBY], @lockfile.platforms lockfile_set = @set.sets.find do |set| - Gem::DependencyResolver::LockSet === set + Gem::Resolver::LockSet === set end assert lockfile_set, 'could not find a LockSet' diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb new file mode 100644 index 0000000000..80769de8cf --- /dev/null +++ b/test/rubygems/test_gem_resolver.rb @@ -0,0 +1,535 @@ +require 'rubygems/test_case' + +class TestGemResolver < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver + end + + def make_dep(name, *req) + Gem::Dependency.new(name, *req) + end + + def set(*specs) + StaticSet.new(specs) + end + + def assert_resolves_to expected, resolver + actual = resolver.resolve + + exp = expected.sort_by { |s| s.full_name } + act = actual.map { |a| a.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}" + + assert_equal exp, act, msg + rescue Gem::DependencyResolutionError => e + flunk e.message + end + + def test_self_compatibility + assert_same Gem::Resolver, Gem::DependencyResolver + end + + def test_self_compose_sets_multiple + index_set = @DR::IndexSet.new + vendor_set = @DR::VendorSet.new + + composed = @DR.compose_sets index_set, vendor_set + + assert_kind_of Gem::Resolver::ComposedSet, composed + + assert_equal [index_set, vendor_set], composed.sets + end + + def test_self_compose_sets_nil + index_set = @DR::IndexSet.new + + composed = @DR.compose_sets index_set, nil + + assert_same index_set, composed + + e = assert_raises ArgumentError do + @DR.compose_sets nil + end + + 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 + + composed = @DR.compose_sets index_set + + assert_same index_set, composed + end + + def test_handle_conflict + a1 = util_spec 'a', 1 + + r1 = Gem::Resolver::DependencyRequest.new dep('a', '= 1'), nil + r2 = Gem::Resolver::DependencyRequest.new dep('a', '= 2'), nil + r3 = Gem::Resolver::DependencyRequest.new dep('a', '= 3'), nil + + existing = Gem::Resolver::ActivationRequest.new a1, r1, false + + res = Gem::Resolver.new [a1] + + res.handle_conflict r2, existing + res.handle_conflict r2, existing + res.handle_conflict r3, existing + + assert_equal 2, res.conflicts.length + end + + def test_no_overlap_specificly + a = util_spec "a", '1' + b = util_spec "b", "1" + + ad = make_dep "a", "= 1" + bd = make_dep "b", "= 1" + + deps = [ad, bd] + + s = set(a, b) + + res = Gem::Resolver.new(deps, s) + + assert_resolves_to [a, b], res + end + + def test_pulls_in_dependencies + a = util_spec "a", '1' + b = util_spec "b", "1", "c" => "= 1" + c = util_spec "c", "1" + + ad = make_dep "a", "= 1" + bd = make_dep "b", "= 1" + + deps = [ad, bd] + + s = set(a, b, c) + + res = Gem::Resolver.new(deps, s) + + assert_resolves_to [a, b, c], res + end + + def test_picks_highest_version + a1 = util_spec "a", '1' + a2 = util_spec "a", '2' + + s = set(a1, a2) + + ad = make_dep "a" + + res = Gem::Resolver.new([ad], s) + + assert_resolves_to [a2], res + end + + def test_picks_best_platform + is = Gem::Resolver::IndexSpecification + unknown = Gem::Platform.new 'unknown' + a2_p1 = a3_p2 = nil + + spec_fetcher do |fetcher| + a2_p1 = fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end + a3_p2 = fetcher.spec 'a', 3 do |s| s.platform = unknown end + end + + v2 = v(2) + v3 = v(3) + source = Gem::Source.new @gem_repo + + 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 + + s.add a3_p2 + s.add a2_p1 + s.add a2 + + ad = make_dep "a" + + res = Gem::Resolver.new([ad], s) + + assert_resolves_to [a2_p1], res + end + + def test_only_returns_spec_once + a1 = util_spec "a", "1", "c" => "= 1" + b1 = util_spec "b", "1", "c" => "= 1" + + c1 = util_spec "c", "1" + + ad = make_dep "a" + bd = make_dep "b" + + s = set(a1, b1, c1) + + res = Gem::Resolver.new([ad, bd], s) + + assert_resolves_to [a1, b1, c1], res + end + + def test_picks_lower_version_when_needed + a1 = util_spec "a", "1", "c" => ">= 1" + b1 = util_spec "b", "1", "c" => "= 1" + + c1 = util_spec "c", "1" + c2 = util_spec "c", "2" + + ad = make_dep "a" + bd = make_dep "b" + + s = set(a1, b1, c1, c2) + + res = Gem::Resolver.new([ad, bd], s) + + assert_resolves_to [a1, b1, c1], res + end + + def test_conflict_resolution_only_effects_correct_spec + a1 = util_spec "a", "1", "c" => ">= 1" + b1 = util_spec "b", "1", "d" => ">= 1" + + d3 = util_spec "d", "3", "c" => "= 1" + d4 = util_spec "d", "4", "c" => "= 1" + + c1 = util_spec "c", "1" + c2 = util_spec "c", "2" + + ad = make_dep "a" + bd = make_dep "b" + + s = set(a1, b1, d3, d4, c1, c2) + + res = Gem::Resolver.new([ad, bd], s) + + assert_resolves_to [a1, b1, c1, d4], res + + cons = res.conflicts + + assert_equal 1, cons.size + con = cons.first + + assert_equal "c (= 1)", con.dependency.to_s + assert_equal "c-2", con.activated.full_name + end + + def test_raises_dependency_error + a1 = util_spec "a", "1", "c" => "= 1" + b1 = util_spec "b", "1", "c" => "= 2" + + c1 = util_spec "c", "1" + c2 = util_spec "c", "2" + + ad = make_dep "a" + bd = make_dep "b" + + s = set(a1, b1, c1, c2) + + r = Gem::Resolver.new([ad, bd], s) + + e = assert_raises Gem::DependencyResolutionError do + r.resolve + end + + deps = [make_dep("c", "= 1"), make_dep("c", "= 2")] + assert_equal deps, e.conflicting_dependencies + + con = e.conflict + + act = con.activated + assert_equal "c-2", act.spec.full_name + + parent = act.parent + assert_equal "b-1", parent.spec.full_name + + act = con.requester + assert_equal "a-1", act.spec.full_name + end + + def test_raises_when_a_gem_is_missing + ad = make_dep "a" + + r = Gem::Resolver.new([ad], set) + + e = assert_raises Gem::UnsatisfiableDepedencyError do + r.resolve + end + + assert_equal "Unable to resolve dependency: user requested 'a (>= 0)'", + e.message + + assert_equal "a (>= 0)", e.dependency.to_s + end + + def test_raises_when_a_gem_version_is_missing + a1 = util_spec "a", "1" + + ad = make_dep "a", "= 3" + + r = Gem::Resolver.new([ad], set(a1)) + + e = assert_raises Gem::UnsatisfiableDepedencyError do + r.resolve + end + + assert_equal "a (= 3)", e.dependency.to_s + end + + def test_raises_and_reports_a_toplevel_request_properly + a1 = util_spec "a", "1" + ad = make_dep "a", "= 3" + + r = Gem::Resolver.new([ad], set(a1)) + + e = assert_raises Gem::UnsatisfiableDepedencyError do + r.resolve + end + + assert_equal "Unable to resolve dependency: user requested 'a (= 3)'", + e.message + end + + def test_raises_and_reports_an_implicit_request_properly + a1 = util_spec "a", "1" do |s| + s.add_runtime_dependency 'b', '= 2' + end + + ad = make_dep "a", "= 1" + + r = Gem::Resolver.new([ad], set(a1)) + + e = assert_raises Gem::UnsatisfiableDepedencyError do + r.resolve + end + + assert_equal "Unable to resolve dependency: 'a (= 1)' requires 'b (= 2)'", + e.message + end + + def test_raises_when_possibles_are_exhausted + a1 = util_spec "a", "1", "c" => ">= 2" + b1 = util_spec "b", "1", "c" => "= 1" + + c1 = util_spec "c", "1" + c2 = util_spec "c", "2" + c3 = util_spec "c", "3" + + s = set(a1, b1, c1, c2, c3) + + ad = make_dep "a" + bd = make_dep "b" + + r = Gem::Resolver.new([ad, bd], s) + + e = assert_raises Gem::DependencyResolutionError do + r.resolve + end + + dependency = e.conflict.dependency + + assert_equal 'a', dependency.name + assert_equal req('>= 0'), dependency.requirement + + activated = e.conflict.activated + assert_equal 'c-1', activated.full_name + + assert_equal dep('c', '= 1'), activated.request.dependency + + assert_equal [dep('c', '>= 2'), dep('c', '= 1')], + e.conflict.conflicting_dependencies + end + + def test_keeps_resolving_after_seeing_satisfied_dep + a1 = util_spec "a", "1", "b" => "= 1", "c" => "= 1" + b1 = util_spec "b", "1" + c1 = util_spec "c", "1" + + ad = make_dep "a" + bd = make_dep "b" + + s = set(a1, b1, c1) + + r = Gem::Resolver.new([ad, bd], s) + + assert_resolves_to [a1, b1, c1], r + end + + def test_common_rack_activation_scenario + rack100 = util_spec "rack", "1.0.0" + rack101 = util_spec "rack", "1.0.1" + + lib1 = util_spec "lib", "1", "rack" => ">= 1.0.1" + + rails = util_spec "rails", "3", "actionpack" => "= 3" + ap = util_spec "actionpack", "3", "rack" => ">= 1.0.0" + + d1 = make_dep "rails" + d2 = make_dep "lib" + + s = set(lib1, rails, ap, rack100, rack101) + + r = Gem::Resolver.new([d1, d2], s) + + assert_resolves_to [rails, ap, rack101, lib1], r + + # check it with the deps reverse too + + r = Gem::Resolver.new([d2, d1], s) + + assert_resolves_to [lib1, rack101, rails, ap], r + end + + def test_backtracks_to_the_first_conflict + a1 = util_spec "a", "1" + a2 = util_spec "a", "2" + a3 = util_spec "a", "3" + a4 = util_spec "a", "4" + + d1 = make_dep "a" + d2 = make_dep "a", ">= 2" + d3 = make_dep "a", "= 1" + + s = set(a1, a2, a3, a4) + + r = Gem::Resolver.new([d1, d2, d3], s) + + assert_raises Gem::DependencyResolutionError do + r.resolve + end + end + + def test_resolve_conflict + a1 = util_spec 'a', 1 + a2 = util_spec 'a', 2 + + b2 = util_spec 'b', 2, 'a' => '~> 2.0' + + s = set a1, a2, b2 + + a_dep = dep 'a', '~> 1.0' + b_dep = dep 'b' + + r = Gem::Resolver.new [a_dep, b_dep], s + + assert_raises Gem::DependencyResolutionError do + r.resolve + end + end + + def test_resolve_bug_699 + a1 = util_spec 'a', '1', 'b' => '= 2', + 'c' => '~> 1.0.3' + + 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' + + s = set a1, b1, c1, c2, c3 + + a_dep = dep 'a', '= 1' + + r = Gem::Resolver.new [a_dep], s + + assert_resolves_to [a1, b1, c1], r + end + + def test_resolve_rollback + 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' + + s = set a1, a2, b1, b2 + + a_dep = dep 'a', '~> 1.0' + b_dep = dep 'b' + + r = Gem::Resolver.new [a_dep, b_dep], s + + assert_resolves_to [a1, b1], r + end + + # actionmailer 2.3.4 + # activemerchant 1.5.0 + # activesupport 2.3.5, 2.3.4 + # Activemerchant needs activesupport >= 2.3.2. When you require activemerchant, it will activate the latest version that meets that requirement which is 2.3.5. Actionmailer on the other hand needs activesupport = 2.3.4. When rubygems tries to activate activesupport 2.3.4, it will raise an error. + + + def test_simple_activesupport_problem + sup1 = util_spec "activesupport", "2.3.4" + sup2 = util_spec "activesupport", "2.3.5" + + merch = util_spec "activemerchant", "1.5.0", "activesupport" => ">= 2.3.2" + mail = util_spec "actionmailer", "2.3.4", "activesupport" => "= 2.3.4" + + s = set(mail, merch, sup1, sup2) + + d1 = make_dep "activemerchant" + d2 = make_dep "actionmailer" + + r = Gem::Resolver.new([d1, d2], s) + + assert_resolves_to [merch, mail, sup1], r + end + + def test_second_level_backout + b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" + b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" + c1 = new_spec "c", "1" + c2 = new_spec "c", "2" + d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb" + d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" + + s = set(b1, b2, c1, c2, d1, d2) + + p1 = make_dep "b", "> 0" + p2 = make_dep "d", "> 0" + + r = Gem::Resolver.new([p1, p2], s) + + assert_resolves_to [b1, c1, d2], r + end + + def test_select_local_platforms + r = Gem::Resolver.new nil, nil + + a1 = util_spec 'a', 1 + 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' end + + selected = r.select_local_platforms [a1, a1_p1, a1_p2] + + assert_equal [a1, a1_p1], selected + end + + def test_raises_and_explains_when_platform_prevents_install + a1 = util_spec "a", "1" do |s| + s.platform = Gem::Platform.new %w[c p 1] + end + + ad = make_dep "a", "= 1" + + r = Gem::Resolver.new([ad], set(a1)) + + e = assert_raises Gem::UnsatisfiableDepedencyError do + r.resolve + end + + assert_match "No match for 'a (= 1)' on this platform. Found: c-p-1", + e.message + end + +end + diff --git a/test/rubygems/test_gem_resolver_activation_request.rb b/test/rubygems/test_gem_resolver_activation_request.rb new file mode 100644 index 0000000000..54de6bf16a --- /dev/null +++ b/test/rubygems/test_gem_resolver_activation_request.rb @@ -0,0 +1,63 @@ +require 'rubygems/test_case' + +class TestGemResolverActivationRequest < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver + + @dep = @DR::DependencyRequest.new dep('a', '>= 0'), nil + + source = Gem::Source::Local.new + platform = Gem::Platform::RUBY + + @a1 = @DR::IndexSpecification.new nil, 'a', v(1), source, platform + @a2 = @DR::IndexSpecification.new nil, 'a', v(2), source, platform + @a3 = @DR::IndexSpecification.new nil, 'a', v(3), source, platform + + @req = @DR::ActivationRequest.new @a3, @dep, [@a1, @a2] + end + + def test_inspect + assert_match 'a-3', @req.inspect + assert_match 'from a (>= 0)', @req.inspect + assert_match '(others possible: a-1, a-2)', @req.inspect + end + + def test_inspect_legacy + req = @DR::ActivationRequest.new @a3, @dep, true + + assert_match '(others possible)', req.inspect + + req = @DR::ActivationRequest.new @a3, @dep, false + + refute_match '(others possible)', req.inspect + end + + def test_installed_eh + v_spec = Gem::Resolver::VendorSpecification.new nil, @a3 + + @req = @DR::ActivationRequest.new v_spec, @dep, [@a1, @a2] + + assert @req.installed? + end + + def test_others_possible_eh + assert @req.others_possible? + + req = @DR::ActivationRequest.new @a3, @dep, [] + + refute req.others_possible? + + req = @DR::ActivationRequest.new @a3, @dep, true + + assert req.others_possible? + + req = @DR::ActivationRequest.new @a3, @dep, false + + refute req.others_possible? + end + +end + diff --git a/test/rubygems/test_gem_resolver_api_set.rb b/test/rubygems/test_gem_resolver_api_set.rb new file mode 100644 index 0000000000..976d861cdf --- /dev/null +++ b/test/rubygems/test_gem_resolver_api_set.rb @@ -0,0 +1,26 @@ +require 'rubygems/test_case' + +class TestGemResolverAPISet < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver + end + + def test_initialize + set = @DR::APISet.new + + assert_equal URI('https://rubygems.org/api/v1/dependencies'), + set.dep_uri + end + + def test_initialize_uri + set = @DR::APISet.new @gem_repo + + assert_equal URI('http://gems.example.com/'), + set.dep_uri + end + +end + diff --git a/test/rubygems/test_gem_resolver_api_specification.rb b/test/rubygems/test_gem_resolver_api_specification.rb new file mode 100644 index 0000000000..e61d30c7c6 --- /dev/null +++ b/test/rubygems/test_gem_resolver_api_specification.rb @@ -0,0 +1,32 @@ +require 'rubygems/test_case' + +class TestGemResolverAPISpecification < Gem::TestCase + + def test_initialize + set = Gem::Resolver::APISet.new + data = { + :name => 'rails', + :number => '3.0.3', + :platform => 'ruby', + :dependencies => [ + ['bundler', '~> 1.0'], + ['railties', '= 3.0.3'], + ], + } + + spec = Gem::Resolver::APISpecification.new set, data + + assert_equal 'rails', spec.name + assert_equal Gem::Version.new('3.0.3'), spec.version + assert_equal Gem::Platform::RUBY, spec.platform + + expected = [ + Gem::Dependency.new('bundler', '~> 1.0'), + Gem::Dependency.new('railties', '= 3.0.3'), + ] + + assert_equal expected, spec.dependencies + end + +end + diff --git a/test/rubygems/test_gem_resolver_best_set.rb b/test/rubygems/test_gem_resolver_best_set.rb new file mode 100644 index 0000000000..5bcff4aca7 --- /dev/null +++ b/test/rubygems/test_gem_resolver_best_set.rb @@ -0,0 +1,30 @@ +require 'rubygems/test_case' + +class TestGemResolverBestSet < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver + end + + def test_find_all_index + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.spec 'a', 2 + fetcher.spec 'b', 1 + end + + set = @DR::BestSet.new + + dependency = dep 'a', '~> 1' + + req = @DR::DependencyRequest.new dependency, nil + + found = set.find_all req + + assert_equal %w[a-1], found.map { |s| s.full_name } + end + +end + diff --git a/test/rubygems/test_gem_resolver_conflict.rb b/test/rubygems/test_gem_resolver_conflict.rb new file mode 100644 index 0000000000..3ae2a7cf5f --- /dev/null +++ b/test/rubygems/test_gem_resolver_conflict.rb @@ -0,0 +1,59 @@ +require 'rubygems/test_case' + +class TestGemResolverConflict < Gem::TestCase + + def test_self_compatibility + assert_same Gem::Resolver::Conflict, Gem::Resolver::DependencyConflict + end + + def test_explanation + 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 + + conflict = + Gem::Resolver::Conflict.new child, child.requester + + expected = <<-EXPECTED + Activated net-ssh-2.2.2 instead of (>= 2.6.5) via: + net-ssh-2.2.2, rye-0.9.8 + EXPECTED + + assert_equal expected, conflict.explanation + end + + def test_explanation_user_request + @DR = Gem::Resolver + + spec = util_spec 'a', 2 + + a1_req = @DR::DependencyRequest.new dep('a', '= 1'), nil + a2_req = @DR::DependencyRequest.new dep('a', '= 2'), nil + + activated = @DR::ActivationRequest.new spec, a2_req + + conflict = @DR::Conflict.new a1_req, activated + + expected = <<-EXPECTED + Activated a-2 instead of (= 1) via: + user request (gem command or Gemfile) + EXPECTED + + assert_equal expected, conflict.explanation + end + + 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 + + conflict = + Gem::Resolver::Conflict.new child, nil + + assert_equal %w[net-ssh-2.2.2 rye-0.9.8], conflict.request_path + end + +end + diff --git a/test/rubygems/test_gem_resolver_dependency_request.rb b/test/rubygems/test_gem_resolver_dependency_request.rb new file mode 100644 index 0000000000..e1a98826fb --- /dev/null +++ b/test/rubygems/test_gem_resolver_dependency_request.rb @@ -0,0 +1,20 @@ +require 'rubygems/test_case' + +class TestGemResolverDependencyRequest < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver::DependencyRequest + end + + def test_requirement + dependency = dep 'a', '>= 1' + + dr = @DR.new dependency, nil + + assert_equal dependency, dr.dependency + end + +end + diff --git a/test/rubygems/test_gem_resolver_git_set.rb b/test/rubygems/test_gem_resolver_git_set.rb new file mode 100644 index 0000000000..6943df9ec8 --- /dev/null +++ b/test/rubygems/test_gem_resolver_git_set.rb @@ -0,0 +1,84 @@ +require 'rubygems/test_case' + +class TestGemResolverGitSet < Gem::TestCase + + def setup + super + + @set = Gem::Resolver::GitSet.new + + @reqs = Gem::Resolver::RequirementList.new + end + + def test_add_git_gem + name, version, repository, = git_gem + + @set.add_git_gem name, repository, 'master', false + + dependency = dep 'a' + + specs = @set.find_all dependency + + assert_equal "#{name}-#{version}", specs.first.full_name + + refute @set.need_submodules[repository] + end + + def test_add_git_gem_submodules + name, _, repository, = git_gem + + @set.add_git_gem name, repository, 'master', true + + dependency = dep 'a' + + refute_empty @set.find_all dependency + + assert @set.need_submodules[repository] + 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 + @reqs.add req + + @set.prefetch @reqs + + found = @set.find_all dependency + + assert_equal [@set.specs['a']], found + end + + def test_prefetch + 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 + + refute_empty @set.specs + end + + def test_prefetch_filter + name, _, repository, = git_gem + + @set.add_git_gem name, repository, 'master', false + + dependency = dep 'b' + req = Gem::Resolver::ActivationRequest.new dependency, nil + @reqs.add req + + @set.prefetch @reqs + + assert_empty @set.specs + end + +end + diff --git a/test/rubygems/test_gem_resolver_git_specification.rb b/test/rubygems/test_gem_resolver_git_specification.rb new file mode 100644 index 0000000000..f961a7709a --- /dev/null +++ b/test/rubygems/test_gem_resolver_git_specification.rb @@ -0,0 +1,36 @@ +require 'rubygems/test_case' + +class TestGemResolverGitSpecification < Gem::TestCase + + def setup + super + + @set = Gem::Resolver::GitSet.new + @spec = Gem::Specification.new 'a', 1 + end + + def test_equals2 + g_spec_a = Gem::Resolver::GitSpecification.new @set, @spec + + assert_equal g_spec_a, g_spec_a + + spec_b = Gem::Specification.new 'b', 1 + g_spec_b = Gem::Resolver::GitSpecification.new @set, spec_b + + refute_equal g_spec_a, g_spec_b + + g_set = Gem::Resolver::GitSet.new + g_spec_s = Gem::Resolver::GitSpecification.new g_set, @spec + + refute_equal g_spec_a, g_spec_s + + i_set = Gem::Resolver::IndexSet.new + source = Gem::Source.new @gem_repo + i_spec = Gem::Resolver::IndexSpecification.new( + i_set, 'a', v(1), source, Gem::Platform::RUBY) + + refute_equal g_spec_a, i_spec + end + +end + diff --git a/test/rubygems/test_gem_resolver_index_set.rb b/test/rubygems/test_gem_resolver_index_set.rb new file mode 100644 index 0000000000..137e9b5cac --- /dev/null +++ b/test/rubygems/test_gem_resolver_index_set.rb @@ -0,0 +1,28 @@ +require 'rubygems/test_case' + +class TestGemResolverIndexSet < Gem::TestCase + + def setup + super + + @DR = Gem::Resolver + end + + def test_initialize + set = @DR::IndexSet.new + + fetcher = set.instance_variable_get :@f + + assert_same Gem::SpecFetcher.fetcher, fetcher + end + + def test_initialize_source + set = @DR::IndexSet.new 'http://alternate.example' + + fetcher = set.instance_variable_get :@f + + refute_same Gem::SpecFetcher.fetcher, fetcher + end + +end + diff --git a/test/rubygems/test_gem_resolver_index_specification.rb b/test/rubygems/test_gem_resolver_index_specification.rb new file mode 100644 index 0000000000..ef474ab2d4 --- /dev/null +++ b/test/rubygems/test_gem_resolver_index_specification.rb @@ -0,0 +1,67 @@ +require 'rubygems/test_case' +require 'rubygems/available_set' + +class TestGemResolverIndexSpecification < Gem::TestCase + + def test_initialize + set = Gem::Resolver::IndexSet.new + source = Gem::Source.new @gem_repo + version = Gem::Version.new '3.0.3' + + spec = Gem::Resolver::IndexSpecification.new( + set, 'rails', version, source, Gem::Platform::RUBY) + + assert_equal 'rails', spec.name + assert_equal version, spec.version + assert_equal Gem::Platform::RUBY, spec.platform + + assert_equal source, spec.source + end + + def test_initialize_platform + set = Gem::Resolver::IndexSet.new + source = Gem::Source::Local.new + version = Gem::Version.new '3.0.3' + + spec = Gem::Resolver::IndexSpecification.new( + set, 'rails', version, source, Gem::Platform.local) + + assert_equal Gem::Platform.local.to_s, spec.platform + end + + def test_spec + specs = spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end + end + + source = Gem::Source.new @gem_repo + version = v 2 + + set = Gem::Resolver::IndexSet.new + i_spec = Gem::Resolver::IndexSpecification.new \ + set, 'a', version, source, Gem::Platform.local + + spec = i_spec.spec + + assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name + end + + def test_spec_local + a_2_p = util_spec 'a', 2 do |s| s.platform = Gem::Platform.local end + Gem::Package.build a_2_p + + source = Gem::Source::Local.new + set = Gem::Resolver::InstallerSet.new :local + set.always_install << a_2_p + + i_spec = Gem::Resolver::IndexSpecification.new \ + set, 'a', v(2), source, Gem::Platform.local + + spec = i_spec.spec + + assert_equal a_2_p.full_name, spec.full_name + end + +end + diff --git a/test/rubygems/test_gem_resolver_installed_specification.rb b/test/rubygems/test_gem_resolver_installed_specification.rb new file mode 100644 index 0000000000..f9dda29a6c --- /dev/null +++ b/test/rubygems/test_gem_resolver_installed_specification.rb @@ -0,0 +1,18 @@ +require 'rubygems/test_case' + +class TestGemResolverInstalledSpecification < Gem::TestCase + + def test_initialize + set = Gem::Resolver::CurrentSet.new + + source_spec = util_spec 'a' + + spec = Gem::Resolver::InstalledSpecification.new set, source_spec + + assert_equal 'a', spec.name + assert_equal Gem::Version.new(2), spec.version + assert_equal Gem::Platform::RUBY, spec.platform + end + +end + diff --git a/test/rubygems/test_gem_resolver_installer_set.rb b/test/rubygems/test_gem_resolver_installer_set.rb new file mode 100644 index 0000000000..af4db646a9 --- /dev/null +++ b/test/rubygems/test_gem_resolver_installer_set.rb @@ -0,0 +1,22 @@ +require 'rubygems/test_case' + +class TestGemResolverInstallerSet < Gem::TestCase + + def test_load_spec + specs = spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end + end + + source = Gem::Source.new @gem_repo + version = v 2 + + set = Gem::Resolver::InstallerSet.new :remote + + spec = set.load_spec 'a', version, Gem::Platform.local, source + + assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name + end + +end + diff --git a/test/rubygems/test_gem_resolver_lock_set.rb b/test/rubygems/test_gem_resolver_lock_set.rb new file mode 100644 index 0000000000..71b28efd4f --- /dev/null +++ b/test/rubygems/test_gem_resolver_lock_set.rb @@ -0,0 +1,56 @@ +require 'rubygems/test_case' + +class TestGemResolverLockSet < Gem::TestCase + + def setup + super + + @source = Gem::Source.new @gem_repo + + @set = Gem::Resolver::LockSet.new @source + end + + def test_add + @set.add 'a', '2', Gem::Platform::RUBY + + assert_equal %w[a-2], @set.specs.map { |t| t.full_name } + + spec = @set.specs.first + + assert_equal @set, spec.set + 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_find_all + @set.add 'a', '2', Gem::Platform::RUBY + @set.add 'b', '2', Gem::Platform::RUBY + + found = @set.find_all dep 'a' + + assert_equal %w[a-2], found.map { |s| s.full_name } + end + + def test_load_spec + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + end + + version = v(2) + @set.add 'a', version, Gem::Platform::RUBY + + loaded = @set.load_spec 'a', version, Gem::Platform::RUBY, @source + + assert_kind_of Gem::Specification, loaded + + assert_equal 'a-2', loaded.full_name + end + + def test_prefetch + assert_respond_to @set, :prefetch + end + +end + diff --git a/test/rubygems/test_gem_resolver_requirement_list.rb b/test/rubygems/test_gem_resolver_requirement_list.rb new file mode 100644 index 0000000000..3d09ce5f92 --- /dev/null +++ b/test/rubygems/test_gem_resolver_requirement_list.rb @@ -0,0 +1,19 @@ +require 'rubygems/test_case' + +class TestGemResolverRequirementList < Gem::TestCase + + def setup + super + + @list = Gem::Resolver::RequirementList.new + end + + def test_each + @list.add 1 + @list.add 2 + + assert_equal [1, 2], @list.each.to_a + end + +end + diff --git a/test/rubygems/test_gem_resolver_vendor_set.rb b/test/rubygems/test_gem_resolver_vendor_set.rb new file mode 100644 index 0000000000..58519fbf14 --- /dev/null +++ b/test/rubygems/test_gem_resolver_vendor_set.rb @@ -0,0 +1,65 @@ +require 'rubygems/test_case' + +class TestGemResolverVendorSet < Gem::TestCase + + def setup + super + + @set = Gem::Resolver::VendorSet.new + end + + def test_add_vendor_gem + name, version, directory = vendor_gem + + @set.add_vendor_gem name, directory + + spec = @set.load_spec name, version, Gem::Platform::RUBY, nil + + assert_equal "#{name}-#{version}", spec.full_name + end + + def test_add_vendor_gem_missing + name, _, directory = vendor_gem + + FileUtils.rm_r directory + + e = assert_raises Gem::GemNotFoundException do + @set.add_vendor_gem name, directory + end + + assert_equal "unable to find #{directory}/#{name}.gemspec for gem #{name}", + e.message + end + + def test_find_all + name, version, directory = vendor_gem + + @set.add_vendor_gem name, directory + + dependency = dep 'a', '~> 1' + + req = Gem::Resolver::DependencyRequest.new dependency, nil + + found = @set.find_all req + + spec = @set.load_spec name, version, Gem::Platform::RUBY, nil + + source = Gem::Source::Vendor.new directory + + expected = [ + Gem::Resolver::VendorSpecification.new(@set, spec, source) + ] + + assert_equal expected, found + end + + def test_load_spec + error = Object.const_defined?(:KeyError) ? KeyError : IndexError + + assert_raises error do + @set.load_spec 'a', v(1), Gem::Platform::RUBY, nil + end + end + +end + diff --git a/test/rubygems/test_gem_resolver_vendor_specification.rb b/test/rubygems/test_gem_resolver_vendor_specification.rb new file mode 100644 index 0000000000..d7aca569e2 --- /dev/null +++ b/test/rubygems/test_gem_resolver_vendor_specification.rb @@ -0,0 +1,71 @@ +require 'rubygems/test_case' + +class TestGemResolverVendorSpecification < Gem::TestCase + + def setup + super + + @set = Gem::Resolver::VendorSet.new + @spec = Gem::Specification.new 'a', 1 + end + + def test_equals2 + v_spec_a = Gem::Resolver::VendorSpecification.new @set, @spec + + assert_equal v_spec_a, v_spec_a + + spec_b = Gem::Specification.new 'b', 1 + v_spec_b = Gem::Resolver::VendorSpecification.new @set, spec_b + + refute_equal v_spec_a, v_spec_b + + v_set = Gem::Resolver::VendorSet.new + v_spec_s = Gem::Resolver::VendorSpecification.new v_set, @spec + + refute_equal v_spec_a, v_spec_s + + i_set = Gem::Resolver::IndexSet.new + source = Gem::Source.new @gem_repo + i_spec = Gem::Resolver::IndexSpecification.new( + i_set, 'a', v(1), source, Gem::Platform::RUBY) + + refute_equal v_spec_a, i_spec + end + + def test_dependencies + @spec.add_dependency 'b' + @spec.add_dependency 'c' + + v_spec = Gem::Resolver::VendorSpecification.new @set, @spec + + assert_equal [dep('b'), dep('c')], v_spec.dependencies + end + + def test_full_name + v_spec = Gem::Resolver::VendorSpecification.new @set, @spec + + assert_equal 'a-1', v_spec.full_name + end + + def test_name + v_spec = Gem::Resolver::VendorSpecification.new @set, @spec + + assert_equal 'a', v_spec.name + end + + def test_platform + v_spec = Gem::Resolver::VendorSpecification.new @set, @spec + + assert_equal Gem::Platform::RUBY, v_spec.platform + end + + def test_version + spec = Gem::Specification.new 'a', 1 + + v_spec = Gem::Resolver::VendorSpecification.new @set, spec + + assert_equal v(1), v_spec.version + end + +end + diff --git a/test/rubygems/test_gem_source.rb b/test/rubygems/test_gem_source.rb index 3ed40a625a..d207bcac7f 100644 --- a/test/rubygems/test_gem_source.rb +++ b/test/rubygems/test_gem_source.rb @@ -44,13 +44,13 @@ class TestGemSource < Gem::TestCase set = @source.dependency_resolver_set - assert_kind_of Gem::DependencyResolver::APISet, set + assert_kind_of Gem::Resolver::APISet, set end def test_dependency_resolver_set_marshal_api set = @source.dependency_resolver_set - assert_kind_of Gem::DependencyResolver::IndexSet, set + assert_kind_of Gem::Resolver::IndexSet, set end def test_fetch_spec diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb new file mode 100644 index 0000000000..78c415a9d3 --- /dev/null +++ b/test/rubygems/test_gem_source_git.rb @@ -0,0 +1,153 @@ +require 'rubygems/test_case' +require 'rubygems/source' + +class TestGemSourceGit < Gem::TestCase + + def setup + super + + @name, @version, @repository, @head = git_gem + + @hash = Digest::SHA1.hexdigest @repository + + @source = Gem::Source::Git.new @name, @repository, 'master', false + end + + def test_checkout + @source.checkout + + assert_path_exists File.join @source.install_dir, 'a.gemspec' + end + + def test_checkout_submodules + source = Gem::Source::Git.new @name, @repository, 'master', true + + git_gem 'b' + + Dir.chdir 'git/a' do + system @git, 'submodule', '--quiet', 'add', File.expand_path('../b'), 'b' + system @git, 'commit', '--quiet', '-m', 'add submodule b' + end + + source.checkout + + assert_path_exists File.join source.install_dir, 'a.gemspec' + assert_path_exists File.join source.install_dir, 'b/b.gemspec' + end + + def test_cache + assert @source.cache + + assert_path_exists @source.repo_cache_dir + + Dir.chdir @source.repo_cache_dir do + assert_equal @head, Gem::Util.popen(@git, 'rev-parse', 'master').strip + end + end + + def test_dir_shortref + @source.cache + + assert_equal @head[0..11], @source.dir_shortref + end + + def test_equals2 + assert_equal @source, @source + + assert_equal @source, @source.dup + + source = + Gem::Source::Git.new @source.name, @source.repository, 'other', false + + refute_equal @source, source + + source = + Gem::Source::Git.new @source.name, 'repo/other', @source.reference, false + + refute_equal @source, source + + source = + Gem::Source::Git.new 'b', @source.repository, @source.reference, false + + refute_equal @source, source + + source = + Gem::Source::Git.new @source.name, @source.repository, @source.reference, + true + + 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 + + expected = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}" + + assert_equal expected, @source.install_dir + end + + def test_repo_cache_dir + expected = + File.join Gem.dir, 'cache', 'bundler', 'git', "a-#{@hash}" + + assert_equal expected, @source.repo_cache_dir + end + + def test_rev_parse + @source.cache + + assert_equal @head, @source.rev_parse + + Dir.chdir @repository do + system @git, 'checkout', '--quiet', '-b', 'other' + end + + master_head = @head + + git_gem 'a', 2 + + source = Gem::Source::Git.new @name, @repository, 'other', false + + source.cache + + refute_equal master_head, source.rev_parse + end + + def test_spaceship + git = Gem::Source::Git.new 'a', 'git/a', 'master', false + remote = Gem::Source.new @gem_repo + installed = Gem::Source::Installed.new + + assert_equal( 0, git. <=>(git), 'git <=> git') + + assert_equal( 1, git. <=>(remote), 'git <=> remote') + assert_equal(-1, remote. <=>(git), 'remote <=> git') + + assert_equal( 1, installed.<=>(git), 'installed <=> git') + assert_equal(-1, git. <=>(installed), 'git <=> installed') + end + + def test_uri_hash + assert_equal @hash, @source.uri_hash + + source = + Gem::Source::Git.new 'a', 'http://git@example/repo.git', 'master', false + + assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe', + source.uri_hash + + source = + Gem::Source::Git.new 'a', 'HTTP://git@EXAMPLE/repo.git', 'master', false + + assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe', + source.uri_hash + end + +end + diff --git a/test/rubygems/test_gem_source_vendor.rb b/test/rubygems/test_gem_source_vendor.rb index 17403a1fc8..3f4121e5f6 100644 --- a/test/rubygems/test_gem_source_vendor.rb +++ b/test/rubygems/test_gem_source_vendor.rb @@ -9,5 +9,19 @@ class TestGemSourceVendor < Gem::TestCase assert_equal 'vendor/foo', source.uri end + def test_spaceship + vendor = Gem::Source::Vendor.new 'vendor/foo' + remote = Gem::Source.new @gem_repo + installed = Gem::Source::Installed.new + + assert_equal( 0, vendor. <=>(vendor), 'vendor <=> vendor') + + assert_equal( 1, vendor. <=>(remote), 'vendor <=> remote') + assert_equal(-1, remote. <=>(vendor), 'remote <=> vendor') + + assert_equal( 1, vendor. <=>(installed), 'vendor <=> installed') + assert_equal(-1, installed.<=>(vendor), 'installed <=> vendor') + end + end diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 75ea4092b7..3924191db9 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -1733,7 +1733,7 @@ dependencies: [] full_gem_path = Pathname(@ext.full_gem_path) relative_install_dir = ext_install_dir.relative_path_from full_gem_path - assert_equal ['lib', relative_install_dir.to_s], @ext.require_paths + assert_equal [relative_install_dir.to_s, 'lib'], @ext.require_paths ensure RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared end @@ -1744,8 +1744,8 @@ dependencies: [] @ext.require_path = 'lib' expected = [ - File.join(@gemhome, 'gems', @ext.original_name, 'lib'), @ext.extension_install_dir, + File.join(@gemhome, 'gems', @ext.original_name, 'lib'), ] assert_equal expected, @ext.full_require_paths diff --git a/test/rubygems/test_gem_stub_specification.rb b/test/rubygems/test_gem_stub_specification.rb index bb04fb4dcc..50621e28ae 100644 --- a/test/rubygems/test_gem_stub_specification.rb +++ b/test/rubygems/test_gem_stub_specification.rb @@ -31,7 +31,7 @@ class TestStubSpecification < Gem::TestCase assert_equal 'stub_e', stub.name assert_equal v(2), stub.version assert_equal Gem::Platform::RUBY, stub.platform - assert_equal ['lib', relative_install_dir], stub.require_paths + assert_equal [relative_install_dir, 'lib'], stub.require_paths assert_equal %w[ext/stub_e/extconf.rb], stub.extensions end @@ -78,8 +78,8 @@ class TestStubSpecification < Gem::TestCase stub = stub_with_extension expected = [ - File.join(stub.full_gem_path, 'lib'), stub.extension_install_dir, + File.join(stub.full_gem_path, 'lib'), ] assert_equal expected, stub.full_require_paths diff --git a/test/rubygems/test_gem_util.rb b/test/rubygems/test_gem_util.rb new file mode 100644 index 0000000000..bf67b14d38 --- /dev/null +++ b/test/rubygems/test_gem_util.rb @@ -0,0 +1,11 @@ +require 'rubygems/test_case' +require 'rubygems/util' + +class TestGemUtil < Gem::TestCase + + def test_class_popen + assert_equal "0\n", Gem::Util.popen(Gem.ruby, '-e', 'p 0') + end + +end + -- cgit v1.2.3