~ubuntu-branches/ubuntu/quantal/ruby1.9.1/quantal

« back to all changes in this revision

Viewing changes to test/rubygems/test_gem_requirement.rb

  • Committer: Bazaar Package Importer
  • Author(s): Lucas Nussbaum
  • Date: 2010-07-31 17:08:39 UTC
  • mfrom: (1.1.4 upstream) (8.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100731170839-j034dmpdqt1cc4p6
Tags: 1.9.2~svn28788-1
* New release based on upstream snapshot from the 1.9.2 branch,
  after 1.9.2 RC2. That branch is (supposed to be) binary-compatible
  with the 1.9.1 branch.
  + Builds fine on i386. Closes: #580852.
* Upgrade to Standards-Version: 3.9.1. No changes needed.
* Updated generated incs.
* Patches that still need work:
  + Unclear status, need more investigation:
   090729_fix_Makefile_deps.dpatch
   090803_exclude_rdoc.dpatch
   203_adjust_base_of_search_path.dpatch
   902_define_YAML_in_yaml_stringio.rb.dpatch
   919_common.mk_tweaks.dpatch
   931_libruby_suffix.dpatch
   940_test_thread_mutex_sync_shorter.dpatch
  + Maybe not needed anymore, keeping but not applying.
   102_skip_test_copy_stream.dpatch (test doesn't block anymore?)
   104_skip_btest_io.dpatch (test doesn't block anymore?)
   201_gem_prelude.dpatch (we don't use that rubygems anyway?)
   202_gem_default_dir.dpatch (we don't use that rubygems anyway?)
   940_test_file_exhaustive_fails_as_root.dpatch
   940_test_priority_fails.dpatch
   100518_load_libc_libm.dpatch
* Add disable-tests.diff: disable some tests that cause failures on FreeBSD.
  Closes: #590002, #543805, #542927.
* However, many new failures on FreeBSD. Since that version is still an
  improvement, add the check that makes test suite failures non-fatal on
  FreeBSD again. That still needs to be investigated.
* Re-add 903_skip_base_ruby_check.dpatch
* Add build-dependency on ruby1.8 and drop all pre-generated files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#--
2
 
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
 
# All rights reserved.
4
 
# See LICENSE.txt for permissions.
5
 
#++
6
 
 
7
 
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
8
 
require 'rubygems/version'
 
1
require_relative 'gemutilities'
 
2
require "rubygems/requirement"
9
3
 
10
4
class TestGemRequirement < RubyGemTestCase
11
5
 
12
 
  def setup
13
 
    super
14
 
 
15
 
    @r1_2 = Gem::Requirement.new '= 1.2'
16
 
    @r1_3 = Gem::Requirement.new '= 1.3'
 
6
  def test_equals2
 
7
    r = req "= 1.2"
 
8
    assert_equal r, r.dup
 
9
    assert_equal r.dup, r
 
10
 
 
11
    refute_requirement_equal "= 1.2", "= 1.3"
 
12
    refute_requirement_equal "= 1.3", "= 1.2"
 
13
 
 
14
    refute_equal Object.new, req("= 1.2")
 
15
    refute_equal req("= 1.2"), Object.new
17
16
  end
18
17
 
19
18
  def test_initialize
20
 
    r = Gem::Requirement.new '2'
21
 
    assert_equal '= 2', r.to_s, 'String'
22
 
 
23
 
    r = Gem::Requirement.new %w[2]
24
 
    assert_equal '= 2', r.to_s, 'Array of Strings'
25
 
 
26
 
    r = Gem::Requirement.new Gem::Version.new('2')
27
 
    assert_equal '= 2', r.to_s, 'Gem::Version'
28
 
  end
29
 
 
30
 
  def test_equals2
31
 
    assert_equal @r1_2, @r1_2.dup
32
 
    assert_equal @r1_2.dup, @r1_2
33
 
 
34
 
    refute_equal @r1_3, @r1_2
35
 
    refute_equal @r1_2, @r1_3
36
 
 
37
 
    refute_equal Object.new, @r1_2
38
 
    refute_equal @r1_2, Object.new
39
 
  end
40
 
 
41
 
  def test_hash
42
 
    assert_equal @r1_2.hash, @r1_2.dup.hash
43
 
    assert_equal @r1_2.dup.hash, @r1_2.hash
44
 
 
45
 
    refute_equal @r1_2.hash, @r1_3.hash
46
 
    refute_equal @r1_3.hash, @r1_2.hash
47
 
  end
48
 
 
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
53
 
    require 'yaml'
54
 
    yamldep = %{--- !ruby/object:Gem::Requirement
55
 
      nums:
56
 
        - 1
57
 
        - 0
58
 
        - 4
59
 
      op: ">="
60
 
      version: ">= 1.0.4"}
61
 
    dep = YAML.load(yamldep)
62
 
    dep.normalize
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)
 
22
  end
 
23
 
 
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."
64
27
  end
65
28
 
66
29
  def test_parse
67
 
    assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('  1')
68
 
 
69
 
    assert_equal ['=', Gem::Version.new(1)], @r1_2.parse('= 1')
70
 
    assert_equal ['>', Gem::Version.new(1)], @r1_2.parse('> 1')
71
 
 
72
 
    assert_equal ['=', Gem::Version.new(0)], @r1_2.parse('=')
73
 
    assert_equal ['>', Gem::Version.new(0)], @r1_2.parse('>')
74
 
 
75
 
    assert_equal ['=', Gem::Version.new(1)], @r1_2.parse("=\n1")
76
 
    assert_equal ['=', Gem::Version.new(0)], @r1_2.parse("=\njunk")
77
 
 
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")
 
34
 
 
35
    assert_equal ['=', Gem::Version.new(2)],
 
36
      Gem::Requirement.parse(Gem::Version.new('2'))
79
37
  end
80
38
 
81
 
  def test_parse_illformed
 
39
  def test_parse_bad
82
40
    e = assert_raises ArgumentError do
83
 
      @r1_2.parse(nil)
 
41
      Gem::Requirement.parse nil
84
42
    end
85
43
 
86
44
    assert_equal 'Illformed requirement [nil]', e.message
87
45
 
88
46
    e = assert_raises ArgumentError do
89
 
      @r1_2.parse('')
 
47
      Gem::Requirement.parse ""
90
48
    end
91
49
 
92
50
    assert_equal 'Illformed requirement [""]', e.message
93
51
  end
94
52
 
 
53
  def test_prerelease_eh
 
54
    r = req '= 1'
 
55
 
 
56
    refute r.prerelease?
 
57
 
 
58
    r = req '= 1.a'
 
59
 
 
60
    assert r.prerelease?
 
61
 
 
62
    r = req '> 1.a', '< 2'
 
63
 
 
64
    assert r.prerelease?
 
65
  end
 
66
 
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'
 
68
    r = req '!= 1.2'
100
69
 
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
105
74
  end
106
75
 
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'
 
77
    r = req "1.2"
112
78
 
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
117
83
  end
118
84
 
119
85
  def test_satisfied_by_eh_equal
120
 
    r1_2 = @r1_2
121
 
    v1_1 = Gem::Version.new '1.1'
122
 
    v1_2 = Gem::Version.new '1.2'
123
 
    v1_3 = Gem::Version.new '1.3'
 
86
    r = req "= 1.2"
124
87
 
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
129
92
  end
130
93
 
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'
 
95
    r = req "> 1.2"
136
96
 
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
140
100
 
141
101
    assert_raises NoMethodError do
142
 
      assert_equal true,  r1_2.satisfied_by?(nil)
 
102
      r.satisfied_by? nil
143
103
    end
144
104
  end
145
105
 
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'
 
107
    r = req ">= 1.2"
151
108
 
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
155
112
 
156
113
    assert_raises NoMethodError do
157
 
      assert_equal true,  r1_2.satisfied_by?(nil)
 
114
      r.satisfied_by? nil
158
115
    end
159
116
  end
160
117
 
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"
166
120
 
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
170
124
 
171
125
    assert_raises NoMethodError do
172
 
      assert_equal true,  r.satisfied_by?(nil)
 
126
      r.satisfied_by? nil
173
127
    end
174
128
  end
175
129
 
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'
 
131
    r = req "< 1.2"
181
132
 
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
185
136
 
186
137
    assert_raises NoMethodError do
187
 
      assert_equal true,  r1_2.satisfied_by?(nil)
 
138
      r.satisfied_by? nil
188
139
    end
189
140
  end
190
141
 
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'
 
143
    r = req "<= 1.2"
196
144
 
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
200
148
 
201
149
    assert_raises NoMethodError do
202
 
      assert_equal true,  r1_2.satisfied_by?(nil)
 
150
      r.satisfied_by? nil
203
151
    end
204
152
  end
205
153
 
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'
 
155
    r = req "~> 1.2"
211
156
 
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
215
160
 
216
161
    assert_raises NoMethodError do
217
 
      assert_equal true,  r1_2.satisfied_by?(nil)
218
 
    end
219
 
  end
220
 
 
 
162
      r.satisfied_by? nil
 
163
    end
 
164
  end
 
165
 
 
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"
 
195
  end
 
196
 
 
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
 
201
      end
 
202
    end
 
203
  end
 
204
 
 
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"
 
210
 
 
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"
 
217
 
 
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"
 
222
  end
 
223
 
 
224
  def test_satisfied_by_eh_multiple
 
225
    req = [">= 1.4", "<= 1.6", "!= 1.5"]
 
226
 
 
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
 
233
  end
 
234
 
 
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"
 
240
 
 
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"
 
247
  end
 
248
 
 
249
  def test_bad
 
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"
 
264
  end
 
265
 
 
266
  # Assert that two requirements are equal. Handles Gem::Requirements,
 
267
  # strings, arrays, numbers, and versions.
 
268
 
 
269
  def assert_requirement_equal expected, actual
 
270
    assert_equal req(expected), req(actual)
 
271
  end
 
272
 
 
273
  # Assert that +version+ satisfies +requirement+.
 
274
 
 
275
  def assert_satisfied_by version, requirement
 
276
    assert req(requirement).satisfied_by?(v(version)),
 
277
      "#{requirement} is satisfied by #{version}"
 
278
  end
 
279
 
 
280
  # Refute the assumption that two requirements are equal.
 
281
 
 
282
  def refute_requirement_equal unexpected, actual
 
283
    refute_equal req(unexpected), req(actual)
 
284
  end
 
285
 
 
286
  # Refute the assumption that +version+ satisfies +requirement+.
 
287
 
 
288
  def refute_satisfied_by version, requirement
 
289
    refute req(requirement).satisfied_by?(v(version)),
 
290
      "#{requirement} is not satisfied by #{version}"
 
291
  end
221
292
end
222