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
	 Markus Reiter
						Markus Reiter