Fix tokenizing openssl style versions

Fixes Homebrew/homebrew#25736.
This commit is contained in:
Jack Nagel 2014-01-11 19:59:26 -06:00
parent 92ac63fd94
commit 0f5a80a97b
3 changed files with 19 additions and 1 deletions

View File

@ -2,6 +2,8 @@ require 'testing_env'
require 'version'
class VersionTests < Test::Unit::TestCase
include VersionAssertions
def test_accepts_objects_responding_to_to_str
value = stub(:to_str => '0.1')
assert_equal '0.1', Version.new(value).to_s
@ -12,6 +14,18 @@ class VersionTests < Test::Unit::TestCase
assert_raises(TypeError) { Version.new(1) }
assert_raises(TypeError) { Version.new(:symbol) }
end
def test_tokens
assert_version_tokens %w{1 0 z23}, version('1.0z23')
assert_version_tokens %w{1 0 z23}, version('1.0.z23')
assert_version_tokens %w{1 0 z 23}, version('1.0.z.23')
assert_version_tokens %w{1 0 23 z}, version('1.0.23z')
assert_version_tokens %w{1 0 23 z}, version('1.0.23.z')
end
def test_openssl_style_tokenization
assert_version_tokens %w{1 0 1 f}, version('1.0.1f')
end
end
class VersionComparisonTests < Test::Unit::TestCase

View File

@ -97,6 +97,10 @@ module VersionAssertions
def assert_version_nil url
assert_nil Version.parse(url)
end
def assert_version_tokens tokens, version
assert_equal tokens, version.send(:tokens).map(&:to_s)
end
end
module Test::Unit::Assertions

View File

@ -43,7 +43,7 @@ class Version
NULL_TOKEN = NullToken.new
class StringToken < Token
PATTERN = /[a-z]+[0-9]+/i
PATTERN = /[a-z]+[0-9]*/i
def initialize(value)
@value = value.to_s