mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Please see entries of 2.6.3 on https://github.com/rubygems/rubygems/blob/master/History.txt git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			362 lines
		
	
	
	
		
			7.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			362 lines
		
	
	
	
		
			7.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
require 'rubygems/test_case'
 | 
						|
require 'rubygems/dependency'
 | 
						|
 | 
						|
class TestGemDependency < Gem::TestCase
 | 
						|
 | 
						|
  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_raises 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_raises 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_raises 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_raises 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_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_raises Gem::MissingSpecError do
 | 
						|
      dep.to_specs
 | 
						|
    end
 | 
						|
 | 
						|
    assert_match "Could not find 'b' (= 2.0) among 1 total gem(s)", e.message
 | 
						|
  end
 | 
						|
 | 
						|
 | 
						|
end
 | 
						|
 |