Merge pull request #8859 from reitermarkus/macos-version

Refactor `OS::Mac::Version`.
This commit is contained in:
Markus Reiter 2020-10-07 12:18:53 +02:00 committed by GitHub
commit ccb271bee4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 29 deletions

View File

@ -63,8 +63,8 @@ module Cask
else
MacOSRequirement.new([args.first], comparator: "==")
end
rescue MacOSVersionError
raise "invalid 'depends_on macos' value: #{args.first.inspect}"
rescue MacOSVersionError => e
raise "invalid 'depends_on macos' value: #{e}"
end
end

View File

@ -11,7 +11,7 @@ module OS
attr_reader :version, :path, :source
def initialize(version, path, source)
@version = OS::Mac::Version.new version
@version = version
@path = Pathname.new(path)
@source = source
end
@ -33,7 +33,7 @@ module OS
def latest_sdk
return if sdk_paths.empty?
v, path = sdk_paths.max { |a, b| OS::Mac::Version.new(a[0]) <=> OS::Mac::Version.new(b[0]) }
v, path = sdk_paths.max(&:first)
SDK.new v, path, source
end
@ -77,7 +77,7 @@ module OS
Dir[File.join(sdk_prefix, "MacOSX*.sdk")].each do |sdk_path|
version = sdk_path[/MacOSX(\d+\.\d+)u?\.sdk$/, 1]
paths[version] = sdk_path unless version.nil?
paths[OS::Mac::Version.new(version)] = sdk_path unless version.nil?
end
paths

View File

@ -24,15 +24,18 @@ module OS
new(str)
end
def initialize(*args)
super
def initialize(value)
super(value)
raise MacOSVersionError, value unless value.match?(/\A1\d+(?:\.\d+){0,2}\Z/)
@comparison_cache = {}
end
def <=>(other)
@comparison_cache.fetch(other) do
v = SYMBOLS.fetch(other) { other.to_s }
@comparison_cache[other] = super(Version.new(v))
@comparison_cache[other] = super(::Version.new(v))
end
end

View File

@ -7,10 +7,8 @@ describe SoftwareSpec do
describe "#uses_from_macos" do
before do
sierra_os_version = OS::Mac::Version.from_symbol(:sierra)
allow(OS).to receive(:mac?).and_return(true)
allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.new(sierra_os_version))
allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.from_symbol(:sierra))
end
it "adds a macOS dependency if the OS version meets requirements" do

View File

@ -4,41 +4,49 @@ require "version"
require "os/mac/version"
describe OS::Mac::Version do
subject { described_class.new("10.14") }
subject(:version) { described_class.new("10.14") }
specify "comparison with Symbol" do
expect(subject).to be > :high_sierra
expect(subject).to be == :mojave
expect(subject).to be === :mojave # rubocop:disable Style/CaseEquality
expect(subject).to be < :catalina
expect(version).to be > :high_sierra
expect(version).to be == :mojave
expect(version).to be === :mojave # rubocop:disable Style/CaseEquality
expect(version).to be < :catalina
end
specify "comparison with Fixnum" do
expect(subject).to be > 10
expect(subject).to be < 11
expect(version).to be > 10
expect(version).to be < 11
end
specify "comparison with Float" do
expect(subject).to be > 10.13
expect(subject).to be < 10.15
expect(version).to be > 10.13
expect(version).to be < 10.15
end
specify "comparison with String" do
expect(subject).to be > "10.3"
expect(subject).to be == "10.14"
expect(subject).to be === "10.14" # rubocop:disable Style/CaseEquality
expect(subject).to be < "10.15"
expect(version).to be > "10.3"
expect(version).to be == "10.14"
expect(version).to be === "10.14" # rubocop:disable Style/CaseEquality
expect(version).to be < "10.15"
end
specify "comparison with Version" do
expect(subject).to be > Version.create("10.3")
expect(subject).to be == Version.create("10.14")
expect(subject).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
expect(subject).to be < Version.create("10.15")
expect(version).to be > Version.create("10.3")
expect(version).to be == Version.create("10.14")
expect(version).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
expect(version).to be < Version.create("10.15")
end
describe "#new" do
it "raises an error if the version is not a valid macOS version" do
expect {
described_class.new("1.2")
}.to raise_error(MacOSVersionError, 'unknown or unsupported macOS version: "1.2"')
end
end
specify "#from_symbol" do
expect(described_class.from_symbol(:mojave)).to eq(subject)
expect(described_class.from_symbol(:mojave)).to eq(version)
expect { described_class.from_symbol(:foo) }
.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
end