Merge pull request #8859 from reitermarkus/macos-version
Refactor `OS::Mac::Version`.
This commit is contained in:
commit
ccb271bee4
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user