Add Version::NULL singleton
This commit is contained in:
		
							parent
							
								
									c2815fbb9a
								
							
						
					
					
						commit
						9bac107b31
					
				@ -30,6 +30,29 @@ class VersionTokenTests < Homebrew::TestCase
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class NullVersionTests < Homebrew::TestCase
 | 
			
		||||
  def test_null_version_is_always_smaller
 | 
			
		||||
    assert_operator Version::NULL, :<, version("1")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_null_version_is_never_greater
 | 
			
		||||
    refute_operator Version::NULL, :>, version("0")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_null_version_is_not_equal_to_itself
 | 
			
		||||
    refute_eql Version::NULL, Version::NULL
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_null_version_creates_an_empty_string
 | 
			
		||||
    assert_eql "", Version::NULL.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_null_version_produces_nan_as_a_float
 | 
			
		||||
    # Float::NAN is not equal to itself so compare object IDs
 | 
			
		||||
    assert_eql Float::NAN.object_id, Version::NULL.to_f.object_id
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
class VersionNullTokenTests < Homebrew::TestCase
 | 
			
		||||
  def test_inspect
 | 
			
		||||
    assert_equal "#<Version::NullToken>", Version::NullToken.new.inspect
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
require "version/null"
 | 
			
		||||
 | 
			
		||||
class Version
 | 
			
		||||
  include Comparable
 | 
			
		||||
 | 
			
		||||
@ -206,6 +208,10 @@ class Version
 | 
			
		||||
    false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def null?
 | 
			
		||||
    false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def <=>(other)
 | 
			
		||||
    return unless other.is_a?(Version)
 | 
			
		||||
    return 0 if version == other.version
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										38
									
								
								Library/Homebrew/version/null.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								Library/Homebrew/version/null.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
class Version
 | 
			
		||||
  NULL = Class.new do
 | 
			
		||||
    include Comparable
 | 
			
		||||
 | 
			
		||||
    def <=>(_other)
 | 
			
		||||
      -1
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def eql?(_other)
 | 
			
		||||
      # Makes sure that the same instance of Version::NULL
 | 
			
		||||
      # will never equal itself; normally Comparable#==
 | 
			
		||||
      # will return true for this regardless of the return
 | 
			
		||||
      # value of #<=>
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def detected_from_url?
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def head?
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def null?
 | 
			
		||||
      true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def to_f
 | 
			
		||||
      Float::NAN
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def to_s
 | 
			
		||||
      ""
 | 
			
		||||
    end
 | 
			
		||||
    alias_method :to_str, :to_s
 | 
			
		||||
  end.new
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user