| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  | require "software_spec" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe SoftwareSpec do | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |   alias_matcher :have_defined_resource, :be_resource_defined | 
					
						
							|  |  |  |   alias_matcher :have_defined_option, :be_option_defined | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |   subject(:spec) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-22 17:08:33 -08:00
										 |  |  |   let(:owner) { instance_double(Cask::Cask, name: "some_name", full_name: "some_name", tap: "homebrew/core") } | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "#resource" do | 
					
						
							|  |  |  |     it "defines a resource" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.resource("foo") { url "foo-1.0" } | 
					
						
							|  |  |  |       expect(spec).to have_defined_resource("foo") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "sets itself to be the resource's owner" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.resource("foo") { url "foo-1.0" } | 
					
						
							|  |  |  |       spec.owner = owner | 
					
						
							|  |  |  |       spec.resources.each_value do |r| | 
					
						
							|  |  |  |         expect(r.owner).to eq(spec) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "receives the owner's version if it has no own version" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.url("foo-42") | 
					
						
							|  |  |  |       spec.resource("bar") { url "bar" } | 
					
						
							|  |  |  |       spec.owner = owner | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(spec.resource("bar").version).to eq("42") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when duplicate resources are defined" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.resource("foo") { url "foo-1.0" } | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         spec.resource("foo") { url "foo-1.0" } | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(DuplicateResourceError) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when accessing missing resources" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.owner = owner | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         spec.resource("foo") | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(ResourceMissingError) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#owner" do | 
					
						
							|  |  |  |     it "sets the owner" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.owner = owner | 
					
						
							|  |  |  |       expect(spec.owner).to eq(owner) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "sets the name" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.owner = owner | 
					
						
							|  |  |  |       expect(spec.name).to eq(owner.name) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#option" do | 
					
						
							|  |  |  |     it "defines an option" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.option("foo") | 
					
						
							|  |  |  |       expect(spec).to have_defined_option("foo") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when it begins with dashes" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         spec.option("--foo") | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(ArgumentError) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when name is empty" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         spec.option("") | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(ArgumentError) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "special cases the cxx11 option" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.option(:cxx11) | 
					
						
							|  |  |  |       expect(spec).to have_defined_option("c++11") | 
					
						
							|  |  |  |       expect(spec).not_to have_defined_option("cxx11") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "supports options with descriptions" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.option("bar", "description") | 
					
						
							|  |  |  |       expect(spec.options.first.description).to eq("description") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "defaults to an empty string when no description is given" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.option("foo") | 
					
						
							|  |  |  |       expect(spec.options.first.description).to eq("") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#deprecated_option" do | 
					
						
							|  |  |  |     it "allows specifying deprecated options" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.deprecated_option("foo" => "bar") | 
					
						
							|  |  |  |       expect(spec.deprecated_options).not_to be_empty | 
					
						
							|  |  |  |       expect(spec.deprecated_options.first.old).to eq("foo") | 
					
						
							|  |  |  |       expect(spec.deprecated_options.first.current).to eq("bar") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "allows specifying deprecated options as a Hash from an Array/String to an Array/String" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.deprecated_option(["foo1", "foo2"] => "bar1", "foo3" => ["bar2", "bar3"]) | 
					
						
							|  |  |  |       expect(spec.deprecated_options).to include(DeprecatedOption.new("foo1", "bar1")) | 
					
						
							|  |  |  |       expect(spec.deprecated_options).to include(DeprecatedOption.new("foo2", "bar1")) | 
					
						
							|  |  |  |       expect(spec.deprecated_options).to include(DeprecatedOption.new("foo3", "bar2")) | 
					
						
							|  |  |  |       expect(spec.deprecated_options).to include(DeprecatedOption.new("foo3", "bar3")) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when empty" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         spec.deprecated_option({}) | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(ArgumentError) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#depends_on" do | 
					
						
							|  |  |  |     it "allows specifying dependencies" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.depends_on("foo") | 
					
						
							|  |  |  |       expect(spec.deps.first.name).to eq("foo") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "allows specifying optional dependencies" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.depends_on "foo" => :optional | 
					
						
							|  |  |  |       expect(spec).to have_defined_option("with-foo") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "allows specifying recommended dependencies" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.depends_on "bar" => :recommended | 
					
						
							|  |  |  |       expect(spec).to have_defined_option("without-bar") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |   describe "#uses_from_macos", :needs_linux do | 
					
						
							|  |  |  |     context "when running on Linux", :needs_linux do | 
					
						
							|  |  |  |       it "allows specifying dependencies" do | 
					
						
							|  |  |  |         spec.uses_from_macos("foo") | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  |         expect(spec.deps).not_to be_empty | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps.first.name).to eq("foo") | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.deps.first).not_to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       it "works with tags" do | 
					
						
							|  |  |  |         spec.uses_from_macos("foo" => :build) | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  |         expect(spec.deps).not_to be_empty | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps.first.name).to eq("foo") | 
					
						
							|  |  |  |         expect(spec.deps.first.tags).to include(:build) | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.deps.first).not_to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |       it "handles dependencies with HOMEBREW_SIMULATE_MACOS_ON_LINUX" do | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  |         ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |         spec.uses_from_macos("foo") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(spec.deps).to be_empty | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps.first.name).to eq("foo") | 
					
						
							|  |  |  |         expect(spec.declared_deps.first.tags).to be_empty | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |       it "handles dependencies with tags with HOMEBREW_SIMULATE_MACOS_ON_LINUX" do | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  |         ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"] = "1" | 
					
						
							|  |  |  |         spec.uses_from_macos("foo" => :build) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(spec.deps).to be_empty | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps.first.name).to eq("foo") | 
					
						
							|  |  |  |         expect(spec.declared_deps.first.tags).to include(:build) | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-28 14:52:19 -04:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       it "ignores OS version specifications" do | 
					
						
							|  |  |  |         spec.uses_from_macos("foo", since: :mojave) | 
					
						
							|  |  |  |         spec.uses_from_macos("bar" => :build, :since => :mojave) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.count).to eq 2
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps.first.name).to eq("foo") | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.deps.first).not_to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps.last.name).to eq("bar") | 
					
						
							|  |  |  |         expect(spec.deps.last.tags).to include(:build) | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.last).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.deps.last).not_to be_use_macos_install | 
					
						
							|  |  |  |         expect(spec.declared_deps.count).to eq 2
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |     context "when running on macOS", :needs_macos do | 
					
						
							|  |  |  |       before do | 
					
						
							|  |  |  |         allow(OS).to receive(:mac?).and_return(true) | 
					
						
							| 
									
										
										
										
											2023-05-09 02:15:28 +02:00
										 |  |  |         allow(OS::Mac).to receive(:version).and_return(MacOSVersion.from_symbol(:sierra)) | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "adds a macOS dependency if the OS version meets requirements" do | 
					
						
							|  |  |  |         spec.uses_from_macos("foo", since: :el_capitan) | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps).to be_empty | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.declared_deps.first).to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-04 15:10:14 +01:00
										 |  |  |       it "adds a macOS dependency if the OS version doesn't meet requirements" do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         spec.uses_from_macos("foo", since: :high_sierra) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  |         expect(spec.deps).not_to be_empty | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         expect(spec.deps.first.name).to eq("foo") | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.deps.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(spec.deps.first).not_to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "works with tags" do | 
					
						
							|  |  |  |         spec.uses_from_macos("foo" => :build, :since => :high_sierra) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  |         expect(spec.deps).not_to be_empty | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         dep = spec.deps.first | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(dep.name).to eq("foo") | 
					
						
							|  |  |  |         expect(dep.tags).to include(:build) | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(dep.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(dep.first).not_to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |       it "doesn't add an effective dependency if no OS version is specified" do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |         spec.uses_from_macos("foo") | 
					
						
							|  |  |  |         spec.uses_from_macos("bar" => :build) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(spec.deps).to be_empty | 
					
						
							| 
									
										
										
										
											2023-06-19 06:03:31 +01:00
										 |  |  |         expect(spec.declared_deps).not_to be_empty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dep = spec.declared_deps.first | 
					
						
							|  |  |  |         expect(dep.name).to eq("foo") | 
					
						
							|  |  |  |         expect(dep.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(dep.first).to be_use_macos_install | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         dep = spec.declared_deps.last | 
					
						
							|  |  |  |         expect(dep.name).to eq("bar") | 
					
						
							|  |  |  |         expect(dep.tags).to include(:build) | 
					
						
							|  |  |  |         expect(dep.first).to be_uses_from_macos | 
					
						
							|  |  |  |         expect(dep.first).to be_use_macos_install | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "raises an error if passing invalid OS versions" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |         expect do | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |           spec.uses_from_macos("foo", since: :bar) | 
					
						
							| 
									
										
										
										
											2023-05-09 02:15:28 +02:00
										 |  |  |         end.to raise_error(MacOSVersion::Error, "unknown or unsupported macOS version: :bar") | 
					
						
							| 
									
										
										
										
											2022-07-23 02:47:22 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2019-05-29 15:50:17 -03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |   specify "explicit options override defaupt depends_on option description" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     spec.option("with-foo", "blah") | 
					
						
							|  |  |  |     spec.depends_on("foo" => :optional) | 
					
						
							|  |  |  |     expect(spec.options.first.description).to eq("blah") | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#patch" do | 
					
						
							|  |  |  |     it "adds a patch" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       spec.patch(:p1, :DATA) | 
					
						
							|  |  |  |       expect(spec.patches.count).to eq(1) | 
					
						
							|  |  |  |       expect(spec.patches.first.strip).to eq(:p1) | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-15 18:25:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "doesn't add a patch with no url" do | 
					
						
							|  |  |  |       spec.patch do | 
					
						
							|  |  |  |         sha256 "7852a7a365f518b12a1afd763a6a80ece88ac7aeea3c9023aa6c1fe46ac5a1ae" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       expect(spec.patches.empty?).to be true | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-20 23:28:13 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |