| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe Cask::Config, :cask do | 
					
						
							| 
									
										
										
										
											2019-02-03 15:57:51 +01:00
										 |  |  |   subject(:config) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-27 14:54:56 +02:00
										 |  |  |   describe "::from_json" do | 
					
						
							|  |  |  |     it "deserializes a configuration in JSON format" do | 
					
						
							|  |  |  |       config = described_class.from_json <<~EOS | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "default": { | 
					
						
							|  |  |  |             "appdir": "/path/to/apps" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "env": {}, | 
					
						
							|  |  |  |           "explicit": {} | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |       expect(config.appdir).to eq(Pathname("/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-03 15:57:51 +01:00
										 |  |  |   describe "#default" do | 
					
						
							|  |  |  |     it "returns the default directories" do | 
					
						
							|  |  |  |       expect(config.default[:appdir]).to eq(Pathname(TEST_TMPDIR).join("cask-appdir")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#appdir" do | 
					
						
							|  |  |  |     it "returns the default value if no HOMEBREW_CASK_OPTS is unset" do | 
					
						
							|  |  |  |       expect(config.appdir).to eq(Pathname(TEST_TMPDIR).join("cask-appdir")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     specify "environment overwrites default" do | 
					
						
							|  |  |  |       ENV["HOMEBREW_CASK_OPTS"] = "--appdir=/path/to/apps" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(config.appdir).to eq(Pathname("/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     specify "specific overwrites default" do | 
					
						
							|  |  |  |       config = described_class.new(explicit: { appdir: "/explicit/path/to/apps" }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(config.appdir).to eq(Pathname("/explicit/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     specify "explicit overwrites environment" do | 
					
						
							|  |  |  |       ENV["HOMEBREW_CASK_OPTS"] = "--appdir=/path/to/apps" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       config = described_class.new(explicit: { appdir: "/explicit/path/to/apps" }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(config.appdir).to eq(Pathname("/explicit/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#env" do | 
					
						
							|  |  |  |     it "returns directories specified with the HOMEBREW_CASK_OPTS variable" do | 
					
						
							|  |  |  |       ENV["HOMEBREW_CASK_OPTS"] = "--appdir=/path/to/apps" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(config.env).to eq(appdir: Pathname("/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#explicit" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     let(:config) do | 
					
						
							| 
									
										
										
										
											2021-01-29 17:11:14 -05:00
										 |  |  |       described_class.new(explicit: { appdir:    "/explicit/path/to/apps", | 
					
						
							|  |  |  |                                       languages: ["zh-TW", "en"] }) | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2019-02-03 15:57:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns directories explicitly given as arguments" do | 
					
						
							|  |  |  |       expect(config.explicit[:appdir]).to eq(Pathname("/explicit/path/to/apps")) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-01-29 17:11:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns array of preferred languages" do | 
					
						
							|  |  |  |       expect(config.explicit[:languages]).to eq(["zh-TW", "en"]) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2019-02-03 15:57:51 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2020-04-21 17:39:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   context "when installing a cask and then adding a global default dir" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     let(:config) do | 
					
						
							| 
									
										
										
										
											2020-04-27 15:00:22 +02:00
										 |  |  |       json = <<~EOS | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "default": { | 
					
						
							|  |  |  |             "appdir": "/default/path/before/adding/fontdir" | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           "env": {}, | 
					
						
							|  |  |  |           "explicit": {} | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |       described_class.from_json(json) | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-04-21 17:39:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     describe "#appdir" do | 
					
						
							|  |  |  |       it "honors metadata of the installed cask" do | 
					
						
							|  |  |  |         expect(config.appdir).to eq(Pathname("/default/path/before/adding/fontdir")) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "#fontdir" do | 
					
						
							|  |  |  |       it "falls back to global default on incomplete metadata" do | 
					
						
							|  |  |  |         expect(config.default).to include(fontdir: Pathname(TEST_TMPDIR).join("cask-fontdir")) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2019-02-03 15:57:51 +01:00
										 |  |  | end |