2
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
# See LICENSE.txt for permissions.
8
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
9
require 'rubygems/version'
11
class TestGemRequirement < RubyGemTestCase
16
@r1_2 = Gem::Requirement.new '= 1.2'
17
@r1_3 = Gem::Requirement.new '= 1.3'
21
r = Gem::Requirement.new '2'
22
assert_equal '= 2', r.to_s, 'String'
24
r = Gem::Requirement.new %w[2]
25
assert_equal '= 2', r.to_s, 'Array of Strings'
27
r = Gem::Requirement.new Gem::Version.new('2')
28
assert_equal '= 2', r.to_s, 'Gem::Version'
32
assert_equal @r1_2, @r1_2.dup
33
assert_equal @r1_2.dup, @r1_2
35
assert_not_equal @r1_3, @r1_2
36
assert_not_equal @r1_2, @r1_3
38
assert_not_equal Object.new, @r1_2
39
assert_not_equal @r1_2, Object.new
43
assert_equal @r1_2.hash, @r1_2.dup.hash
44
assert_equal @r1_2.dup.hash, @r1_2.hash
46
assert_not_equal @r1_2.hash, @r1_3.hash
47
assert_not_equal @r1_3.hash, @r1_2.hash
50
# We may get some old gems that have requirements in old formats.
51
# We need to be able to handle those old requirements by normalizing
52
# them to the latest format.
53
def test_normalization
55
yamldep = %{--- !ruby/object:Gem::Requirement
62
dep = YAML.load(yamldep)
64
assert_equal ">= 1.0.4", dep.to_s
68
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse(' 1')
70
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('= 1')
71
assert_equal ['>', Gem::Version.new(1)], @r1_2.parse('> 1')
73
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse('=')
74
assert_equal ['>', Gem::Version.new(0)], @r1_2.parse('>')
76
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse("=\n1")
77
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse("=\njunk")
79
assert_equal ['=', Gem::Version.new(2)], @r1_2.parse(Gem::Version.new('2'))
82
def test_parse_illformed
83
e = assert_raise ArgumentError do
87
assert_equal 'Illformed requirement [nil]', e.message
89
e = assert_raise ArgumentError do
93
assert_equal 'Illformed requirement [""]', e.message
96
def test_satisfied_by_eh_bang_equal
97
r1_2 = Gem::Requirement.new '!= 1.2'
98
v1_1 = Gem::Version.new '1.1'
99
v1_2 = Gem::Version.new '1.2'
100
v1_3 = Gem::Version.new '1.3'
102
assert_equal true, r1_2.satisfied_by?(nil)
103
assert_equal true, r1_2.satisfied_by?(v1_1)
104
assert_equal false, r1_2.satisfied_by?(v1_2)
105
assert_equal true, r1_2.satisfied_by?(v1_3)
108
def test_satisfied_by_eh_blank
109
r1_2 = Gem::Requirement.new '1.2'
110
v1_1 = Gem::Version.new '1.1'
111
v1_2 = Gem::Version.new '1.2'
112
v1_3 = Gem::Version.new '1.3'
114
assert_equal false, r1_2.satisfied_by?(nil)
115
assert_equal false, r1_2.satisfied_by?(v1_1)
116
assert_equal true, r1_2.satisfied_by?(v1_2)
117
assert_equal false, r1_2.satisfied_by?(v1_3)
120
def test_satisfied_by_eh_equal
122
v1_1 = Gem::Version.new '1.1'
123
v1_2 = Gem::Version.new '1.2'
124
v1_3 = Gem::Version.new '1.3'
126
assert_equal false, r1_2.satisfied_by?(nil)
127
assert_equal false, r1_2.satisfied_by?(v1_1)
128
assert_equal true, r1_2.satisfied_by?(v1_2)
129
assert_equal false, r1_2.satisfied_by?(v1_3)
132
def test_satisfied_by_eh_gt
133
r1_2 = Gem::Requirement.new '> 1.2'
134
v1_1 = Gem::Version.new '1.1'
135
v1_2 = Gem::Version.new '1.2'
136
v1_3 = Gem::Version.new '1.3'
138
assert_equal false, r1_2.satisfied_by?(v1_1)
139
assert_equal false, r1_2.satisfied_by?(v1_2)
140
assert_equal true, r1_2.satisfied_by?(v1_3)
142
assert_raise NoMethodError do
143
assert_equal true, r1_2.satisfied_by?(nil)
147
def test_satisfied_by_eh_gte
148
r1_2 = Gem::Requirement.new '>= 1.2'
149
v1_1 = Gem::Version.new '1.1'
150
v1_2 = Gem::Version.new '1.2'
151
v1_3 = Gem::Version.new '1.3'
153
assert_equal false, r1_2.satisfied_by?(v1_1)
154
assert_equal true, r1_2.satisfied_by?(v1_2)
155
assert_equal true, r1_2.satisfied_by?(v1_3)
157
assert_raise NoMethodError do
158
assert_equal true, r1_2.satisfied_by?(nil)
162
def test_satisfied_by_eh_list
163
r = Gem::Requirement.create(['> 1.1', '< 1.3'])
164
v1_1 = Gem::Version.new '1.1'
165
v1_2 = Gem::Version.new '1.2'
166
v1_3 = Gem::Version.new '1.3'
168
assert_equal false, r.satisfied_by?(v1_1)
169
assert_equal true, r.satisfied_by?(v1_2)
170
assert_equal false, r.satisfied_by?(v1_3)
172
assert_raise NoMethodError do
173
assert_equal true, r.satisfied_by?(nil)
177
def test_satisfied_by_eh_lt
178
r1_2 = Gem::Requirement.new '< 1.2'
179
v1_1 = Gem::Version.new '1.1'
180
v1_2 = Gem::Version.new '1.2'
181
v1_3 = Gem::Version.new '1.3'
183
assert_equal true, r1_2.satisfied_by?(v1_1)
184
assert_equal false, r1_2.satisfied_by?(v1_2)
185
assert_equal false, r1_2.satisfied_by?(v1_3)
187
assert_raise NoMethodError do
188
assert_equal true, r1_2.satisfied_by?(nil)
192
def test_satisfied_by_eh_lte
193
r1_2 = Gem::Requirement.new '<= 1.2'
194
v1_1 = Gem::Version.new '1.1'
195
v1_2 = Gem::Version.new '1.2'
196
v1_3 = Gem::Version.new '1.3'
198
assert_equal true, r1_2.satisfied_by?(v1_1)
199
assert_equal true, r1_2.satisfied_by?(v1_2)
200
assert_equal false, r1_2.satisfied_by?(v1_3)
202
assert_raise NoMethodError do
203
assert_equal true, r1_2.satisfied_by?(nil)
207
def test_satisfied_by_eh_tilde_gt
208
r1_2 = Gem::Requirement.new '~> 1.2'
209
v1_1 = Gem::Version.new '1.1'
210
v1_2 = Gem::Version.new '1.2'
211
v1_3 = Gem::Version.new '1.3'
213
assert_equal false, r1_2.satisfied_by?(v1_1)
214
assert_equal true, r1_2.satisfied_by?(v1_2)
215
assert_equal true, r1_2.satisfied_by?(v1_3)
217
assert_raise NoMethodError do
218
assert_equal true, r1_2.satisfied_by?(nil)