| 
									
										
										
										
											2022-08-05 15:35:25 -04:00
										 |  |  | # typed: false | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "rubocops/rubocop-cask" | 
					
						
							|  |  |  | require "test/rubocops/cask/shared_examples/cask_cop" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe RuboCop::Cop::Cask::Variables do | 
					
						
							|  |  |  |   include CaskCop | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there are no variables" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask "foo" do | 
					
						
							|  |  |  |           version :latest | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "does not report any offenses" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is an arch stanza" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask "foo" do | 
					
						
							|  |  |  |           arch arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "does not report any offenses" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is a non-arch variable that uses the arch conditional" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask "foo" do | 
					
						
							|  |  |  |           folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "does not report any offenses" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is an arch variable" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch = Hardware::CPU.intel? ? "darwin" : "darwin-arm64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `arch arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`arch = Hardware::CPU.intel? ? "darwin" : "darwin-arm64"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'arch = Hardware::CPU.intel? ? "darwin" : "darwin-arm64"', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-11 19:14:21 -04:00
										 |  |  |   context "when there is an arch variable that doesn't use strings" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch = Hardware::CPU.intel? ? :darwin : :darwin_arm64 | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch arm: :darwin_arm64, intel: :darwin | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  "Use `arch arm: :darwin_arm64, intel: :darwin` instead of " \ | 
					
						
							|  |  |  |                   "`arch = Hardware::CPU.intel? ? :darwin : :darwin_arm64`", | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   "arch = Hardware::CPU.intel? ? :darwin : :darwin_arm64", | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-05 15:35:25 -04:00
										 |  |  |   context "when there is an arch with an empty string" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch = Hardware::CPU.intel? ? "" : "arm64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch arm: "arm64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `arch arm: "arm64"` instead of ' \ | 
					
						
							|  |  |  |                   '`arch = Hardware::CPU.intel? ? "" : "arm64"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'arch = Hardware::CPU.intel? ? "" : "arm64"', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is a non-arch variable" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = Hardware::CPU.intel? ? "darwin" : "darwin-arm64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`folder = Hardware::CPU.intel? ? "darwin" : "darwin-arm64"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'folder = Hardware::CPU.intel? ? "darwin" : "darwin-arm64"', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is a non-arch variable with an empty string" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = Hardware::CPU.intel? ? "amd64" : "" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = on_arch_conditional intel: "amd64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `folder = on_arch_conditional intel: "amd64"` instead of ' \ | 
					
						
							|  |  |  |                   '`folder = Hardware::CPU.intel? ? "amd64" : ""`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'folder = Hardware::CPU.intel? ? "amd64" : ""', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there is an arch and a non-arch variable" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch = Hardware::CPU.arm? ? "darwin-arm64" : "darwin" | 
					
						
							|  |  |  |           folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           arch arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |           folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `arch arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`arch = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'arch = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"', | 
					
						
							|  |  |  |       }, { | 
					
						
							|  |  |  |         message:  'Use `folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     3, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "when there are two non-arch variables" do | 
					
						
							|  |  |  |     let(:source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin" | 
					
						
							|  |  |  |           platform = Hardware::CPU.intel? ? "darwin": "darwin-arm64" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:correct_source) do | 
					
						
							|  |  |  |       <<-CASK.undent
 | 
					
						
							|  |  |  |         cask 'foo' do | 
					
						
							|  |  |  |           folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |           platform = on_arch_conditional arm: "darwin-arm64", intel: "darwin" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       CASK | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     let(:expected_offenses) do | 
					
						
							|  |  |  |       [{ | 
					
						
							|  |  |  |         message:  'Use `folder = on_arch_conditional arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     2, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'folder = Hardware::CPU.arm? ? "darwin-arm64" : "darwin"', | 
					
						
							|  |  |  |       }, { | 
					
						
							|  |  |  |         message:  'Use `platform = on_arch_conditional arm: "darwin-arm64", intel: "darwin"` instead of ' \ | 
					
						
							|  |  |  |                   '`platform = Hardware::CPU.intel? ? "darwin": "darwin-arm64"`', | 
					
						
							|  |  |  |         severity: :convention, | 
					
						
							|  |  |  |         line:     3, | 
					
						
							|  |  |  |         column:   2, | 
					
						
							|  |  |  |         source:   'platform = Hardware::CPU.intel? ? "darwin": "darwin-arm64"', | 
					
						
							|  |  |  |       }] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "reports offenses" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     include_examples "autocorrects source" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |