Change soft-fail to use the config, rather than env
[rbx.git] / test / rubygems / test_gem_requirement.rb
blobc441bd16df3f49e541e2f66f98d9da4414b350c7
1 #--
2 # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3 # All rights reserved.
4 # See LICENSE.txt for permissions.
5 #++
7 require 'test/unit'
8 require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
9 require 'rubygems/version'
11 class TestGemRequirement < RubyGemTestCase
13   def setup
14     super
16     @r1_2 = Gem::Requirement.new '= 1.2'
17     @r1_3 = Gem::Requirement.new '= 1.3'
18   end
20   def test_initialize
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'
29   end
31   def test_equals2
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
40   end
42   def test_hash
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
48   end
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
54     require 'yaml'
55     yamldep = %{--- !ruby/object:Gem::Requirement
56       nums:
57         - 1
58         - 0
59         - 4
60       op: ">="
61       version: ">= 1.0.4"}
62     dep = YAML.load(yamldep)
63     dep.normalize
64     assert_equal ">= 1.0.4", dep.to_s
65   end
67   def test_parse
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'))
80   end
82   def test_parse_illformed
83     e = assert_raise ArgumentError do
84       @r1_2.parse(nil)
85     end
87     assert_equal 'Illformed requirement [nil]', e.message
89     e = assert_raise ArgumentError do
90       @r1_2.parse('')
91     end
93     assert_equal 'Illformed requirement [""]', e.message
94   end
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)
106   end
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)
118   end
120   def test_satisfied_by_eh_equal
121     r1_2 = @r1_2
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)
130   end
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)
144     end
145   end
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)
159     end
160   end
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)
174     end
175   end
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)
189     end
190   end
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)
204     end
205   end
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)
219     end
220   end