ruby--ruby/test/rubygems/test_gem_requirement.rb

223 lines
5.9 KiB
Ruby

#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
require 'rubygems/version'
class TestGemRequirement < RubyGemTestCase
def setup
super
@r1_2 = Gem::Requirement.new '= 1.2'
@r1_3 = Gem::Requirement.new '= 1.3'
end
def test_initialize
r = Gem::Requirement.new '2'
assert_equal '= 2', r.to_s, 'String'
r = Gem::Requirement.new %w[2]
assert_equal '= 2', r.to_s, 'Array of Strings'
r = Gem::Requirement.new Gem::Version.new('2')
assert_equal '= 2', r.to_s, 'Gem::Version'
end
def test_equals2
assert_equal @r1_2, @r1_2.dup
assert_equal @r1_2.dup, @r1_2
refute_equal @r1_3, @r1_2
refute_equal @r1_2, @r1_3
refute_equal Object.new, @r1_2
refute_equal @r1_2, Object.new
end
def test_hash
assert_equal @r1_2.hash, @r1_2.dup.hash
assert_equal @r1_2.dup.hash, @r1_2.hash
refute_equal @r1_2.hash, @r1_3.hash
refute_equal @r1_3.hash, @r1_2.hash
end
# We may get some old gems that have requirements in old formats.
# We need to be able to handle those old requirements by normalizing
# them to the latest format.
def test_normalization
require 'yaml'
yamldep = %{--- !ruby/object:Gem::Requirement
nums:
- 1
- 0
- 4
op: ">="
version: ">= 1.0.4"}
dep = YAML.load(yamldep)
dep.normalize
assert_equal ">= 1.0.4", dep.to_s
end
def test_parse
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse(' 1')
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('= 1')
assert_equal ['>', Gem::Version.new(1)], @r1_2.parse('> 1')
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse('=')
assert_equal ['>', Gem::Version.new(0)], @r1_2.parse('>')
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse("=\n1")
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse("=\njunk")
assert_equal ['=', Gem::Version.new(2)], @r1_2.parse(Gem::Version.new('2'))
end
def test_parse_illformed
e = assert_raises ArgumentError do
@r1_2.parse(nil)
end
assert_equal 'Illformed requirement [nil]', e.message
e = assert_raises ArgumentError do
@r1_2.parse('')
end
assert_equal 'Illformed requirement [""]', e.message
end
def test_satisfied_by_eh_bang_equal
r1_2 = Gem::Requirement.new '!= 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal true, r1_2.satisfied_by?(nil)
assert_equal true, r1_2.satisfied_by?(v1_1)
assert_equal false, r1_2.satisfied_by?(v1_2)
assert_equal true, r1_2.satisfied_by?(v1_3)
end
def test_satisfied_by_eh_blank
r1_2 = Gem::Requirement.new '1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r1_2.satisfied_by?(nil)
assert_equal false, r1_2.satisfied_by?(v1_1)
assert_equal true, r1_2.satisfied_by?(v1_2)
assert_equal false, r1_2.satisfied_by?(v1_3)
end
def test_satisfied_by_eh_equal
r1_2 = @r1_2
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r1_2.satisfied_by?(nil)
assert_equal false, r1_2.satisfied_by?(v1_1)
assert_equal true, r1_2.satisfied_by?(v1_2)
assert_equal false, r1_2.satisfied_by?(v1_3)
end
def test_satisfied_by_eh_gt
r1_2 = Gem::Requirement.new '> 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r1_2.satisfied_by?(v1_1)
assert_equal false, r1_2.satisfied_by?(v1_2)
assert_equal true, r1_2.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r1_2.satisfied_by?(nil)
end
end
def test_satisfied_by_eh_gte
r1_2 = Gem::Requirement.new '>= 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r1_2.satisfied_by?(v1_1)
assert_equal true, r1_2.satisfied_by?(v1_2)
assert_equal true, r1_2.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r1_2.satisfied_by?(nil)
end
end
def test_satisfied_by_eh_list
r = Gem::Requirement.create(['> 1.1', '< 1.3'])
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r.satisfied_by?(v1_1)
assert_equal true, r.satisfied_by?(v1_2)
assert_equal false, r.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r.satisfied_by?(nil)
end
end
def test_satisfied_by_eh_lt
r1_2 = Gem::Requirement.new '< 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal true, r1_2.satisfied_by?(v1_1)
assert_equal false, r1_2.satisfied_by?(v1_2)
assert_equal false, r1_2.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r1_2.satisfied_by?(nil)
end
end
def test_satisfied_by_eh_lte
r1_2 = Gem::Requirement.new '<= 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal true, r1_2.satisfied_by?(v1_1)
assert_equal true, r1_2.satisfied_by?(v1_2)
assert_equal false, r1_2.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r1_2.satisfied_by?(nil)
end
end
def test_satisfied_by_eh_tilde_gt
r1_2 = Gem::Requirement.new '~> 1.2'
v1_1 = Gem::Version.new '1.1'
v1_2 = Gem::Version.new '1.2'
v1_3 = Gem::Version.new '1.3'
assert_equal false, r1_2.satisfied_by?(v1_1)
assert_equal true, r1_2.satisfied_by?(v1_2)
assert_equal true, r1_2.satisfied_by?(v1_3)
assert_raises NoMethodError do
assert_equal true, r1_2.satisfied_by?(nil)
end
end
end