summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_version.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_version.rb')
-rw-r--r--test/rubygems/test_gem_version.rb191
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
+