1require 'rubygems/test_case' 2require "rubygems/requirement" 3 4class TestGemRequirement < Gem::TestCase 5 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 16 end 17 18 def test_initialize 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_empty_requirements_is_none 25 r = Gem::Requirement.new 26 assert_equal true, r.none? 27 end 28 29 def test_explicit_default_is_none 30 r = Gem::Requirement.new ">= 0" 31 assert_equal true, r.none? 32 end 33 34 def test_basic_non_none 35 r = Gem::Requirement.new "= 1" 36 assert_equal false, r.none? 37 end 38 39 def test_parse 40 assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse(' 1') 41 assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1') 42 assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1') 43 assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1") 44 45 assert_equal ['=', Gem::Version.new(2)], 46 Gem::Requirement.parse(Gem::Version.new('2')) 47 end 48 49 def test_parse_bad 50 [ 51 nil, 52 '', 53 '! 1', 54 '= junk', 55 '1..2', 56 ].each do |bad| 57 e = assert_raises Gem::Requirement::BadRequirementError do 58 Gem::Requirement.parse bad 59 end 60 61 assert_equal "Illformed requirement [#{bad.inspect}]", e.message 62 end 63 64 assert_equal Gem::Requirement::BadRequirementError.superclass, ArgumentError 65 end 66 67 def test_prerelease_eh 68 r = req '= 1' 69 70 refute r.prerelease? 71 72 r = req '= 1.a' 73 74 assert r.prerelease? 75 76 r = req '> 1.a', '< 2' 77 78 assert r.prerelease? 79 end 80 81 def test_satisfied_by_eh_bang_equal 82 r = req '!= 1.2' 83 84 assert_satisfied_by "1.1", r 85 refute_satisfied_by "1.2", r 86 assert_satisfied_by "1.3", r 87 88 assert_raises ArgumentError do 89 assert_satisfied_by nil, r 90 end 91 end 92 93 def test_satisfied_by_eh_blank 94 r = req "1.2" 95 96 refute_satisfied_by "1.1", r 97 assert_satisfied_by "1.2", r 98 refute_satisfied_by "1.3", r 99 100 assert_raises ArgumentError do 101 assert_satisfied_by nil, r 102 end 103 end 104 105 def test_satisfied_by_eh_equal 106 r = req "= 1.2" 107 108 refute_satisfied_by "1.1", r 109 assert_satisfied_by "1.2", r 110 refute_satisfied_by "1.3", r 111 112 assert_raises ArgumentError do 113 assert_satisfied_by nil, r 114 end 115 end 116 117 def test_satisfied_by_eh_gt 118 r = req "> 1.2" 119 120 refute_satisfied_by "1.1", r 121 refute_satisfied_by "1.2", r 122 assert_satisfied_by "1.3", r 123 124 assert_raises ArgumentError do 125 r.satisfied_by? nil 126 end 127 end 128 129 def test_satisfied_by_eh_gte 130 r = req ">= 1.2" 131 132 refute_satisfied_by "1.1", r 133 assert_satisfied_by "1.2", r 134 assert_satisfied_by "1.3", r 135 136 assert_raises ArgumentError do 137 r.satisfied_by? nil 138 end 139 end 140 141 def test_satisfied_by_eh_list 142 r = req "> 1.1", "< 1.3" 143 144 refute_satisfied_by "1.1", r 145 assert_satisfied_by "1.2", r 146 refute_satisfied_by "1.3", r 147 148 assert_raises ArgumentError do 149 r.satisfied_by? nil 150 end 151 end 152 153 def test_satisfied_by_eh_lt 154 r = req "< 1.2" 155 156 assert_satisfied_by "1.1", r 157 refute_satisfied_by "1.2", r 158 refute_satisfied_by "1.3", r 159 160 assert_raises ArgumentError do 161 r.satisfied_by? nil 162 end 163 end 164 165 def test_satisfied_by_eh_lte 166 r = req "<= 1.2" 167 168 assert_satisfied_by "1.1", r 169 assert_satisfied_by "1.2", r 170 refute_satisfied_by "1.3", r 171 172 assert_raises ArgumentError do 173 r.satisfied_by? nil 174 end 175 end 176 177 def test_satisfied_by_eh_tilde_gt 178 r = req "~> 1.2" 179 180 refute_satisfied_by "1.1", r 181 assert_satisfied_by "1.2", r 182 assert_satisfied_by "1.3", r 183 184 assert_raises ArgumentError do 185 r.satisfied_by? nil 186 end 187 end 188 189 def test_satisfied_by_eh_good 190 assert_satisfied_by "0.2.33", "= 0.2.33" 191 assert_satisfied_by "0.2.34", "> 0.2.33" 192 assert_satisfied_by "1.0", "= 1.0" 193 assert_satisfied_by "1.0", "1.0" 194 assert_satisfied_by "1.8.2", "> 1.8.0" 195 assert_satisfied_by "1.112", "> 1.111" 196 assert_satisfied_by "0.2", "> 0.0.0" 197 assert_satisfied_by "0.0.0.0.0.2", "> 0.0.0" 198 assert_satisfied_by "0.0.1.0", "> 0.0.0.1" 199 assert_satisfied_by "10.3.2", "> 9.3.2" 200 assert_satisfied_by "1.0.0.0", "= 1.0" 201 assert_satisfied_by "10.3.2", "!= 9.3.4" 202 assert_satisfied_by "10.3.2", "> 9.3.2" 203 assert_satisfied_by "10.3.2", "> 9.3.2" 204 assert_satisfied_by " 9.3.2", ">= 9.3.2" 205 assert_satisfied_by "9.3.2 ", ">= 9.3.2" 206 assert_satisfied_by "", "= 0" 207 assert_satisfied_by "", "< 0.1" 208 assert_satisfied_by " ", "< 0.1 " 209 assert_satisfied_by "", " < 0.1" 210 assert_satisfied_by " ", "> 0.a " 211 assert_satisfied_by "", " > 0.a" 212 assert_satisfied_by "3.1", "< 3.2.rc1" 213 214 assert_satisfied_by "3.2.0", "> 3.2.0.rc1" 215 assert_satisfied_by "3.2.0.rc2", "> 3.2.0.rc1" 216 217 assert_satisfied_by "3.0.rc2", "< 3.0" 218 assert_satisfied_by "3.0.rc2", "< 3.0.0" 219 assert_satisfied_by "3.0.rc2", "< 3.0.1" 220 221 assert_satisfied_by "3.0.rc2", "> 0" 222 end 223 224 def test_illformed_requirements 225 [ ">>> 1.3.5", "> blah" ].each do |rq| 226 assert_raises Gem::Requirement::BadRequirementError, "req [#{rq}] should fail" do 227 Gem::Requirement.new rq 228 end 229 end 230 end 231 232 def test_satisfied_by_eh_non_versions 233 assert_raises ArgumentError do 234 req(">= 0").satisfied_by? Object.new 235 end 236 237 assert_raises ArgumentError do 238 req(">= 0").satisfied_by? Gem::Requirement.default 239 end 240 end 241 242 def test_satisfied_by_eh_boxed 243 refute_satisfied_by "1.3", "~> 1.4" 244 assert_satisfied_by "1.4", "~> 1.4" 245 assert_satisfied_by "1.5", "~> 1.4" 246 refute_satisfied_by "2.0", "~> 1.4" 247 248 refute_satisfied_by "1.3", "~> 1.4.4" 249 refute_satisfied_by "1.4", "~> 1.4.4" 250 assert_satisfied_by "1.4.4", "~> 1.4.4" 251 assert_satisfied_by "1.4.5", "~> 1.4.4" 252 refute_satisfied_by "1.5", "~> 1.4.4" 253 refute_satisfied_by "2.0", "~> 1.4.4" 254 255 refute_satisfied_by "1.1.pre", "~> 1.0.0" 256 refute_satisfied_by "1.1.pre", "~> 1.1" 257 refute_satisfied_by "2.0.a", "~> 1.0" 258 refute_satisfied_by "2.0.a", "~> 2.0" 259 end 260 261 def test_satisfied_by_eh_multiple 262 req = [">= 1.4", "<= 1.6", "!= 1.5"] 263 264 refute_satisfied_by "1.3", req 265 assert_satisfied_by "1.4", req 266 refute_satisfied_by "1.5", req 267 assert_satisfied_by "1.6", req 268 refute_satisfied_by "1.7", req 269 refute_satisfied_by "2.0", req 270 end 271 272 def test_satisfied_by_boxed 273 refute_satisfied_by "1.3", "~> 1.4" 274 assert_satisfied_by "1.4", "~> 1.4" 275 assert_satisfied_by "1.5", "~> 1.4" 276 refute_satisfied_by "2.0", "~> 1.4" 277 278 refute_satisfied_by "1.3", "~> 1.4.4" 279 refute_satisfied_by "1.4", "~> 1.4.4" 280 assert_satisfied_by "1.4.4", "~> 1.4.4" 281 assert_satisfied_by "1.4.5", "~> 1.4.4" 282 refute_satisfied_by "1.5", "~> 1.4.4" 283 refute_satisfied_by "2.0", "~> 1.4.4" 284 end 285 286 def test_specific 287 refute req('> 1') .specific? 288 refute req('>= 1').specific? 289 290 assert req('!= 1').specific? 291 assert req('< 1') .specific? 292 assert req('<= 1').specific? 293 assert req('= 1') .specific? 294 assert req('~> 1').specific? 295 296 assert req('> 1', '> 2').specific? # GIGO 297 end 298 299 def test_bad 300 refute_satisfied_by "", "> 0.1" 301 refute_satisfied_by "1.2.3", "!= 1.2.3" 302 refute_satisfied_by "1.2.003.0.0", "!= 1.02.3" 303 refute_satisfied_by "4.5.6", "< 1.2.3" 304 refute_satisfied_by "1.0", "> 1.1" 305 refute_satisfied_by "", "= 0.1" 306 refute_satisfied_by "1.1.1", "> 1.1.1" 307 refute_satisfied_by "1.2", "= 1.1" 308 refute_satisfied_by "1.40", "= 1.1" 309 refute_satisfied_by "1.3", "= 1.40" 310 refute_satisfied_by "9.3.3", "<= 9.3.2" 311 refute_satisfied_by "9.3.1", ">= 9.3.2" 312 refute_satisfied_by "9.3.03", "<= 9.3.2" 313 refute_satisfied_by "1.0.0.1", "= 1.0" 314 end 315 316 # Assert that two requirements are equal. Handles Gem::Requirements, 317 # strings, arrays, numbers, and versions. 318 319 def assert_requirement_equal expected, actual 320 assert_equal req(expected), req(actual) 321 end 322 323 # Assert that +version+ satisfies +requirement+. 324 325 def assert_satisfied_by version, requirement 326 assert req(requirement).satisfied_by?(v(version)), 327 "#{requirement} is satisfied by #{version}" 328 end 329 330 # Refute the assumption that two requirements are equal. 331 332 def refute_requirement_equal unexpected, actual 333 refute_equal req(unexpected), req(actual) 334 end 335 336 # Refute the assumption that +version+ satisfies +requirement+. 337 338 def refute_satisfied_by version, requirement 339 refute req(requirement).satisfied_by?(v(version)), 340 "#{requirement} is not satisfied by #{version}" 341 end 342end 343