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)