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
|
else
|
||||||
MacOSRequirement.new([args.first], comparator: "==")
|
MacOSRequirement.new([args.first], comparator: "==")
|
||||||
end
|
end
|
||||||
rescue MacOSVersionError
|
rescue MacOSVersionError => e
|
||||||
raise "invalid 'depends_on macos' value: #{args.first.inspect}"
|
raise "invalid 'depends_on macos' value: #{e}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ module OS
|
|||||||
attr_reader :version, :path, :source
|
attr_reader :version, :path, :source
|
||||||
|
|
||||||
def initialize(version, path, source)
|
def initialize(version, path, source)
|
||||||
@version = OS::Mac::Version.new version
|
@version = version
|
||||||
@path = Pathname.new(path)
|
@path = Pathname.new(path)
|
||||||
@source = source
|
@source = source
|
||||||
end
|
end
|
||||||
@ -33,7 +33,7 @@ module OS
|
|||||||
def latest_sdk
|
def latest_sdk
|
||||||
return if sdk_paths.empty?
|
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
|
SDK.new v, path, source
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ module OS
|
|||||||
|
|
||||||
Dir[File.join(sdk_prefix, "MacOSX*.sdk")].each do |sdk_path|
|
Dir[File.join(sdk_prefix, "MacOSX*.sdk")].each do |sdk_path|
|
||||||
version = sdk_path[/MacOSX(\d+\.\d+)u?\.sdk$/, 1]
|
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
|
end
|
||||||
|
|
||||||
paths
|
paths
|
||||||
|
|||||||
@ -24,15 +24,18 @@ module OS
|
|||||||
new(str)
|
new(str)
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(*args)
|
def initialize(value)
|
||||||
super
|
super(value)
|
||||||
|
|
||||||
|
raise MacOSVersionError, value unless value.match?(/\A1\d+(?:\.\d+){0,2}\Z/)
|
||||||
|
|
||||||
@comparison_cache = {}
|
@comparison_cache = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
def <=>(other)
|
def <=>(other)
|
||||||
@comparison_cache.fetch(other) do
|
@comparison_cache.fetch(other) do
|
||||||
v = SYMBOLS.fetch(other) { other.to_s }
|
v = SYMBOLS.fetch(other) { other.to_s }
|
||||||
@comparison_cache[other] = super(Version.new(v))
|
@comparison_cache[other] = super(::Version.new(v))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -7,10 +7,8 @@ describe SoftwareSpec do
|
|||||||
|
|
||||||
describe "#uses_from_macos" do
|
describe "#uses_from_macos" do
|
||||||
before do
|
before do
|
||||||
sierra_os_version = OS::Mac::Version.from_symbol(:sierra)
|
|
||||||
|
|
||||||
allow(OS).to receive(:mac?).and_return(true)
|
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
|
end
|
||||||
|
|
||||||
it "adds a macOS dependency if the OS version meets requirements" do
|
it "adds a macOS dependency if the OS version meets requirements" do
|
||||||
|
|||||||
@ -4,41 +4,49 @@ require "version"
|
|||||||
require "os/mac/version"
|
require "os/mac/version"
|
||||||
|
|
||||||
describe OS::Mac::Version do
|
describe OS::Mac::Version do
|
||||||
subject { described_class.new("10.14") }
|
subject(:version) { described_class.new("10.14") }
|
||||||
|
|
||||||
specify "comparison with Symbol" do
|
specify "comparison with Symbol" do
|
||||||
expect(subject).to be > :high_sierra
|
expect(version).to be > :high_sierra
|
||||||
expect(subject).to be == :mojave
|
expect(version).to be == :mojave
|
||||||
expect(subject).to be === :mojave # rubocop:disable Style/CaseEquality
|
expect(version).to be === :mojave # rubocop:disable Style/CaseEquality
|
||||||
expect(subject).to be < :catalina
|
expect(version).to be < :catalina
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "comparison with Fixnum" do
|
specify "comparison with Fixnum" do
|
||||||
expect(subject).to be > 10
|
expect(version).to be > 10
|
||||||
expect(subject).to be < 11
|
expect(version).to be < 11
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "comparison with Float" do
|
specify "comparison with Float" do
|
||||||
expect(subject).to be > 10.13
|
expect(version).to be > 10.13
|
||||||
expect(subject).to be < 10.15
|
expect(version).to be < 10.15
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "comparison with String" do
|
specify "comparison with String" do
|
||||||
expect(subject).to be > "10.3"
|
expect(version).to be > "10.3"
|
||||||
expect(subject).to be == "10.14"
|
expect(version).to be == "10.14"
|
||||||
expect(subject).to be === "10.14" # rubocop:disable Style/CaseEquality
|
expect(version).to be === "10.14" # rubocop:disable Style/CaseEquality
|
||||||
expect(subject).to be < "10.15"
|
expect(version).to be < "10.15"
|
||||||
end
|
end
|
||||||
|
|
||||||
specify "comparison with Version" do
|
specify "comparison with Version" do
|
||||||
expect(subject).to be > Version.create("10.3")
|
expect(version).to be > Version.create("10.3")
|
||||||
expect(subject).to be == Version.create("10.14")
|
expect(version).to be == Version.create("10.14")
|
||||||
expect(subject).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
|
expect(version).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.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
|
end
|
||||||
|
|
||||||
specify "#from_symbol" do
|
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) }
|
expect { described_class.from_symbol(:foo) }
|
||||||
.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
|
.to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user