| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "settings" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe Homebrew::SimulateSystem do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |   after do | 
					
						
							|  |  |  |     described_class.clear | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |   describe "::simulating_or_running_on_macos?" do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     it "returns true on macOS", :needs_macos do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_macos?).to be true | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on Linux", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_macos?).to be false | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on macOS when simulating Linux", :needs_macos do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :linux | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_macos?).to be false | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns true on Linux when simulating a generic macOS version", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :macos | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_macos?).to be true | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns true on Linux when simulating a specific macOS version", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :monterey | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_macos?).to be true | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns true on Linux with HOMEBREW_SIMULATE_MACOS_ON_LINUX", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |       expect(described_class.simulating_or_running_on_macos?).to be true | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |   describe "::simulating_or_running_on_linux?" do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     it "returns true on Linux", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_linux?).to be true | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on macOS", :needs_macos do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_linux?).to be false | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns true on macOS when simulating Linux", :needs_macos do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :linux | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_linux?).to be true | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on Linux when simulating a generic macOS version", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :macos | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_linux?).to be false | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on Linux when simulating a specific macOS version", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       described_class.os = :monterey | 
					
						
							| 
									
										
										
										
											2022-07-28 09:18:16 -04:00
										 |  |  |       expect(described_class.simulating_or_running_on_linux?).to be false | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns false on Linux with HOMEBREW_SIMULATE_MACOS_ON_LINUX", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |       expect(described_class.simulating_or_running_on_linux?).to be false | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns the current macOS version on macOS with HOMEBREW_SIMULATE_MACOS_ON_LINUX", :needs_macos do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |       expect(described_class.current_os).to eq MacOS.version.to_sym | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns `:macos` on Linux with HOMEBREW_SIMULATE_MACOS_ON_LINUX", :needs_linux do | 
					
						
							|  |  |  |       described_class.clear | 
					
						
							|  |  |  |       ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |       expect(described_class.current_os).to eq :macos | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-23 02:00:28 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | end |