| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  | require "diagnostic" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Homebrew::Diagnostic::Checks do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |   subject(:checks) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  |   specify "#check_for_unsupported_macos" do | 
					
						
							|  |  |  |     ENV.delete("HOMEBREW_DEVELOPER") | 
					
						
							| 
									
										
										
										
											2020-11-23 10:14:18 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     macos_version = OS::Mac::Version.new("10.14") | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:version).and_return(macos_version) | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:full_version).and_return(macos_version) | 
					
						
							| 
									
										
										
										
											2021-06-22 13:06:46 -04:00
										 |  |  |     allow(OS::Mac.version).to receive(:outdated_release?).and_return(false) | 
					
						
							|  |  |  |     allow(OS::Mac.version).to receive(:prerelease?).and_return(true) | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     expect(checks.check_for_unsupported_macos) | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  |       .to match("We do not provide support for this pre-release version.") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-02 08:53:05 +01:00
										 |  |  |   specify "#check_if_xcode_needs_clt_installed" do | 
					
						
							| 
									
										
										
										
											2020-11-23 10:14:18 +01:00
										 |  |  |     macos_version = OS::Mac::Version.new("10.11") | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:version).and_return(macos_version) | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:full_version).and_return(macos_version) | 
					
						
							|  |  |  |     allow(OS::Mac::Xcode).to receive(:installed?).and_return(true) | 
					
						
							|  |  |  |     allow(OS::Mac::Xcode).to receive(:version).and_return("8.0") | 
					
						
							|  |  |  |     allow(OS::Mac::Xcode).to receive(:without_clt?).and_return(true) | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     expect(checks.check_if_xcode_needs_clt_installed) | 
					
						
							| 
									
										
										
										
											2018-04-02 08:53:05 +01:00
										 |  |  |       .to match("Xcode alone is not sufficient on El Capitan") | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-05-27 13:34:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-06 13:45:09 +07:00
										 |  |  |   specify "#check_ruby_version" do | 
					
						
							| 
									
										
										
										
											2020-11-23 10:14:18 +01:00
										 |  |  |     macos_version = OS::Mac::Version.new("10.12") | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:version).and_return(macos_version) | 
					
						
							|  |  |  |     allow(OS::Mac).to receive(:full_version).and_return(macos_version) | 
					
						
							| 
									
										
										
										
											2017-09-15 08:06:58 +01:00
										 |  |  |     stub_const("RUBY_VERSION", "1.8.6") | 
					
						
							| 
									
										
										
										
											2017-06-06 13:45:09 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     expect(checks.check_ruby_version) | 
					
						
							| 
									
										
										
										
											2021-10-21 21:05:51 +08:00
										 |  |  |       .to match "Ruby version 1.8.6 is unsupported on macOS 10.12" | 
					
						
							| 
									
										
										
										
											2017-06-06 13:45:09 +07:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2021-02-07 04:21:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "#check_if_supported_sdk_available" do | 
					
						
							|  |  |  |     let(:macos_version) { OS::Mac::Version.new("11") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       allow(DevelopmentTools).to receive(:installed?).and_return(true) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:version).and_return(macos_version) | 
					
						
							| 
									
										
										
										
											2021-03-30 04:23:25 +01:00
										 |  |  |       allow(OS::Mac::CLT).to receive(:below_minimum_version?).and_return(false) | 
					
						
							|  |  |  |       allow(OS::Mac::Xcode).to receive(:below_minimum_version?).and_return(false) | 
					
						
							| 
									
										
										
										
											2021-02-07 04:21:59 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "doesn't trigger when SDK root is not needed" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_root_needed?).and_return(false) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk).and_return(nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_if_supported_sdk_available).to be_nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "doesn't trigger when a valid SDK is present" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_root_needed?).and_return(true) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk).and_return(OS::Mac::SDK.new(macos_version, "/some/path/MacOSX.sdk", :clt)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_if_supported_sdk_available).to be_nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "triggers when a valid SDK is not present on CLT systems" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_root_needed?).and_return(true) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk).and_return(nil) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_locator).and_return(OS::Mac::CLT.sdk_locator) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_if_supported_sdk_available) | 
					
						
							|  |  |  |         .to include("Your Command Line Tools (CLT) does not support macOS #{macos_version}") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "triggers when a valid SDK is not present on Xcode systems" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_root_needed?).and_return(true) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk).and_return(nil) | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_locator).and_return(OS::Mac::Xcode.sdk_locator) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_if_supported_sdk_available) | 
					
						
							|  |  |  |         .to include("Your Xcode does not support macOS #{macos_version}") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#check_broken_sdks" do | 
					
						
							|  |  |  |     it "doesn't trigger when SDK versions are as expected" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_locator).and_return(OS::Mac::CLT.sdk_locator) | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |       allow_any_instance_of(OS::Mac::CLTSDKLocator).to receive(:all_sdks).and_return([ | 
					
						
							|  |  |  |         OS::Mac::SDK.new(OS::Mac::Version.new("11"), "/some/path/MacOSX.sdk", :clt), | 
					
						
							|  |  |  |         OS::Mac::SDK.new(OS::Mac::Version.new("10.15"), "/some/path/MacOSX10.15.sdk", :clt), | 
					
						
							|  |  |  |       ]) | 
					
						
							| 
									
										
										
										
											2021-02-07 04:21:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_broken_sdks).to be_nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "triggers when the CLT SDK version doesn't match the folder name" do | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |       allow_any_instance_of(OS::Mac::CLTSDKLocator).to receive(:all_sdks).and_return([ | 
					
						
							|  |  |  |         OS::Mac::SDK.new(OS::Mac::Version.new("10.14"), "/some/path/MacOSX10.15.sdk", :clt), | 
					
						
							|  |  |  |       ]) | 
					
						
							| 
									
										
										
										
											2021-02-07 04:21:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_broken_sdks) | 
					
						
							|  |  |  |         .to include("SDKs in your Command Line Tools (CLT) installation do not match the SDK folder names") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "triggers when the Xcode SDK version doesn't match the folder name" do | 
					
						
							|  |  |  |       allow(OS::Mac).to receive(:sdk_locator).and_return(OS::Mac::Xcode.sdk_locator) | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |       allow_any_instance_of(OS::Mac::XcodeSDKLocator).to receive(:all_sdks).and_return([ | 
					
						
							|  |  |  |         OS::Mac::SDK.new(OS::Mac::Version.new("10.14"), "/some/path/MacOSX10.15.sdk", :xcode), | 
					
						
							|  |  |  |       ]) | 
					
						
							| 
									
										
										
										
											2021-02-07 04:21:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect(checks.check_broken_sdks) | 
					
						
							|  |  |  |         .to include("The contents of the SDKs in your Xcode installation do not match the SDK folder names") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-25 10:19:27 +01:00
										 |  |  | end |