diff --git a/Library/Homebrew/macos_version.rb b/Library/Homebrew/macos_version.rb index b3a3444a4e..9c1cd7117f 100644 --- a/Library/Homebrew/macos_version.rb +++ b/Library/Homebrew/macos_version.rb @@ -31,6 +31,17 @@ class MacOSVersion < Version el_capitan: "10.11", }.freeze + sig { params(macos_version: MacOSVersion).returns(Version) } + def self.kernel_major_version(macos_version) + version_major = macos_version.major.to_i + if version_major > 10 + Version.new((version_major + 9).to_s) + else + version_minor = macos_version.minor.to_i + Version.new((version_minor + 4).to_s) + end + end + sig { params(version: Symbol).returns(T.attached_class) } def self.from_symbol(version) str = SYMBOLS.fetch(version) { raise MacOSVersion::Error, version } diff --git a/Library/Homebrew/test/macos_version_spec.rb b/Library/Homebrew/test/macos_version_spec.rb index 826059ecb9..6f74bc1fa3 100644 --- a/Library/Homebrew/test/macos_version_spec.rb +++ b/Library/Homebrew/test/macos_version_spec.rb @@ -7,6 +7,18 @@ RSpec.describe MacOSVersion do let(:big_sur_major) { described_class.new("11.0") } let(:big_sur_update) { described_class.new("11.1") } + describe ".kernel_major_version" do + it "returns the kernel major version" do + expect(described_class.kernel_major_version(version)).to eq "18" + expect(described_class.kernel_major_version(big_sur_major)).to eq "20" + expect(described_class.kernel_major_version(big_sur_update)).to eq "20" + end + + it "matches the major version returned by OS.kernel_version", :needs_macos do + expect(described_class.kernel_major_version(OS::Mac.version)).to eq OS.kernel_version.major + end + end + specify "comparison with Symbol" do expect(version).to be > :high_sierra expect(version).to eq :mojave