diff options
Diffstat (limited to 'test/rubygems/test_gem_version.rb')
-rw-r--r-- | test/rubygems/test_gem_version.rb | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_version.rb b/test/rubygems/test_gem_version.rb new file mode 100644 index 0000000000..95f37ddd23 --- /dev/null +++ b/test/rubygems/test_gem_version.rb @@ -0,0 +1,191 @@ +#-- +# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. +# All rights reserved. +# See LICENSE.txt for permissions. +#++ + +require 'test/unit' +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') +require 'rubygems/version' + +class TestGemVersion < RubyGemTestCase + + def setup + super + + @v1_0 = Gem::Version.new '1.0' + @v1_2 = Gem::Version.new '1.2' + @v1_3 = Gem::Version.new '1.3' + 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 + e = assert_raise ArgumentError do Gem::Version.create("junk") end + assert_equal "Malformed version number string junk", e.message + + e = assert_raise ArgumentError do Gem::Version.create("1.0\n2.0") end + 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 + + def test_bump + v = Gem::Version.new("5.2.4") + assert_equal "5.3", v.bump.to_s + end + + def test_bump_one_level + v = Gem::Version.new("5") + assert_equal "6", v.bump.to_s + end + + def test_equals2 + v = Gem::Version.new("1.2") + + assert_equal v, @v1_2 + assert_equal @v1_2, v + + assert_not_equal @v1_2, @v1_3 + assert_not_equal @v1_3, @v1_2 + end + + def test_hash + v = Gem::Version.new("1.2") + assert_equal v.hash, @v1_2.hash + assert_not_equal @v1_2.hash, @v1_3.hash + end + + def test_illformed_requirements + [ ">>> 1.3.5", "> blah" ].each do |rq| + assert_raises(ArgumentError, "req [#{rq}] should fail") { + Gem::Version::Requirement.new(rq) + } + end + end + + def test_normalize + assert_equal [1], Gem::Version.new("1").to_ints + assert_equal [1], Gem::Version.new("1.0").to_ints + assert_equal [1, 1], Gem::Version.new("1.1").to_ints + 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") + assert_adequate( "0", "=") + assert_adequate( "0", ">=") + assert_adequate( "0", "<=") + 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") + 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 + assert_equal 1, Gem::Version.new('1.8.2') <=> Gem::Version.new('0.0.0') + 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) + req = Gem::Version::Requirement.new(requirement) + 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) + assert ! req.satisfied_by?(ver), + "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 + +end + |