2
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4
# See LICENSE.txt for permissions.
7
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
8
require 'rubygems/version'
1
require_relative 'gemutilities'
2
require "rubygems/requirement"
10
4
class TestGemRequirement < RubyGemTestCase
15
@r1_2 = Gem::Requirement.new '= 1.2'
16
@r1_3 = Gem::Requirement.new '= 1.3'
11
refute_requirement_equal "= 1.2", "= 1.3"
12
refute_requirement_equal "= 1.3", "= 1.2"
14
refute_equal Object.new, req("= 1.2")
15
refute_equal req("= 1.2"), Object.new
19
18
def test_initialize
20
r = Gem::Requirement.new '2'
21
assert_equal '= 2', r.to_s, 'String'
23
r = Gem::Requirement.new %w[2]
24
assert_equal '= 2', r.to_s, 'Array of Strings'
26
r = Gem::Requirement.new Gem::Version.new('2')
27
assert_equal '= 2', r.to_s, 'Gem::Version'
31
assert_equal @r1_2, @r1_2.dup
32
assert_equal @r1_2.dup, @r1_2
34
refute_equal @r1_3, @r1_2
35
refute_equal @r1_2, @r1_3
37
refute_equal Object.new, @r1_2
38
refute_equal @r1_2, Object.new
42
assert_equal @r1_2.hash, @r1_2.dup.hash
43
assert_equal @r1_2.dup.hash, @r1_2.hash
45
refute_equal @r1_2.hash, @r1_3.hash
46
refute_equal @r1_3.hash, @r1_2.hash
49
# We may get some old gems that have requirements in old formats.
50
# We need to be able to handle those old requirements by normalizing
51
# them to the latest format.
52
def test_normalization
54
yamldep = %{--- !ruby/object:Gem::Requirement
61
dep = YAML.load(yamldep)
63
assert_equal ">= 1.0.4", dep.to_s
19
assert_requirement_equal "= 2", "2"
20
assert_requirement_equal "= 2", ["2"]
21
assert_requirement_equal "= 2", v(2)
24
def test_class_available_as_gem_version_requirement
25
assert_same Gem::Requirement, Gem::Version::Requirement,
26
"Gem::Version::Requirement is aliased for old YAML compatibility."
67
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse(' 1')
69
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('= 1')
70
assert_equal ['>', Gem::Version.new(1)], @r1_2.parse('> 1')
72
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse('=')
73
assert_equal ['>', Gem::Version.new(0)], @r1_2.parse('>')
75
assert_equal ['=', Gem::Version.new(1)], @r1_2.parse("=\n1")
76
assert_equal ['=', Gem::Version.new(0)], @r1_2.parse("=\njunk")
78
assert_equal ['=', Gem::Version.new(2)], @r1_2.parse(Gem::Version.new('2'))
30
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse(' 1')
31
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1')
32
assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1')
33
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
35
assert_equal ['=', Gem::Version.new(2)],
36
Gem::Requirement.parse(Gem::Version.new('2'))
81
def test_parse_illformed
82
40
e = assert_raises ArgumentError do
41
Gem::Requirement.parse nil
86
44
assert_equal 'Illformed requirement [nil]', e.message
88
46
e = assert_raises ArgumentError do
47
Gem::Requirement.parse ""
92
50
assert_equal 'Illformed requirement [""]', e.message
53
def test_prerelease_eh
62
r = req '> 1.a', '< 2'
95
67
def test_satisfied_by_eh_bang_equal
96
r1_2 = Gem::Requirement.new '!= 1.2'
97
v1_1 = Gem::Version.new '1.1'
98
v1_2 = Gem::Version.new '1.2'
99
v1_3 = Gem::Version.new '1.3'
101
assert_equal true, r1_2.satisfied_by?(nil)
102
assert_equal true, r1_2.satisfied_by?(v1_1)
103
assert_equal false, r1_2.satisfied_by?(v1_2)
104
assert_equal true, r1_2.satisfied_by?(v1_3)
70
assert_satisfied_by nil, r
71
assert_satisfied_by "1.1", r
72
refute_satisfied_by "1.2", r
73
assert_satisfied_by "1.3", r
107
76
def test_satisfied_by_eh_blank
108
r1_2 = Gem::Requirement.new '1.2'
109
v1_1 = Gem::Version.new '1.1'
110
v1_2 = Gem::Version.new '1.2'
111
v1_3 = Gem::Version.new '1.3'
113
assert_equal false, r1_2.satisfied_by?(nil)
114
assert_equal false, r1_2.satisfied_by?(v1_1)
115
assert_equal true, r1_2.satisfied_by?(v1_2)
116
assert_equal false, r1_2.satisfied_by?(v1_3)
79
refute_satisfied_by nil, r
80
refute_satisfied_by "1.1", r
81
assert_satisfied_by "1.2", r
82
refute_satisfied_by "1.3", r
119
85
def test_satisfied_by_eh_equal
121
v1_1 = Gem::Version.new '1.1'
122
v1_2 = Gem::Version.new '1.2'
123
v1_3 = Gem::Version.new '1.3'
125
assert_equal false, r1_2.satisfied_by?(nil)
126
assert_equal false, r1_2.satisfied_by?(v1_1)
127
assert_equal true, r1_2.satisfied_by?(v1_2)
128
assert_equal false, r1_2.satisfied_by?(v1_3)
88
refute_satisfied_by nil, r
89
refute_satisfied_by "1.1", r
90
assert_satisfied_by "1.2", r
91
refute_satisfied_by "1.3", r
131
94
def test_satisfied_by_eh_gt
132
r1_2 = Gem::Requirement.new '> 1.2'
133
v1_1 = Gem::Version.new '1.1'
134
v1_2 = Gem::Version.new '1.2'
135
v1_3 = Gem::Version.new '1.3'
137
assert_equal false, r1_2.satisfied_by?(v1_1)
138
assert_equal false, r1_2.satisfied_by?(v1_2)
139
assert_equal true, r1_2.satisfied_by?(v1_3)
97
refute_satisfied_by "1.1", r
98
refute_satisfied_by "1.2", r
99
assert_satisfied_by "1.3", r
141
101
assert_raises NoMethodError do
142
assert_equal true, r1_2.satisfied_by?(nil)
146
106
def test_satisfied_by_eh_gte
147
r1_2 = Gem::Requirement.new '>= 1.2'
148
v1_1 = Gem::Version.new '1.1'
149
v1_2 = Gem::Version.new '1.2'
150
v1_3 = Gem::Version.new '1.3'
152
assert_equal false, r1_2.satisfied_by?(v1_1)
153
assert_equal true, r1_2.satisfied_by?(v1_2)
154
assert_equal true, r1_2.satisfied_by?(v1_3)
109
refute_satisfied_by "1.1", r
110
assert_satisfied_by "1.2", r
111
assert_satisfied_by "1.3", r
156
113
assert_raises NoMethodError do
157
assert_equal true, r1_2.satisfied_by?(nil)
161
118
def test_satisfied_by_eh_list
162
r = Gem::Requirement.create(['> 1.1', '< 1.3'])
163
v1_1 = Gem::Version.new '1.1'
164
v1_2 = Gem::Version.new '1.2'
165
v1_3 = Gem::Version.new '1.3'
119
r = req "> 1.1", "< 1.3"
167
assert_equal false, r.satisfied_by?(v1_1)
168
assert_equal true, r.satisfied_by?(v1_2)
169
assert_equal false, r.satisfied_by?(v1_3)
121
refute_satisfied_by "1.1", r
122
assert_satisfied_by "1.2", r
123
refute_satisfied_by "1.3", r
171
125
assert_raises NoMethodError do
172
assert_equal true, r.satisfied_by?(nil)
176
130
def test_satisfied_by_eh_lt
177
r1_2 = Gem::Requirement.new '< 1.2'
178
v1_1 = Gem::Version.new '1.1'
179
v1_2 = Gem::Version.new '1.2'
180
v1_3 = Gem::Version.new '1.3'
182
assert_equal true, r1_2.satisfied_by?(v1_1)
183
assert_equal false, r1_2.satisfied_by?(v1_2)
184
assert_equal false, r1_2.satisfied_by?(v1_3)
133
assert_satisfied_by "1.1", r
134
refute_satisfied_by "1.2", r
135
refute_satisfied_by "1.3", r
186
137
assert_raises NoMethodError do
187
assert_equal true, r1_2.satisfied_by?(nil)
191
142
def test_satisfied_by_eh_lte
192
r1_2 = Gem::Requirement.new '<= 1.2'
193
v1_1 = Gem::Version.new '1.1'
194
v1_2 = Gem::Version.new '1.2'
195
v1_3 = Gem::Version.new '1.3'
197
assert_equal true, r1_2.satisfied_by?(v1_1)
198
assert_equal true, r1_2.satisfied_by?(v1_2)
199
assert_equal false, r1_2.satisfied_by?(v1_3)
145
assert_satisfied_by "1.1", r
146
assert_satisfied_by "1.2", r
147
refute_satisfied_by "1.3", r
201
149
assert_raises NoMethodError do
202
assert_equal true, r1_2.satisfied_by?(nil)
206
154
def test_satisfied_by_eh_tilde_gt
207
r1_2 = Gem::Requirement.new '~> 1.2'
208
v1_1 = Gem::Version.new '1.1'
209
v1_2 = Gem::Version.new '1.2'
210
v1_3 = Gem::Version.new '1.3'
212
assert_equal false, r1_2.satisfied_by?(v1_1)
213
assert_equal true, r1_2.satisfied_by?(v1_2)
214
assert_equal true, r1_2.satisfied_by?(v1_3)
157
refute_satisfied_by "1.1", r
158
assert_satisfied_by "1.2", r
159
assert_satisfied_by "1.3", r
216
161
assert_raises NoMethodError do
217
assert_equal true, r1_2.satisfied_by?(nil)
166
def test_satisfied_by_eh_good
167
assert_satisfied_by "0.2.33", "= 0.2.33"
168
assert_satisfied_by "0.2.34", "> 0.2.33"
169
assert_satisfied_by "1.0", "= 1.0"
170
assert_satisfied_by "1.0", "1.0"
171
assert_satisfied_by "1.8.2", "> 1.8.0"
172
assert_satisfied_by "1.112", "> 1.111"
173
assert_satisfied_by "0.2", "> 0.0.0"
174
assert_satisfied_by "0.0.0.0.0.2", "> 0.0.0"
175
assert_satisfied_by "0.0.1.0", "> 0.0.0.1"
176
assert_satisfied_by "10.3.2", "> 9.3.2"
177
assert_satisfied_by "1.0.0.0", "= 1.0"
178
assert_satisfied_by "10.3.2", "!= 9.3.4"
179
assert_satisfied_by "10.3.2", "> 9.3.2"
180
assert_satisfied_by "10.3.2", "> 9.3.2"
181
assert_satisfied_by " 9.3.2", ">= 9.3.2"
182
assert_satisfied_by "9.3.2 ", ">= 9.3.2"
183
assert_satisfied_by "", "= 0"
184
assert_satisfied_by "", "< 0.1"
185
assert_satisfied_by " ", "< 0.1 "
186
assert_satisfied_by "", " < 0.1"
187
assert_satisfied_by " ", "> 0.a "
188
assert_satisfied_by "", " > 0.a"
189
assert_satisfied_by "3.1", "< 3.2.rc1"
190
assert_satisfied_by "3.2.0", "> 3.2.0.rc1"
191
assert_satisfied_by "3.2.0.rc2", "> 3.2.0.rc1"
192
assert_satisfied_by "3.0.rc2", "< 3.0"
193
assert_satisfied_by "3.0.rc2", "< 3.0.0"
194
assert_satisfied_by "3.0.rc2", "< 3.0.1"
197
def test_illformed_requirements
198
[ ">>> 1.3.5", "> blah" ].each do |rq|
199
assert_raises ArgumentError, "req [#{rq}] should fail" do
200
Gem::Requirement.new rq
205
def test_satisfied_by_eh_boxed
206
refute_satisfied_by "1.3", "~> 1.4"
207
assert_satisfied_by "1.4", "~> 1.4"
208
assert_satisfied_by "1.5", "~> 1.4"
209
refute_satisfied_by "2.0", "~> 1.4"
211
refute_satisfied_by "1.3", "~> 1.4.4"
212
refute_satisfied_by "1.4", "~> 1.4.4"
213
assert_satisfied_by "1.4.4", "~> 1.4.4"
214
assert_satisfied_by "1.4.5", "~> 1.4.4"
215
refute_satisfied_by "1.5", "~> 1.4.4"
216
refute_satisfied_by "2.0", "~> 1.4.4"
218
refute_satisfied_by "1.1.pre", "~> 1.0.0"
219
assert_satisfied_by "1.1.pre", "~> 1.1"
220
refute_satisfied_by "2.0.a", "~> 1.0"
221
assert_satisfied_by "2.0.a", "~> 2.0"
224
def test_satisfied_by_eh_multiple
225
req = [">= 1.4", "<= 1.6", "!= 1.5"]
227
refute_satisfied_by "1.3", req
228
assert_satisfied_by "1.4", req
229
refute_satisfied_by "1.5", req
230
assert_satisfied_by "1.6", req
231
refute_satisfied_by "1.7", req
232
refute_satisfied_by "2.0", req
235
def test_satisfied_by_boxed
236
refute_satisfied_by "1.3", "~> 1.4"
237
assert_satisfied_by "1.4", "~> 1.4"
238
assert_satisfied_by "1.5", "~> 1.4"
239
refute_satisfied_by "2.0", "~> 1.4"
241
refute_satisfied_by "1.3", "~> 1.4.4"
242
refute_satisfied_by "1.4", "~> 1.4.4"
243
assert_satisfied_by "1.4.4", "~> 1.4.4"
244
assert_satisfied_by "1.4.5", "~> 1.4.4"
245
refute_satisfied_by "1.5", "~> 1.4.4"
246
refute_satisfied_by "2.0", "~> 1.4.4"
250
refute_satisfied_by "", "> 0.1"
251
refute_satisfied_by "1.2.3", "!= 1.2.3"
252
refute_satisfied_by "1.2.003.0.0", "!= 1.02.3"
253
refute_satisfied_by "4.5.6", "< 1.2.3"
254
refute_satisfied_by "1.0", "> 1.1"
255
refute_satisfied_by "", "= 0.1"
256
refute_satisfied_by "1.1.1", "> 1.1.1"
257
refute_satisfied_by "1.2", "= 1.1"
258
refute_satisfied_by "1.40", "= 1.1"
259
refute_satisfied_by "1.3", "= 1.40"
260
refute_satisfied_by "9.3.3", "<= 9.3.2"
261
refute_satisfied_by "9.3.1", ">= 9.3.2"
262
refute_satisfied_by "9.3.03", "<= 9.3.2"
263
refute_satisfied_by "1.0.0.1", "= 1.0"
266
# Assert that two requirements are equal. Handles Gem::Requirements,
267
# strings, arrays, numbers, and versions.
269
def assert_requirement_equal expected, actual
270
assert_equal req(expected), req(actual)
273
# Assert that +version+ satisfies +requirement+.
275
def assert_satisfied_by version, requirement
276
assert req(requirement).satisfied_by?(v(version)),
277
"#{requirement} is satisfied by #{version}"
280
# Refute the assumption that two requirements are equal.
282
def refute_requirement_equal unexpected, actual
283
refute_equal req(unexpected), req(actual)
286
# Refute the assumption that +version+ satisfies +requirement+.
288
def refute_satisfied_by version, requirement
289
refute req(requirement).satisfied_by?(v(version)),
290
"#{requirement} is not satisfied by #{version}"