Simplify SimulateSystem usage
This commit is contained in:
parent
5080312bdd
commit
fa384b03fa
@ -15,8 +15,7 @@ module OnSystem
|
||||
def arch_condition_met?(arch)
|
||||
raise ArgumentError, "Invalid arch condition: #{arch.inspect}" if ARCH_OPTIONS.exclude?(arch)
|
||||
|
||||
current_arch = Homebrew::SimulateSystem.arch || Hardware::CPU.type
|
||||
arch == current_arch
|
||||
arch == Homebrew::SimulateSystem.current_arch
|
||||
end
|
||||
|
||||
sig { params(os_name: Symbol, or_condition: T.nilable(Symbol)).returns(T::Boolean) }
|
||||
@ -26,14 +25,7 @@ module OnSystem
|
||||
return true if [:macos, *MacOSVersions::SYMBOLS.keys].include?(os_name)
|
||||
end
|
||||
|
||||
if BASE_OS_OPTIONS.include?(os_name)
|
||||
if Homebrew::SimulateSystem.none?
|
||||
return OS.linux? if os_name == :linux
|
||||
return OS.mac? if os_name == :macos
|
||||
end
|
||||
|
||||
return Homebrew::SimulateSystem.send("#{os_name}?")
|
||||
end
|
||||
return Homebrew::SimulateSystem.send("treat_as_#{os_name}?") if BASE_OS_OPTIONS.include?(os_name)
|
||||
|
||||
raise ArgumentError, "Invalid OS condition: #{os_name.inspect}" unless MacOSVersions::SYMBOLS.key?(os_name)
|
||||
|
||||
@ -41,10 +33,10 @@ module OnSystem
|
||||
raise ArgumentError, "Invalid OS `or_*` condition: #{or_condition.inspect}"
|
||||
end
|
||||
|
||||
return false if Homebrew::SimulateSystem.linux? || (Homebrew::SimulateSystem.none? && OS.linux?)
|
||||
return false if Homebrew::SimulateSystem.treat_as_linux?
|
||||
|
||||
base_os = MacOS::Version.from_symbol(os_name)
|
||||
current_os = MacOS::Version.from_symbol(Homebrew::SimulateSystem.os || MacOS.version.to_sym)
|
||||
current_os = MacOS::Version.from_symbol(Homebrew::SimulateSystem.current_os)
|
||||
|
||||
return current_os >= base_os if or_condition == :or_newer
|
||||
return current_os <= base_os if or_condition == :or_older
|
||||
|
||||
@ -32,19 +32,31 @@ module Homebrew
|
||||
end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def none?
|
||||
@os.nil? && @arch.nil?
|
||||
end
|
||||
def treat_as_macos?
|
||||
return OS.mac? if @os.blank?
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def macos?
|
||||
[:macos, *MacOSVersions::SYMBOLS.keys].include?(@os)
|
||||
end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def linux?
|
||||
def treat_as_linux?
|
||||
return OS.linux? if @os.blank?
|
||||
|
||||
@os == :linux
|
||||
end
|
||||
|
||||
sig { returns(Symbol) }
|
||||
def current_arch
|
||||
@arch || Hardware::CPU.type
|
||||
end
|
||||
|
||||
sig { returns(Symbol) }
|
||||
def current_os
|
||||
return @os if @os.present?
|
||||
return :linux if OS.linux?
|
||||
|
||||
MacOS.version.to_sym
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
118
Library/Homebrew/test/simulate_system_spec.rb
Normal file
118
Library/Homebrew/test/simulate_system_spec.rb
Normal file
@ -0,0 +1,118 @@
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "settings"
|
||||
|
||||
describe Homebrew::SimulateSystem do
|
||||
after do
|
||||
described_class.clear
|
||||
end
|
||||
|
||||
describe "::treat_as_macos?" do
|
||||
it "returns true on macOS", :needs_macos do
|
||||
described_class.clear
|
||||
expect(described_class.treat_as_macos?).to be true
|
||||
end
|
||||
|
||||
it "returns false on Linux", :needs_linux do
|
||||
described_class.clear
|
||||
expect(described_class.treat_as_macos?).to be false
|
||||
end
|
||||
|
||||
it "returns false on macOS when simulating Linux", :needs_macos do
|
||||
described_class.clear
|
||||
described_class.os = :linux
|
||||
expect(described_class.treat_as_macos?).to be false
|
||||
end
|
||||
|
||||
it "returns true on Linux when simulating a generic macOS version", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :macos
|
||||
expect(described_class.treat_as_macos?).to be true
|
||||
end
|
||||
|
||||
it "returns true on Linux when simulating a specific macOS version", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :monterey
|
||||
expect(described_class.treat_as_macos?).to be true
|
||||
end
|
||||
end
|
||||
|
||||
describe "::treat_as_linux?" do
|
||||
it "returns true on Linux", :needs_linux do
|
||||
described_class.clear
|
||||
expect(described_class.treat_as_linux?).to be true
|
||||
end
|
||||
|
||||
it "returns false on macOS", :needs_macos do
|
||||
described_class.clear
|
||||
expect(described_class.treat_as_linux?).to be false
|
||||
end
|
||||
|
||||
it "returns true on macOS when simulating Linux", :needs_macos do
|
||||
described_class.clear
|
||||
described_class.os = :linux
|
||||
expect(described_class.treat_as_linux?).to be true
|
||||
end
|
||||
|
||||
it "returns false on Linux when simulating a generic macOS version", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :macos
|
||||
expect(described_class.treat_as_linux?).to be false
|
||||
end
|
||||
|
||||
it "returns false on Linux when simulating a specific macOS version", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :monterey
|
||||
expect(described_class.treat_as_linux?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe "::current_arch" do
|
||||
it "returns the current architecture" do
|
||||
described_class.clear
|
||||
expect(described_class.current_arch).to eq Hardware::CPU.type
|
||||
end
|
||||
|
||||
it "returns the simulated architecture" do
|
||||
described_class.clear
|
||||
simulated_arch = if Hardware::CPU.arm?
|
||||
:intel
|
||||
else
|
||||
:arm
|
||||
end
|
||||
described_class.arch = simulated_arch
|
||||
expect(described_class.current_arch).to eq simulated_arch
|
||||
end
|
||||
end
|
||||
|
||||
describe "::current_os" do
|
||||
it "returns the current macOS version on macOS", :needs_macos do
|
||||
described_class.clear
|
||||
expect(described_class.current_os).to eq MacOS.version.to_sym
|
||||
end
|
||||
|
||||
it "returns `:linux` on Linux", :needs_linux do
|
||||
described_class.clear
|
||||
expect(described_class.current_os).to eq :linux
|
||||
end
|
||||
|
||||
it "returns `:linux` when simulating Linux on macOS", :needs_macos do
|
||||
described_class.clear
|
||||
described_class.os = :linux
|
||||
expect(described_class.current_os).to eq :linux
|
||||
end
|
||||
|
||||
it "returns `:macos` when simulating a generic macOS version on Linux", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :macos
|
||||
expect(described_class.current_os).to eq :macos
|
||||
end
|
||||
|
||||
it "returns `:macos` when simulating a specific macOS version on Linux", :needs_linux do
|
||||
described_class.clear
|
||||
described_class.os = :monterey
|
||||
expect(described_class.current_os).to eq :monterey
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user