2007-11-10 02:48:56 -05:00
|
|
|
#--
|
|
|
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
|
|
|
# All rights reserved.
|
|
|
|
# See LICENSE.txt for permissions.
|
|
|
|
#++
|
|
|
|
|
|
|
|
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
|
|
|
|
require 'rubygems/version'
|
|
|
|
|
|
|
|
class TestGemVersion < RubyGemTestCase
|
|
|
|
|
|
|
|
def setup
|
|
|
|
super
|
|
|
|
|
2009-06-09 17:38:59 -04:00
|
|
|
version = Object.new
|
|
|
|
def version.to_s() '1.4.0' end
|
|
|
|
|
2007-11-10 02:48:56 -05:00
|
|
|
@v1_0 = Gem::Version.new '1.0'
|
|
|
|
@v1_2 = Gem::Version.new '1.2'
|
|
|
|
@v1_3 = Gem::Version.new '1.3'
|
2009-06-09 17:38:59 -04:00
|
|
|
@v1_4_0 = Gem::Version.new version
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_class_create
|
|
|
|
assert_version Gem::Version.create('1.0')
|
|
|
|
assert_version Gem::Version.create("1.0 ")
|
|
|
|
assert_version Gem::Version.create(" 1.0 ")
|
|
|
|
assert_version Gem::Version.create("1.0\n")
|
|
|
|
assert_version Gem::Version.create("\n1.0\n")
|
|
|
|
|
|
|
|
assert_equal Gem::Version.create('1'), Gem::Version.create(1)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_class_create_malformed
|
2008-10-25 18:58:43 -04:00
|
|
|
e = assert_raises ArgumentError do Gem::Version.create("junk") end
|
2007-11-10 02:48:56 -05:00
|
|
|
assert_equal "Malformed version number string junk", e.message
|
|
|
|
|
2008-10-25 18:58:43 -04:00
|
|
|
e = assert_raises ArgumentError do Gem::Version.create("1.0\n2.0") end
|
2007-11-10 02:48:56 -05:00
|
|
|
assert_equal "Malformed version number string 1.0\n2.0", e.message
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_bad
|
|
|
|
assert_inadequate( "", "> 0.1")
|
|
|
|
assert_inadequate( "1.2.3", "!= 1.2.3")
|
|
|
|
assert_inadequate( "1.2.003.0.0", "!= 1.02.3")
|
|
|
|
assert_inadequate( "4.5.6", "< 1.2.3")
|
|
|
|
assert_inadequate( "1.0", "> 1.1")
|
|
|
|
assert_inadequate( "0", ">")
|
|
|
|
assert_inadequate( "0", "<")
|
|
|
|
assert_inadequate( "", "= 0.1")
|
|
|
|
assert_inadequate( "1.1.1", "> 1.1.1")
|
|
|
|
assert_inadequate( "1.2", "= 1.1")
|
|
|
|
assert_inadequate( "1.40", "= 1.1")
|
|
|
|
assert_inadequate( "1.3", "= 1.40")
|
|
|
|
assert_inadequate( "9.3.3", "<= 9.3.2")
|
|
|
|
assert_inadequate( "9.3.1", ">= 9.3.2")
|
|
|
|
assert_inadequate( "9.3.03", "<= 9.3.2")
|
|
|
|
assert_inadequate( "1.0.0.1", "= 1.0")
|
|
|
|
end
|
|
|
|
|
2007-12-20 03:39:12 -05:00
|
|
|
def test_bump_trailing_zeros
|
|
|
|
v = Gem::Version.new("5.0.0")
|
|
|
|
assert_equal "5.1", v.bump.to_s
|
|
|
|
end
|
|
|
|
|
2007-11-10 02:48:56 -05:00
|
|
|
def test_bump
|
|
|
|
v = Gem::Version.new("5.2.4")
|
|
|
|
assert_equal "5.3", v.bump.to_s
|
|
|
|
end
|
|
|
|
|
2009-06-09 17:38:59 -04:00
|
|
|
def test_bump_alpha
|
|
|
|
v = Gem::Version.new("5.2.4.a")
|
|
|
|
assert_equal "5.3", v.bump.to_s
|
|
|
|
end
|
|
|
|
|
2007-11-10 02:48:56 -05:00
|
|
|
def test_bump_one_level
|
|
|
|
v = Gem::Version.new("5")
|
|
|
|
assert_equal "6", v.bump.to_s
|
|
|
|
end
|
|
|
|
|
2007-12-20 03:39:12 -05:00
|
|
|
def test_eql_eh
|
2008-06-17 18:04:18 -04:00
|
|
|
v1_2 = Gem::Version.new '1.2'
|
|
|
|
v1_2_0 = Gem::Version.new '1.2.0'
|
|
|
|
|
|
|
|
assert_equal true, v1_2.eql?(@v1_2)
|
|
|
|
assert_equal true, @v1_2.eql?(v1_2)
|
2007-12-20 03:39:12 -05:00
|
|
|
|
2008-06-17 18:04:18 -04:00
|
|
|
assert_equal false, v1_2_0.eql?(@v1_2)
|
|
|
|
assert_equal false, @v1_2.eql?(v1_2_0)
|
2007-12-20 03:39:12 -05:00
|
|
|
|
|
|
|
assert_equal false, @v1_2.eql?(@v1_3)
|
|
|
|
assert_equal false, @v1_3.eql?(@v1_2)
|
|
|
|
end
|
|
|
|
|
2009-06-09 17:38:59 -04:00
|
|
|
def test_eql_eh4
|
|
|
|
v1_4 = Gem::Version.new '1.4'
|
|
|
|
v1_4_0 = Gem::Version.new "1.4.0"
|
|
|
|
|
|
|
|
assert_equal true, v1_4_0.eql?(@v1_4_0)
|
|
|
|
assert_equal true, @v1_4_0.eql?(v1_4_0)
|
|
|
|
|
|
|
|
assert_equal false, v1_4.eql?(@v1_4_0)
|
|
|
|
assert_equal false, @v1_4_0.eql?(v1_4)
|
|
|
|
|
|
|
|
assert_equal false, @v1_4_0.eql?(@v1_3)
|
|
|
|
assert_equal false, @v1_3.eql?(@v1_4_0)
|
|
|
|
end
|
|
|
|
|
2007-11-10 02:48:56 -05:00
|
|
|
def test_equals2
|
|
|
|
v = Gem::Version.new("1.2")
|
|
|
|
|
|
|
|
assert_equal v, @v1_2
|
|
|
|
assert_equal @v1_2, v
|
|
|
|
|
2008-10-25 18:58:43 -04:00
|
|
|
refute_equal @v1_2, @v1_3
|
|
|
|
refute_equal @v1_3, @v1_2
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_hash
|
2008-06-17 18:04:18 -04:00
|
|
|
v1_2 = Gem::Version.new "1.2"
|
|
|
|
v1_2_0 = Gem::Version.new "1.2.0"
|
2009-06-09 17:38:59 -04:00
|
|
|
v1_4_0 = Gem::Version.new "1.4.0"
|
2008-06-17 18:04:18 -04:00
|
|
|
|
|
|
|
assert_equal v1_2.hash, @v1_2.hash
|
|
|
|
|
2008-10-25 18:58:43 -04:00
|
|
|
refute_equal v1_2_0.hash, @v1_2.hash
|
2008-06-17 18:04:18 -04:00
|
|
|
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_equal v1_4_0.hash, @v1_4_0.hash
|
|
|
|
|
2008-10-25 18:58:43 -04:00
|
|
|
refute_equal @v1_2.hash, @v1_3.hash
|
2009-06-09 17:38:59 -04:00
|
|
|
|
|
|
|
refute_equal @v1_2.hash, @v1_4_0.hash
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_illformed_requirements
|
|
|
|
[ ">>> 1.3.5", "> blah" ].each do |rq|
|
2008-10-25 18:58:43 -04:00
|
|
|
assert_raises ArgumentError, "req [#{rq}] should fail" do
|
|
|
|
Gem::Version::Requirement.new rq
|
|
|
|
end
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_normalize
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_equal [0], Gem::Version.new("").normalize.map { |part| part.value }
|
|
|
|
assert_equal [0], Gem::Version.new("0").normalize.map { |part| part.value }
|
|
|
|
assert_equal [1], Gem::Version.new("1").normalize.map { |part| part.value }
|
|
|
|
assert_equal [1], Gem::Version.new("1.0").normalize.map { |part| part.value }
|
|
|
|
assert_equal [1, 1], Gem::Version.new("1.1").normalize.map { |part| part.value }
|
|
|
|
assert_equal [1, 1, "a"], Gem::Version.new("1.1.a").normalize.map { |part| part.value }
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_ok
|
|
|
|
assert_adequate( "0.2.33", "= 0.2.33")
|
|
|
|
assert_adequate( "0.2.34", "> 0.2.33")
|
|
|
|
assert_adequate( "1.0", "= 1.0")
|
|
|
|
assert_adequate( "1.0", "1.0")
|
|
|
|
assert_adequate( "1.8.2", "> 1.8.0")
|
|
|
|
assert_adequate( "1.112", "> 1.111")
|
|
|
|
assert_adequate( "0.2", "> 0.0.0")
|
|
|
|
assert_adequate( "0.0.0.0.0.2", "> 0.0.0")
|
|
|
|
assert_adequate( "0.0.1.0", "> 0.0.0.1")
|
|
|
|
assert_adequate( "10.3.2", "> 9.3.2")
|
|
|
|
assert_adequate( "1.0.0.0", "= 1.0")
|
|
|
|
assert_adequate( "10.3.2", "!= 9.3.4")
|
|
|
|
assert_adequate( "10.3.2", "> 9.3.2")
|
|
|
|
assert_adequate( "10.3.2", "> 9.3.2")
|
|
|
|
assert_adequate( " 9.3.2", ">= 9.3.2")
|
|
|
|
assert_adequate( "9.3.2 ", ">= 9.3.2")
|
|
|
|
assert_adequate( "", "= 0")
|
|
|
|
assert_adequate( "", "< 0.1")
|
|
|
|
assert_adequate( " ", "< 0.1 ")
|
|
|
|
assert_adequate( "", " < 0.1")
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_adequate( " ", "> 0.a ")
|
|
|
|
assert_adequate( "", " > 0.a")
|
2007-11-10 02:48:56 -05:00
|
|
|
assert_adequate( "0", "=")
|
|
|
|
assert_adequate( "0", ">=")
|
|
|
|
assert_adequate( "0", "<=")
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_adequate( "3.1", "< 3.2.rc1")
|
|
|
|
assert_adequate( "3.2.0", "> 3.2.0.rc1")
|
|
|
|
assert_adequate( "3.2.0.rc2", "> 3.2.0.rc1")
|
|
|
|
assert_adequate( "3.0.rc2", "< 3.0")
|
|
|
|
assert_adequate( "3.0.rc2", "< 3.0.0")
|
|
|
|
assert_adequate( "3.0.rc2", "< 3.0.1")
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_parse_parts_from_version_string
|
|
|
|
assert_equal [], part_values(Gem::Version.new("").parse_parts_from_version_string)
|
|
|
|
assert_equal [1], part_values(Gem::Version.new("1").parse_parts_from_version_string)
|
|
|
|
assert_equal [1, 0], part_values(Gem::Version.new("1.0").parse_parts_from_version_string)
|
|
|
|
assert_equal [1, 0, "a"], part_values(Gem::Version.new("1.0.a").parse_parts_from_version_string)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_prerelease
|
|
|
|
assert Gem::Version.new('1.2.0.a').prerelease?
|
|
|
|
assert Gem::Version.new('2.9.b').prerelease?
|
|
|
|
assert Gem::Version.new('22.1.50.0.d').prerelease?
|
|
|
|
|
|
|
|
refute Gem::Version.new('1.2.0').prerelease?
|
|
|
|
refute Gem::Version.new('2.9').prerelease?
|
|
|
|
refute Gem::Version.new('22.1.50.0').prerelease?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_release
|
|
|
|
assert_equal Gem::Version.new('1.2.0'), Gem::Version.new('1.2.0.a').release
|
|
|
|
assert_equal Gem::Version.new('1.1'), Gem::Version.new('1.1.rc10').release
|
|
|
|
assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3.alpha.5').release
|
|
|
|
assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3').release
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_satisfied_by_eh_boxed
|
|
|
|
assert_inadequate("1.3", "~> 1.4")
|
|
|
|
assert_adequate( "1.4", "~> 1.4")
|
|
|
|
assert_adequate( "1.5", "~> 1.4")
|
|
|
|
assert_inadequate("2.0", "~> 1.4")
|
|
|
|
|
|
|
|
assert_inadequate("1.3", "~> 1.4.4")
|
|
|
|
assert_inadequate("1.4", "~> 1.4.4")
|
|
|
|
assert_adequate( "1.4.4", "~> 1.4.4")
|
|
|
|
assert_adequate( "1.4.5", "~> 1.4.4")
|
|
|
|
assert_inadequate("1.5", "~> 1.4.4")
|
|
|
|
assert_inadequate("2.0", "~> 1.4.4")
|
2009-06-09 17:38:59 -04:00
|
|
|
|
|
|
|
assert_inadequate("1.1.pre", "~> 1.0.0")
|
|
|
|
assert_adequate( "1.1.pre", "~> 1.1")
|
|
|
|
assert_inadequate("2.0.a", "~> 1.0")
|
|
|
|
assert_adequate( "2.0.a", "~> 2.0")
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_satisfied_by_eh_multiple
|
|
|
|
req = [">= 1.4", "<= 1.6", "!= 1.5"]
|
|
|
|
assert_inadequate("1.3", req)
|
|
|
|
assert_adequate( "1.4", req)
|
|
|
|
assert_inadequate("1.5", req)
|
|
|
|
assert_adequate( "1.6", req)
|
|
|
|
assert_inadequate("1.7", req)
|
|
|
|
assert_inadequate("2.0", req)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_spaceship
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_equal 0, Gem::Version.new('1.0') <=> Gem::Version.new('1.0.0')
|
|
|
|
assert_equal 1, Gem::Version.new('1.0') <=> Gem::Version.new('1.0.a')
|
2007-11-10 02:48:56 -05:00
|
|
|
assert_equal 1, Gem::Version.new('1.8.2') <=> Gem::Version.new('0.0.0')
|
2009-06-09 17:38:59 -04:00
|
|
|
assert_equal 1, Gem::Version.new('1.8.2') <=> Gem::Version.new('1.8.2.a')
|
|
|
|
assert_equal 1, Gem::Version.new('1.8.2.b') <=> Gem::Version.new('1.8.2.a')
|
|
|
|
assert_equal 0, Gem::Version.new('') <=> Gem::Version.new('0')
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_boxed
|
|
|
|
assert_inadequate("1.3", "~> 1.4")
|
|
|
|
assert_adequate( "1.4", "~> 1.4")
|
|
|
|
assert_adequate( "1.5", "~> 1.4")
|
|
|
|
assert_inadequate("2.0", "~> 1.4")
|
|
|
|
|
|
|
|
assert_inadequate("1.3", "~> 1.4.4")
|
|
|
|
assert_inadequate("1.4", "~> 1.4.4")
|
|
|
|
assert_adequate( "1.4.4", "~> 1.4.4")
|
|
|
|
assert_adequate( "1.4.5", "~> 1.4.4")
|
|
|
|
assert_inadequate("1.5", "~> 1.4.4")
|
|
|
|
assert_inadequate("2.0", "~> 1.4.4")
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_to_s
|
|
|
|
v = Gem::Version.new("5.2.4")
|
|
|
|
assert_equal "5.2.4", v.to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_adequate(version, requirement)
|
|
|
|
ver = Gem::Version.new(version)
|
2008-02-10 03:00:19 -05:00
|
|
|
req = Gem::Requirement.new(requirement)
|
2007-11-10 02:48:56 -05:00
|
|
|
assert req.satisfied_by?(ver),
|
|
|
|
"Version #{version} should be adequate for Requirement #{requirement}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_inadequate(version, requirement)
|
|
|
|
ver = Gem::Version.new(version)
|
|
|
|
req = Gem::Version::Requirement.new(requirement)
|
2009-06-09 17:38:59 -04:00
|
|
|
refute req.satisfied_by?(ver),
|
2007-11-10 02:48:56 -05:00
|
|
|
"Version #{version} should not be adequate for Requirement #{requirement}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_version(actual)
|
|
|
|
assert_equal @v1_0, actual
|
|
|
|
assert_equal @v1_0.version, actual.version
|
|
|
|
end
|
|
|
|
|
2009-06-09 17:38:59 -04:00
|
|
|
def part_values(*parts)
|
|
|
|
parts.flatten.map { |part| part.value }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class TestGemVersionPart < RubyGemTestCase
|
|
|
|
def test_initialize
|
|
|
|
assert_equal 1, Gem::Version::Part.new(1).value
|
|
|
|
assert_equal 1, Gem::Version::Part.new("1").value
|
|
|
|
assert_equal "a", Gem::Version::Part.new("a").value
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_spaceship
|
|
|
|
assert_equal(-1, Gem::Version::Part.new(1) <=> Gem::Version::Part.new(2))
|
|
|
|
assert_equal( 0, Gem::Version::Part.new(2) <=> Gem::Version::Part.new(2))
|
|
|
|
assert_equal( 1, Gem::Version::Part.new(2) <=> Gem::Version::Part.new(1))
|
|
|
|
|
|
|
|
assert_equal(-1, Gem::Version::Part.new("a") <=> Gem::Version::Part.new("b"))
|
|
|
|
assert_equal( 0, Gem::Version::Part.new("b") <=> Gem::Version::Part.new("b"))
|
|
|
|
assert_equal( 1, Gem::Version::Part.new("b") <=> Gem::Version::Part.new("a"))
|
|
|
|
|
|
|
|
assert_equal(-1, Gem::Version::Part.new("a") <=> Gem::Version::Part.new(1))
|
|
|
|
assert_equal( 1, Gem::Version::Part.new(1) <=> Gem::Version::Part.new("a"))
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_succ
|
|
|
|
assert_equal 2, Gem::Version::Part.new(1).succ.value
|
|
|
|
assert_equal "b", Gem::Version::Part.new("a").succ.value
|
|
|
|
end
|
2007-11-10 02:48:56 -05:00
|
|
|
end
|
|
|
|
|