| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "rubocops/rubocop-cask" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe RuboCop::Cop::Cask::NoOverrides, :config do | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts when there are no `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         version '1.2.3' | 
					
						
							|  |  |  |         url 'https://brew.sh/foo.pkg' | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         name 'Foo' | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-19 20:41:43 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts when there are no top-level standalone stanzas" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         on_mojave :or_later do | 
					
						
							|  |  |  |           version :latest | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-23 17:43:25 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts non-overridable stanzas in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         version '1.2.3' | 
					
						
							| 
									
										
										
										
											2023-03-23 17:43:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_arm do | 
					
						
							|  |  |  |           binary "foo-\#{version}-arm64" | 
					
						
							| 
									
										
										
										
											2023-03-23 17:43:25 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         app "foo-\#{version}.app" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         binary "foo-\#{version}" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-22 00:23:33 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts `arch` and `version` interpolations in strings in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         arch arm: "arm64", intel: "x86" | 
					
						
							|  |  |  |         version '1.2.3' | 
					
						
							| 
									
										
										
										
											2023-03-22 23:12:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_mojave :or_later do | 
					
						
							|  |  |  |           sha256 "aaa" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           url "https://brew.sh/foo-\#{version}-\#{arch}.pkg" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-22 23:12:06 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts `version` interpolations with method calls in strings in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         version '0.99,123.3' | 
					
						
							| 
									
										
										
										
											2023-03-23 00:02:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_mojave :or_later do | 
					
						
							|  |  |  |           url "https://brew.sh/foo-\#{version.csv.first}-\#{version.csv.second}.pkg" | 
					
						
							| 
									
										
										
										
											2023-03-23 00:02:12 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-23 00:02:12 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts `arch` interpolations in regexes in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         arch arm: "arm64", intel: "x86" | 
					
						
							| 
									
										
										
										
											2023-03-23 13:54:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         version '0.99,123.3' | 
					
						
							| 
									
										
										
										
											2023-03-23 13:54:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_mojave :or_later do | 
					
						
							|  |  |  |           url "https://brew.sh/foo-\#{arch}-\#{version.csv.first}-\#{version.csv.last}.pkg" | 
					
						
							| 
									
										
										
										
											2023-03-23 13:54:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |           livecheck do | 
					
						
							|  |  |  |             url "https://brew.sh/foo/releases.html" | 
					
						
							|  |  |  |             regex(/href=.*?foo[._-]v?(\d+(?:.\d+)+)-\#{arch}.pkg/i) | 
					
						
							| 
									
										
										
										
											2023-03-23 13:54:55 +00:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-23 13:54:55 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "ignores contents of single-line `livecheck` blocks in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         on_intel do | 
					
						
							|  |  |  |           livecheck do | 
					
						
							|  |  |  |             url 'https://brew.sh/foo' # Livecheck should be allowed since it's a different "kind" of URL. | 
					
						
							| 
									
										
										
										
											2023-03-22 00:23:33 +00:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |           version '1.2.3' | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         on_arm do | 
					
						
							|  |  |  |           version '2.3.4' | 
					
						
							| 
									
										
										
										
											2023-03-22 00:23:33 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         url 'https://brew.sh/foo.pkg' | 
					
						
							|  |  |  |         sha256 "bbb" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "ignores contents of multi-line `livecheck` blocks in `on_*` blocks" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         on_intel do | 
					
						
							|  |  |  |           livecheck do | 
					
						
							|  |  |  |             url 'https://brew.sh/foo' # Livecheck should be allowed since it's a different "kind" of URL. | 
					
						
							|  |  |  |             strategy :sparkle | 
					
						
							| 
									
										
										
										
											2023-03-21 23:49:54 +00:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |           version '1.2.3' | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         on_arm do | 
					
						
							|  |  |  |           version '2.3.4' | 
					
						
							| 
									
										
										
										
											2023-03-21 23:49:54 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         url 'https://brew.sh/foo.pkg' | 
					
						
							|  |  |  |         sha256 "bbb" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-21 23:49:54 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "accepts `on_*` blocks that don't override upper-level stanzas" do | 
					
						
							|  |  |  |     expect_no_offenses <<~CASK | 
					
						
							|  |  |  |       cask "foo" do | 
					
						
							|  |  |  |         version "1.2.3" | 
					
						
							| 
									
										
										
										
											2023-03-19 22:40:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_big_sur :or_older do | 
					
						
							|  |  |  |           sha256 "bbb" | 
					
						
							|  |  |  |           url "https://brew.sh/legacy/foo-2.3.4.dmg" | 
					
						
							| 
									
										
										
										
											2023-03-19 22:40:53 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_monterey :or_newer do | 
					
						
							| 
									
										
										
										
											2023-03-20 00:45:11 +00:00
										 |  |  |           sha256 "aaa" | 
					
						
							|  |  |  |           url "https://brew.sh/foo-2.3.4.dmg" | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2023-03-20 00:45:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "reports an offense when `on_*` blocks override a single upper-level stanza" do | 
					
						
							|  |  |  |     expect_offense <<~CASK | 
					
						
							|  |  |  |       cask 'foo' do | 
					
						
							|  |  |  |         version '2.3.4' | 
					
						
							|  |  |  |         ^^^^^^^^^^^^^^^ Do not use a top-level `version` stanza as the default. Add it to an `on_{system}` block instead. Use `:or_older` or `:or_newer` to specify a range of macOS versions. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         on_mojave :or_older do | 
					
						
							|  |  |  |           version '1.2.3' | 
					
						
							| 
									
										
										
										
											2023-03-20 00:45:11 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         url 'https://brew.sh/foo-2.3.4.dmg' | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-20 00:45:11 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |   it "reports an offense when `on_*` blocks override multiple upper-level stanzas" do | 
					
						
							|  |  |  |     expect_offense <<~CASK | 
					
						
							|  |  |  |       cask "foo" do | 
					
						
							|  |  |  |         version "1.2.3" | 
					
						
							|  |  |  |         sha256 "aaa" | 
					
						
							|  |  |  |         ^^^^^^^^^^^^ Do not use a top-level `sha256` stanza as the default. Add it to an `on_{system}` block instead. Use `:or_older` or `:or_newer` to specify a range of macOS versions. | 
					
						
							|  |  |  |         url "https://brew.sh/foo-2.3.4.dmg" | 
					
						
							|  |  |  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Do not use a top-level `url` stanza as the default. Add it to an `on_{system}` block instead. Use `:or_older` or `:or_newer` to specify a range of macOS versions. | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         on_big_sur :or_older do | 
					
						
							|  |  |  |           sha256 "bbb" | 
					
						
							|  |  |  |           url "https://brew.sh/legacy/foo-2.3.4.dmg" | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     CASK | 
					
						
							| 
									
										
										
										
											2023-03-19 17:31:32 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end |