зеркало из https://github.com/github/ruby.git
396 строки
8.5 KiB
Ruby
396 строки
8.5 KiB
Ruby
# frozen_string_literal: true
|
|
require_relative "helper"
|
|
require "rubygems/dependency"
|
|
|
|
class TestGemDependency < Gem::TestCase
|
|
def setup
|
|
super
|
|
|
|
without_any_upwards_gemfiles
|
|
end
|
|
|
|
def test_initialize
|
|
d = dep "pkg", "> 1.0"
|
|
|
|
assert_equal "pkg", d.name
|
|
assert_equal req("> 1.0"), d.requirement
|
|
end
|
|
|
|
def test_initialize_type_bad
|
|
e = assert_raise ArgumentError do
|
|
Gem::Dependency.new "monkey" => "1.0"
|
|
end
|
|
|
|
assert_equal 'dependency name must be a String, was {"monkey"=>"1.0"}',
|
|
e.message
|
|
end
|
|
|
|
def test_initialize_double
|
|
d = dep "pkg", "> 1.0", "< 2.0"
|
|
assert_equal req("> 1.0", "< 2.0"), d.requirement
|
|
end
|
|
|
|
def test_initialize_empty
|
|
d = dep "pkg"
|
|
assert_equal req(">= 0"), d.requirement
|
|
end
|
|
|
|
def test_initialize_prerelease
|
|
d = dep "d", "1.a"
|
|
|
|
assert d.prerelease?
|
|
|
|
d = dep "d", "= 1.a"
|
|
|
|
assert d.prerelease?
|
|
end
|
|
|
|
def test_initialize_type
|
|
assert_equal :runtime, dep("pkg").type
|
|
assert_equal :development, dep("pkg", [], :development).type
|
|
|
|
assert_raise ArgumentError do
|
|
dep "pkg", :sometimes
|
|
end
|
|
end
|
|
|
|
def test_initialize_version
|
|
d = dep "pkg", v("2")
|
|
assert_equal req("= 2"), d.requirement
|
|
end
|
|
|
|
def test_equals2
|
|
o = dep "other"
|
|
d = dep "pkg", "> 1.0"
|
|
d1 = dep "pkg", "> 1.1"
|
|
|
|
assert_equal d, d.dup
|
|
assert_equal d.dup, d
|
|
|
|
refute_equal d, d1
|
|
refute_equal d1, d
|
|
|
|
refute_equal d, o
|
|
refute_equal o, d
|
|
|
|
refute_equal d, Object.new
|
|
refute_equal Object.new, d
|
|
end
|
|
|
|
def test_equals2_type
|
|
refute_equal dep("pkg", :runtime), dep("pkg", :development)
|
|
end
|
|
|
|
def test_equals_tilde
|
|
d = dep "a", "0"
|
|
|
|
assert_match d, d, "match self"
|
|
assert_match dep("a", ">= 0"), d, "match version exact"
|
|
assert_match dep("a", ">= 0"), dep("a", "1"), "match version"
|
|
refute_match dep("a"), Object.new
|
|
|
|
Gem::Deprecate.skip_during do
|
|
assert_match dep(/a/, ">= 0"), d, "match simple regexp"
|
|
assert_match dep(/a|b/, ">= 0"), d, "match scary regexp"
|
|
refute_match dep(/a/), dep("b")
|
|
end
|
|
end
|
|
|
|
def test_equals_tilde_escape
|
|
refute_match dep("a|b"), dep("a", "1")
|
|
Gem::Deprecate.skip_during do
|
|
assert_match dep(/a|b/), dep("a", "1")
|
|
end
|
|
end
|
|
|
|
def test_equals_tilde_object
|
|
o = Object.new
|
|
def o.name ; "a" end
|
|
def o.version ; "0" end
|
|
|
|
assert_match dep("a"), o
|
|
end
|
|
|
|
def test_equals_tilde_spec
|
|
assert_match dep("a", ">= 0"), spec("a", "0")
|
|
assert_match dep("a", "1"), spec("a", "1")
|
|
Gem::Deprecate.skip_during do
|
|
assert_match dep(/a/, ">= 0"), spec("a", "0")
|
|
assert_match dep(/a|b/, ">= 0"), spec("b", "0")
|
|
refute_match dep(/a/, ">= 0"), spec("b", "0")
|
|
end
|
|
end
|
|
|
|
def test_hash
|
|
d = dep "pkg", "1.0"
|
|
|
|
assert_equal d.hash, d.dup.hash
|
|
assert_equal d.dup.hash, d.hash
|
|
|
|
refute_equal dep("pkg", "1.0").hash, dep("pkg", "2.0").hash, "requirement"
|
|
refute_equal dep("pkg", "1.0").hash, dep("abc", "1.0").hash, "name"
|
|
refute_equal dep("pkg", :development), dep("pkg", :runtime), "type"
|
|
end
|
|
|
|
def test_match_eh_name_tuple
|
|
a_dep = dep "a"
|
|
|
|
a_tup = Gem::NameTuple.new "a", 1
|
|
b_tup = Gem::NameTuple.new "b", 2
|
|
c_tup = Gem::NameTuple.new "c", "2.a"
|
|
|
|
assert a_dep.match? a_tup
|
|
refute a_dep.match? b_tup
|
|
|
|
b_dep = dep "b", ">= 3"
|
|
|
|
refute b_dep.match? b_tup
|
|
|
|
c_dep = dep "c", ">= 1"
|
|
|
|
refute c_dep.match? c_tup
|
|
|
|
c_dep = dep "c"
|
|
|
|
refute c_dep.match? c_tup
|
|
|
|
c_dep = dep "c", "2.a"
|
|
|
|
assert c_dep.match? c_tup
|
|
end
|
|
|
|
def test_match_eh_allow_prerelease
|
|
a_dep = dep "a"
|
|
|
|
a_tup = Gem::NameTuple.new "a", 1
|
|
b_tup = Gem::NameTuple.new "b", 2
|
|
c_tup = Gem::NameTuple.new "c", "2.a"
|
|
|
|
assert a_dep.match? a_tup, nil, true
|
|
refute a_dep.match? b_tup, nil, true
|
|
|
|
b_dep = dep "b", ">= 3"
|
|
|
|
refute b_dep.match? b_tup, nil, true
|
|
|
|
c_dep = dep "c", ">= 1"
|
|
|
|
assert c_dep.match? c_tup, nil, true
|
|
|
|
c_dep = dep "c"
|
|
|
|
assert c_dep.match? c_tup, nil, true
|
|
|
|
c_dep = dep "c", "2.a"
|
|
|
|
assert c_dep.match? c_tup, nil, true
|
|
end
|
|
|
|
def test_match_eh_specification
|
|
a_dep = dep "a"
|
|
|
|
a_spec = util_spec "a", 1
|
|
b_spec = util_spec "b", 2
|
|
c_spec = util_spec "c", "2.a"
|
|
|
|
assert a_dep.match? a_spec
|
|
refute a_dep.match? b_spec
|
|
|
|
b_dep = dep "b", ">= 3"
|
|
|
|
refute b_dep.match? b_spec
|
|
|
|
c_dep = dep "c", ">= 1"
|
|
|
|
refute c_dep.match? c_spec
|
|
|
|
c_dep = dep "c"
|
|
|
|
refute c_dep.match? c_spec
|
|
|
|
c_dep = dep "c", "2.a"
|
|
|
|
assert c_dep.match? c_spec
|
|
end
|
|
|
|
def test_matches_spec_eh
|
|
spec = util_spec "b", 2
|
|
|
|
refute dep("a") .matches_spec?(spec), "name mismatch"
|
|
assert dep("b") .matches_spec?(spec), "name match"
|
|
refute dep("b", "= 1") .matches_spec?(spec), "requirement mismatch"
|
|
assert dep("b", "~> 2").matches_spec?(spec), "requirement match"
|
|
end
|
|
|
|
def test_matches_spec_eh_prerelease
|
|
spec = util_spec "b", "2.1.a"
|
|
|
|
refute dep("a") .matches_spec?(spec), "name mismatch"
|
|
assert dep("b") .matches_spec?(spec), "name match"
|
|
refute dep("b", "= 1") .matches_spec?(spec), "requirement mismatch"
|
|
assert dep("b", "~> 2") .matches_spec?(spec), "requirement match"
|
|
assert dep("b", "~> 2.a").matches_spec?(spec), "prerelease requirement"
|
|
end
|
|
|
|
def test_merge
|
|
a1 = dep "a", "~> 1.0"
|
|
a2 = dep "a", "= 1.0"
|
|
|
|
a3 = a1.merge a2
|
|
|
|
assert_equal dep("a", "~> 1.0", "= 1.0"), a3
|
|
end
|
|
|
|
def test_merge_default
|
|
a1 = dep "a"
|
|
a2 = dep "a", "1"
|
|
|
|
a3 = a1.merge a2
|
|
|
|
assert_equal dep("a", "1"), a3
|
|
end
|
|
|
|
def test_merge_name_mismatch
|
|
a = dep "a"
|
|
b = dep "b"
|
|
|
|
e = assert_raise ArgumentError do
|
|
a.merge b
|
|
end
|
|
|
|
assert_equal "a (>= 0) and b (>= 0) have different names",
|
|
e.message
|
|
end
|
|
|
|
def test_merge_other_default
|
|
a1 = dep "a", "1"
|
|
a2 = dep "a"
|
|
|
|
a3 = a1.merge a2
|
|
|
|
assert_equal dep("a", "1"), a3
|
|
end
|
|
|
|
def test_prerelease_eh
|
|
d = dep "pkg", "= 1"
|
|
|
|
refute d.prerelease?
|
|
|
|
d.prerelease = true
|
|
|
|
assert d.prerelease?
|
|
|
|
d = dep "pkg", "= 1.a"
|
|
|
|
assert d.prerelease?
|
|
|
|
d.prerelease = false
|
|
|
|
assert d.prerelease?
|
|
|
|
d = dep "pkg", "> 1.a", "> 2"
|
|
|
|
assert d.prerelease?
|
|
end
|
|
|
|
def test_specific
|
|
refute dep("a", "> 1").specific?
|
|
|
|
assert dep("a", "= 1").specific?
|
|
end
|
|
|
|
def test_to_spec
|
|
a_1 = util_spec "a", "1"
|
|
a_2 = util_spec "a", "2"
|
|
|
|
a_dep = dep "a", ">= 0"
|
|
install_specs a_1, a_2
|
|
|
|
assert_equal a_2, a_dep.to_spec
|
|
end
|
|
|
|
def test_to_spec_prerelease
|
|
a_1 = util_spec "a", "1"
|
|
a_1_1_a = util_spec "a", "1.1.a"
|
|
|
|
a_dep = dep "a", ">= 0"
|
|
install_specs a_1, a_1_1_a
|
|
|
|
assert_equal a_1, a_dep.to_spec
|
|
|
|
a_pre_dep = dep "a", ">= 0"
|
|
a_pre_dep.prerelease = true
|
|
|
|
assert_equal a_1_1_a, a_pre_dep.to_spec
|
|
end
|
|
|
|
def test_to_specs_suggests_other_versions
|
|
a = util_spec "a", "1.0"
|
|
install_specs a
|
|
|
|
a_file = File.join a.gem_dir, "lib", "a_file.rb"
|
|
|
|
write_file a_file do |io|
|
|
io.puts "# a_file.rb"
|
|
end
|
|
|
|
dep = Gem::Dependency.new "a", "= 2.0"
|
|
|
|
e = assert_raise Gem::MissingSpecVersionError do
|
|
dep.to_specs
|
|
end
|
|
|
|
assert_match "Could not find 'a' (= 2.0) - did find: [a-1.0]", e.message
|
|
end
|
|
|
|
def test_to_specs_respects_bundler_version
|
|
b = util_spec "bundler", "2.0.0.pre.1"
|
|
b_1 = util_spec "bundler", "1"
|
|
install_specs b, b_1
|
|
|
|
b_file = File.join b.gem_dir, "lib", "bundler", "setup.rb"
|
|
|
|
write_file b_file do |io|
|
|
io.puts "# setup.rb"
|
|
end
|
|
|
|
dep = Gem::Dependency.new "bundler", ">= 0.a"
|
|
|
|
assert_equal [b, b_1], dep.to_specs
|
|
|
|
Gem::BundlerVersionFinder.stub(:bundler_version, Gem::Version.new("1")) do
|
|
assert_equal [b_1, b], dep.to_specs
|
|
end
|
|
|
|
Gem::BundlerVersionFinder.stub(:bundler_version, Gem::Version.new("2.0.0.pre.1")) do
|
|
assert_equal [b, b_1], dep.to_specs
|
|
end
|
|
end
|
|
|
|
def test_to_specs_indicates_total_gem_set_size
|
|
a = util_spec "a", "1.0"
|
|
install_specs a
|
|
|
|
a_file = File.join a.gem_dir, "lib", "a_file.rb"
|
|
|
|
write_file a_file do |io|
|
|
io.puts "# a_file.rb"
|
|
end
|
|
|
|
dep = Gem::Dependency.new "b", "= 2.0"
|
|
|
|
e = assert_raise Gem::MissingSpecError do
|
|
dep.to_specs
|
|
end
|
|
|
|
assert_match "Could not find 'b' (= 2.0) among 1 total gem(s)", e.message
|
|
end
|
|
|
|
def test_identity
|
|
assert_equal dep("a", "= 1").identity, :released
|
|
assert_equal dep("a", "= 1.a").identity, :complete
|
|
assert_equal dep("a", " >= 1.a").identity, :abs_latest
|
|
assert_equal dep("a").identity, :latest
|
|
end
|
|
end
|