| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | describe Cask::Cask, :cask do | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   let(:cask) { described_class.new("versioned-cask") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when multiple versions are installed" do | 
					
						
							|  |  |  |     describe "#versions" do | 
					
						
							| 
									
										
										
										
											2021-02-19 23:15:33 +00:00
										 |  |  |       context "when there are duplicate versions" do | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |         it "uses the last unique version" do | 
					
						
							|  |  |  |           allow(cask).to receive(:timestamped_versions).and_return([ | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |             ["1.2.2", "0999"], | 
					
						
							|  |  |  |             ["1.2.3", "1000"], | 
					
						
							|  |  |  |             ["1.2.2", "1001"], | 
					
						
							|  |  |  |           ]) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           expect(cask).to receive(:timestamped_versions) | 
					
						
							|  |  |  |           expect(cask.versions).to eq([ | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |             "1.2.3", | 
					
						
							|  |  |  |             "1.2.2", | 
					
						
							|  |  |  |           ]) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "load" do | 
					
						
							| 
									
										
										
										
											2018-06-09 10:13:28 +02:00
										 |  |  |     let(:tap_path) { Tap.default_cask_tap.path } | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |     let(:file_dirname) { Pathname.new(__FILE__).dirname } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:28:39 +01:00
										 |  |  |     let(:relative_tap_path) { tap_path.relative_path_from(file_dirname) } | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns an instance of the Cask for the given token" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load("local-caffeine") | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |       expect(c).to be_a(described_class) | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |       expect(c.token).to eq("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns an instance of the Cask from a specific file location" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load("#{tap_path}/Casks/local-caffeine.rb") | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |       expect(c).to be_a(described_class) | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |       expect(c.token).to eq("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  |     it "returns an instance of the Cask from a JSON file" do | 
					
						
							|  |  |  |       c = Cask::CaskLoader.load("#{tap_path}/caffeine.json") | 
					
						
							|  |  |  |       expect(c).to be_a(described_class) | 
					
						
							|  |  |  |       expect(c.token).to eq("caffeine") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 17:31:11 -04:00
										 |  |  |     it "returns an instance of the Cask from a URL" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load("file://#{tap_path}/Casks/local-caffeine.rb") | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |       expect(c).to be_a(described_class) | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |       expect(c.token).to eq("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 17:31:11 -04:00
										 |  |  |     it "raises an error when failing to download a Cask from a URL" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  |         Cask::CaskLoader.load("file://#{tap_path}/Casks/notacask.rb") | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(Cask::CaskUnavailableError) | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns an instance of the Cask from a relative file location" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load(relative_tap_path/"Casks/local-caffeine.rb") | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |       expect(c).to be_a(described_class) | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |       expect(c.token).to eq("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "uses exact match when loading by token" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       expect(Cask::CaskLoader.load("test-opera").token).to eq("test-opera") | 
					
						
							|  |  |  |       expect(Cask::CaskLoader.load("test-opera-mail").token).to eq("test-opera-mail") | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when attempting to load a Cask that doesn't exist" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |         Cask::CaskLoader.load("notacask") | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(Cask::CaskUnavailableError) | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "metadata" do | 
					
						
							|  |  |  |     it "proposes a versioned metadata directory name for each instance" do | 
					
						
							| 
									
										
										
										
											2017-03-04 21:42:09 +01:00
										 |  |  |       cask_token = "local-caffeine" | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load(cask_token) | 
					
						
							|  |  |  |       metadata_timestamped_path = Cask::Caskroom.path.join(cask_token, ".metadata", c.version) | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:32 +02:00
										 |  |  |       expect(c.metadata_versioned_path.to_s).to eq(metadata_timestamped_path.to_s) | 
					
						
							| 
									
										
										
										
											2017-02-09 04:15:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "outdated" do | 
					
						
							|  |  |  |     it "ignores the Casks that have auto_updates true (without --greedy)" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load("auto-updates") | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |       expect(c).not_to be_outdated | 
					
						
							|  |  |  |       expect(c.outdated_versions).to be_empty | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "ignores the Casks that have version :latest (without --greedy)" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       c = Cask::CaskLoader.load("version-latest-string") | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |       expect(c).not_to be_outdated | 
					
						
							|  |  |  |       expect(c.outdated_versions).to be_empty | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "versioned casks" do | 
					
						
							|  |  |  |       subject { cask.outdated_versions } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |       let(:cask) { described_class.new("basic-cask") } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |       shared_examples "versioned casks" do |tap_version, expectations| | 
					
						
							|  |  |  |         expectations.each do |installed_versions, expected_output| | 
					
						
							|  |  |  |           context "when versions #{installed_versions.inspect} are installed and the tap version is #{tap_version}" do | 
					
						
							|  |  |  |             it { | 
					
						
							|  |  |  |               allow(cask).to receive(:versions).and_return(installed_versions) | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |               allow(cask).to receive(:version).and_return(Cask::DSL::Version.new(tap_version)) | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |               expect(cask).to receive(:outdated_versions).and_call_original | 
					
						
							| 
									
										
										
										
											2018-09-20 09:07:56 +01:00
										 |  |  |               expect(subject).to eq expected_output | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe "installed version is equal to tap version => not outdated" do | 
					
						
							|  |  |  |         include_examples "versioned casks", "1.2.3", | 
					
						
							|  |  |  |                          ["1.2.3"]          => [], | 
					
						
							|  |  |  |                          ["1.2.4", "1.2.3"] => [] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe "installed version is different than tap version => outdated" do | 
					
						
							|  |  |  |         include_examples "versioned casks", "1.2.4", | 
					
						
							|  |  |  |                          ["1.2.3"]                   => ["1.2.3"], | 
					
						
							|  |  |  |                          ["1.2.4", "1.2.3"]          => ["1.2.3"], | 
					
						
							|  |  |  |                          ["1.2.2", "1.2.3"]          => ["1.2.2", "1.2.3"], | 
					
						
							|  |  |  |                          ["1.2.2", "1.2.4", "1.2.3"] => ["1.2.2", "1.2.3"] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe ":latest casks" do | 
					
						
							|  |  |  |       let(:cask) { described_class.new("basic-cask") } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |       shared_examples ":latest cask" do |greedy, outdated_sha, tap_version, expectations| | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |         expectations.each do |installed_version, expected_output| | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |           context "when versions #{installed_version} are installed and the " \ | 
					
						
							| 
									
										
										
										
											2022-05-30 18:30:18 +10:00
										 |  |  |                   "tap version is #{tap_version}, #{"not " unless greedy}greedy " \ | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |                   "and sha is #{"not " unless outdated_sha}outdated" do | 
					
						
							| 
									
										
										
										
											2020-08-19 17:12:32 +01:00
										 |  |  |             subject { cask.outdated_versions(greedy: greedy) } | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |             it { | 
					
						
							|  |  |  |               allow(cask).to receive(:versions).and_return(installed_version) | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |               allow(cask).to receive(:version).and_return(Cask::DSL::Version.new(tap_version)) | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |               allow(cask).to receive(:outdated_download_sha?).and_return(outdated_sha) | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |               expect(cask).to receive(:outdated_versions).and_call_original | 
					
						
							| 
									
										
										
										
											2018-09-20 09:07:56 +01:00
										 |  |  |               expect(subject).to eq expected_output | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe ":latest version installed, :latest version in tap" do | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", false, false, "latest", | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |                          ["latest"] => [] | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", true, false, "latest", | 
					
						
							|  |  |  |                          ["latest"] => [] | 
					
						
							|  |  |  |         include_examples ":latest cask", true, true, "latest", | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |                          ["latest"] => ["latest"] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe "numbered version installed, :latest version in tap" do | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", false, false, "latest", | 
					
						
							| 
									
										
										
										
											2022-05-30 18:30:18 +10:00
										 |  |  |                          ["1.2.3"] => [] | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", true, false, "latest", | 
					
						
							|  |  |  |                          ["1.2.3"] => [] | 
					
						
							|  |  |  |         include_examples ":latest cask", true, true, "latest", | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |                          ["1.2.3"] => ["1.2.3"] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe "latest version installed, numbered version in tap" do | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", false, false, "1.2.3", | 
					
						
							|  |  |  |                          ["latest"] => ["latest"] | 
					
						
							|  |  |  |         include_examples ":latest cask", true, false, "1.2.3", | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |                          ["latest"] => ["latest"] | 
					
						
							| 
									
										
										
										
											2022-05-07 20:19:54 -07:00
										 |  |  |         include_examples ":latest cask", true, true, "1.2.3", | 
					
						
							| 
									
										
										
										
											2017-02-27 22:33:34 +02:00
										 |  |  |                          ["latest"] => ["latest"] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-07-08 19:33:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "full_name" do | 
					
						
							|  |  |  |     context "when it is a core cask" do | 
					
						
							|  |  |  |       it "is the cask token" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |         c = Cask::CaskLoader.load("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-07-08 19:33:44 -07:00
										 |  |  |         expect(c.full_name).to eq("local-caffeine") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when it is from a non-core tap" do | 
					
						
							|  |  |  |       it "returns the fully-qualified name of the cask" do | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |         c = Cask::CaskLoader.load("third-party/tap/third-party-cask") | 
					
						
							| 
									
										
										
										
											2017-07-08 19:33:44 -07:00
										 |  |  |         expect(c.full_name).to eq("third-party/tap/third-party-cask") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when it is from no known tap" do | 
					
						
							| 
									
										
										
										
											2019-08-19 14:27:29 +10:00
										 |  |  |       it "returns the cask token" do | 
					
						
							| 
									
										
										
										
											2017-07-08 19:33:44 -07:00
										 |  |  |         file = Tempfile.new(%w[tapless-cask .rb]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |           cask_name = File.basename(file.path, ".rb") | 
					
						
							|  |  |  |           file.write "cask '#{cask_name}'" | 
					
						
							|  |  |  |           file.close | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |           c = Cask::CaskLoader.load(file.path) | 
					
						
							| 
									
										
										
										
											2017-07-08 19:33:44 -07:00
										 |  |  |           expect(c.full_name).to eq(cask_name) | 
					
						
							|  |  |  |         ensure | 
					
						
							|  |  |  |           file.close | 
					
						
							|  |  |  |           file.unlink | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  |   describe "#to_h" do | 
					
						
							| 
									
										
										
										
											2023-03-18 13:19:20 +00:00
										 |  |  |     let(:expected_json) { File.read("#{TEST_FIXTURE_DIR}/cask/everything.json").strip } | 
					
						
							| 
									
										
										
										
											2023-03-18 15:16:15 +00:00
										 |  |  |     let(:expected_json_after_ventura) do | 
					
						
							|  |  |  |       File.read("#{TEST_FIXTURE_DIR}/cask/everything-systemsettings-caveats.json").strip | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     context "when loaded from cask file" do | 
					
						
							|  |  |  |       it "returns expected hash" do | 
					
						
							|  |  |  |         hash = Cask::CaskLoader.load("everything").to_h | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(hash).to be_a(Hash) | 
					
						
							| 
									
										
										
										
											2023-03-18 13:19:20 +00:00
										 |  |  |         if MacOS.version >= :ventura | 
					
						
							| 
									
										
										
										
											2023-03-18 15:16:15 +00:00
										 |  |  |           expect(JSON.pretty_generate(hash)).to eq(expected_json_after_ventura) | 
					
						
							| 
									
										
										
										
											2023-03-18 13:19:20 +00:00
										 |  |  |         else | 
					
						
							|  |  |  |           expect(JSON.pretty_generate(hash)).to eq(expected_json) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when loaded from json file" do | 
					
						
							|  |  |  |       it "returns expected hash" do | 
					
						
							|  |  |  |         expect(Homebrew::API::Cask).not_to receive(:fetch_source) | 
					
						
							| 
									
										
										
										
											2023-03-03 22:13:41 +00:00
										 |  |  |         hash = Cask::CaskLoader::FromAPILoader.new( | 
					
						
							|  |  |  |           "everything", from_json: JSON.parse(expected_json) | 
					
						
							|  |  |  |         ).load(config: nil).to_h | 
					
						
							| 
									
										
										
										
											2023-02-19 15:26:09 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         expect(hash).to be_a(Hash) | 
					
						
							|  |  |  |         expect(JSON.pretty_generate(hash)).to eq(expected_json) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |   describe "#to_hash_with_variations" do | 
					
						
							|  |  |  |     let!(:original_macos_version) { MacOS.full_version.to_s } | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     let(:expected_versions_variations) do | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |       <<~JSON | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "arm64_big_sur": { | 
					
						
							| 
									
										
										
										
											2022-08-09 11:34:52 -04:00
										 |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin-arm64/1.2.0/arm.zip", | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |             "version": "1.2.0", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "monterey": { | 
					
						
							| 
									
										
										
										
											2022-08-09 11:34:52 -04:00
										 |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.3/intel.zip" | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |           }, | 
					
						
							|  |  |  |           "big_sur": { | 
					
						
							| 
									
										
										
										
											2022-08-09 14:54:33 -04:00
										 |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.2.0/intel.zip", | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |             "version": "1.2.0", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "catalina": { | 
					
						
							| 
									
										
										
										
											2022-08-09 14:54:33 -04:00
										 |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |             "version": "1.0.0", | 
					
						
							|  |  |  |             "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "mojave": { | 
					
						
							| 
									
										
										
										
											2022-08-09 14:54:33 -04:00
										 |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip", | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |             "version": "1.0.0", | 
					
						
							|  |  |  |             "sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216" | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       JSON | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |     let(:expected_sha256_variations) do | 
					
						
							| 
									
										
										
										
											2022-08-16 00:48:24 -04:00
										 |  |  |       <<~JSON | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "monterey": { | 
					
						
							|  |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "big_sur": { | 
					
						
							|  |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "catalina": { | 
					
						
							|  |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "mojave": { | 
					
						
							|  |  |  |             "url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip", | 
					
						
							|  |  |  |             "sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b" | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       JSON | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       # Use a more limited symbols list to shorten the variations hash | 
					
						
							|  |  |  |       symbols = { | 
					
						
							|  |  |  |         monterey: "12", | 
					
						
							|  |  |  |         big_sur:  "11", | 
					
						
							|  |  |  |         catalina: "10.15", | 
					
						
							|  |  |  |         mojave:   "10.14", | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       stub_const("MacOSVersions::SYMBOLS", symbols) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # For consistency, always run on Monterey and ARM | 
					
						
							|  |  |  |       MacOS.full_version = "12" | 
					
						
							|  |  |  |       allow(Hardware::CPU).to receive(:type).and_return(:arm) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     after do | 
					
						
							|  |  |  |       MacOS.full_version = original_macos_version | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-16 00:48:24 -04:00
										 |  |  |     it "returns the correct variations hash for a cask with multiple versions" do | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |       c = Cask::CaskLoader.load("multiple-versions") | 
					
						
							|  |  |  |       h = c.to_hash_with_variations | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(h).to be_a(Hash) | 
					
						
							| 
									
										
										
										
											2022-08-16 00:48:24 -04:00
										 |  |  |       expect(JSON.pretty_generate(h["variations"])).to eq expected_versions_variations.strip | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns the correct variations hash for a cask different sha256s on each arch" do | 
					
						
							|  |  |  |       c = Cask::CaskLoader.load("sha256-arch") | 
					
						
							|  |  |  |       h = c.to_hash_with_variations | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(h).to be_a(Hash) | 
					
						
							|  |  |  |       expect(JSON.pretty_generate(h["variations"])).to eq expected_sha256_variations.strip | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2023-02-14 14:19:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-22 19:43:49 -07:00
										 |  |  |     # @note The calls to `Cask.generating_hash!` and `Cask.generated_hash!` | 
					
						
							| 
									
										
										
										
											2023-03-21 19:05:41 -07:00
										 |  |  |     #   are not idempotent so they can only be used in one test. | 
					
						
							| 
									
										
										
										
											2023-02-14 14:19:40 +00:00
										 |  |  |     it "returns the correct hash placeholders" do | 
					
						
							|  |  |  |       described_class.generating_hash! | 
					
						
							|  |  |  |       expect(described_class).to be_generating_hash | 
					
						
							|  |  |  |       c = Cask::CaskLoader.load("placeholders") | 
					
						
							|  |  |  |       h = c.to_hash_with_variations | 
					
						
							|  |  |  |       described_class.generated_hash! | 
					
						
							|  |  |  |       expect(described_class).not_to be_generating_hash | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(h).to be_a(Hash) | 
					
						
							|  |  |  |       expect(h["artifacts"].first[:binary].first).to eq "$APPDIR/some/path" | 
					
						
							| 
									
										
										
										
											2023-02-15 04:59:07 +00:00
										 |  |  |       expect(h["caveats"]).to eq "$HOMEBREW_PREFIX and /$HOME\n" | 
					
						
							| 
									
										
										
										
											2023-02-14 14:19:40 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2022-07-21 16:41:23 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | end |