PageRenderTime 47ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/rubygems-0.8.11/test/test_version_comparison.rb

https://bitbucket.org/redricko/pragprog-scripting
Ruby | 209 lines | 177 code | 24 blank | 8 comment | 0 complexity | c88676dcb61a6dd1b296136bd33c6d6a MD5 | raw file
  1. #---
  2. # Excerpted from "Everyday Scripting in Ruby"
  3. # We make no guarantees that this code is fit for any purpose.
  4. # Visit http://www.pragmaticprogrammer.com/titles/bmsft for more book information.
  5. #---
  6. require 'test/unit'
  7. require 'rubygems'
  8. Gem::manage_gems
  9. module VersionAsserts
  10. def assert_adequate(version, requirement)
  11. ver = Gem::Version.new(version)
  12. req = Gem::Version::Requirement.new(requirement)
  13. assert req.satisfied_by?(ver),
  14. "Version #{version} should be adequate for Requirement #{requirement}"
  15. end
  16. def assert_inadequate(version, requirement)
  17. ver = Gem::Version.new(version)
  18. req = Gem::Version::Requirement.new(requirement)
  19. assert ! req.satisfied_by?(ver),
  20. "Version #{version} should not be adequate for Requirement #{requirement}"
  21. end
  22. end
  23. class Versions < Test::Unit::TestCase
  24. include VersionAsserts
  25. def test_ok
  26. assert_adequate( "0.2.33", "= 0.2.33")
  27. assert_adequate( "0.2.34", "> 0.2.33")
  28. assert_adequate( "1.0", "= 1.0")
  29. assert_adequate( "1.0", "1.0")
  30. assert_adequate( "1.8.2", "> 1.8.0")
  31. assert_adequate( "1.112", "> 1.111")
  32. assert_adequate( "0.2", "> 0.0.0")
  33. assert_adequate( "0.0.0.0.0.2", "> 0.0.0")
  34. assert_adequate( "0.0.1.0", "> 0.0.0.1")
  35. assert_adequate( "10.3.2", "> 9.3.2")
  36. assert_adequate( "1.0.0.0", "= 1.0")
  37. assert_adequate( "10.3.2", "!= 9.3.4")
  38. assert_adequate( "10.3.2", "> 9.3.2")
  39. assert_adequate( "10.3.2", "> 9.3.2")
  40. assert_adequate( " 9.3.2", ">= 9.3.2")
  41. assert_adequate( "9.3.2 ", ">= 9.3.2")
  42. assert_adequate( "", "= 0")
  43. assert_adequate( "", "< 0.1")
  44. assert_adequate( " ", "< 0.1 ")
  45. assert_adequate( "", " < 0.1")
  46. assert_adequate( "0", "=")
  47. assert_adequate( "0", ">=")
  48. assert_adequate( "0", "<=")
  49. end
  50. def test_bad
  51. assert_inadequate( "", "> 0.1")
  52. assert_inadequate( "1.2.3", "!= 1.2.3")
  53. assert_inadequate( "1.2.003.0.0", "!= 1.02.3")
  54. assert_inadequate( "4.5.6", "< 1.2.3")
  55. assert_inadequate( "1.0", "> 1.1")
  56. assert_inadequate( "0", ">")
  57. assert_inadequate( "0", "<")
  58. assert_inadequate( "", "= 0.1")
  59. assert_inadequate( "1.1.1", "> 1.1.1")
  60. assert_inadequate( "1.2", "= 1.1")
  61. assert_inadequate( "1.40", "= 1.1")
  62. assert_inadequate( "1.3", "= 1.40")
  63. assert_inadequate( "9.3.3", "<= 9.3.2")
  64. assert_inadequate( "9.3.1", ">= 9.3.2")
  65. assert_inadequate( "9.3.03", "<= 9.3.2")
  66. assert_inadequate( "1.0.0.1", "= 1.0")
  67. end
  68. def test_illformed_version
  69. [ "blah", "1.3.a", "1.3.5." ].each do |wn|
  70. assert_raises(ArgumentError) { Gem::Version.new(wn) }
  71. end
  72. end
  73. def test_illformed_requirements
  74. [ ">>> 1.3.5", "> blah" ].each do |rq|
  75. assert_raises(ArgumentError, "req [#{rq}] should fail") {
  76. Gem::Version::Requirement.new(rq)
  77. }
  78. end
  79. end
  80. end
  81. class TestVersion < Test::Unit::TestCase
  82. def test_to_s
  83. v = Gem::Version.new("5.2.4")
  84. assert_equal "5.2.4", v.to_s
  85. end
  86. def test_bump
  87. v = Gem::Version.new("5.2.4")
  88. assert_equal "5.3", v.bump.to_s
  89. end
  90. def test_bump_one_level
  91. v = Gem::Version.new("5")
  92. assert_equal "6", v.bump.to_s
  93. end
  94. end
  95. class TestExtendedVersionComparisons < Test::Unit::TestCase
  96. include VersionAsserts
  97. def test_multiple
  98. req = [">= 1.4", "<= 1.6", "!= 1.5"]
  99. assert_inadequate("1.3", req)
  100. assert_adequate( "1.4", req)
  101. assert_inadequate("1.5", req)
  102. assert_adequate( "1.6", req)
  103. assert_inadequate("1.7", req)
  104. assert_inadequate("2.0", req)
  105. end
  106. def test_boxed
  107. assert_inadequate("1.3", "~> 1.4")
  108. assert_adequate( "1.4", "~> 1.4")
  109. assert_adequate( "1.5", "~> 1.4")
  110. assert_inadequate("2.0", "~> 1.4")
  111. end
  112. end
  113. class TestDependencies < Test::Unit::TestCase
  114. def test_create
  115. dep = Gem::Dependency.new("pkg", ["> 1.0"])
  116. assert_equal "pkg", dep.name
  117. assert_equal Gem::Version::Requirement.new(["> 1.0"]), dep.version_requirements
  118. end
  119. def test_create_single
  120. dep = Gem::Dependency.new("pkg", "> 1.0")
  121. assert_equal Gem::Version::Requirement.new(["> 1.0"]), dep.version_requirements
  122. end
  123. def test_create_double
  124. dep = Gem::Dependency.new("pkg", ["> 1.0", "< 2.0"])
  125. assert_equal Gem::Version::Requirement.new(["> 1.0", "< 2.0"]), dep.version_requirements
  126. end
  127. def test_create_wacked
  128. require 'yaml'
  129. dep = Gem::Dependency.new("pkg", [])
  130. old_req = Gem::Version::Requirement.new(["> 1.0"])
  131. old_req.instance_eval do
  132. @version = ">= 1.0"
  133. @op = ">="
  134. @nums = [1,0]
  135. @requirements = nil
  136. end
  137. dep.instance_eval do
  138. @version_requirement = old_req
  139. @version_requirements = nil
  140. end
  141. assert_equal Gem::Version::Requirement.new([">= 1.0"]), dep.version_requirements
  142. end
  143. def test_create_from_string
  144. req = Gem::Version::Requirement.create(">1")
  145. assert ! req.satisfied_by?(Gem::Version.new("1.0"))
  146. assert req.satisfied_by?(Gem::Version.new("1.1"))
  147. end
  148. def test_create_from_string_equal
  149. req = Gem::Version::Requirement.create("1.3")
  150. assert ! req.satisfied_by?(Gem::Version.new("1.0"))
  151. assert req.satisfied_by?(Gem::Version.new("1.3"))
  152. end
  153. def test_create_from_requirement
  154. req = Gem::Version::Requirement.create(Gem::Version::Requirement.new("1.3"))
  155. assert ! req.satisfied_by?(Gem::Version.new("1.0"))
  156. assert req.satisfied_by?(Gem::Version.new("1.3"))
  157. end
  158. def test_compare_to_nil
  159. assert(Gem::Version.new("0.0") > nil)
  160. req = Gem::Version::Requirement.create("1.3")
  161. assert ! req.satisfied_by?(nil)
  162. end
  163. def test_create_from_list
  164. req = Gem::Version::Requirement.create([">1", "<2"])
  165. assert ! req.satisfied_by?(Gem::Version.new("1.0"))
  166. assert ! req.satisfied_by?(Gem::Version.new("2.0"))
  167. assert req.satisfied_by?(Gem::Version.new("1.3"))
  168. end
  169. # We may get some old gems that have requirements in old formats.
  170. # We need to be able to handle those old requirements by normalizing
  171. # them to the latest format.
  172. def test_normalization
  173. require 'yaml'
  174. yamldep = %{--- !ruby/object:Gem::Version::Requirement
  175. nums:
  176. - 1
  177. - 0
  178. - 4
  179. op: ">="
  180. version: ">= 1.0.4"}
  181. dep = YAML.load(yamldep)
  182. dep.normalize
  183. assert_equal ">= 1.0.4", dep.to_s
  184. end
  185. end