81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # frozen_string_literal: true | ||
|  | 
 | ||
|  | require "style" | ||
|  | 
 | ||
|  | describe Homebrew::Style do | ||
|  |   around do |example| | ||
|  |     FileUtils.ln_s HOMEBREW_LIBRARY_PATH, HOMEBREW_LIBRARY/"Homebrew" | ||
|  |     FileUtils.ln_s HOMEBREW_LIBRARY_PATH.parent/".rubocop.yml", HOMEBREW_LIBRARY/".rubocop.yml" | ||
|  |     FileUtils.ln_s HOMEBREW_LIBRARY_PATH.parent/".rubocop_shared.yml", HOMEBREW_LIBRARY/".rubocop_shared.yml" | ||
|  | 
 | ||
|  |     example.run | ||
|  |   ensure | ||
|  |     FileUtils.rm_f HOMEBREW_LIBRARY/"Homebrew" | ||
|  |     FileUtils.rm_f HOMEBREW_LIBRARY/".rubocop.yml" | ||
|  |     FileUtils.rm_f HOMEBREW_LIBRARY/".rubocop_shared.yml" | ||
|  |   end | ||
|  | 
 | ||
|  |   before do | ||
|  |     allow(Homebrew).to receive(:install_bundler_gems!) | ||
|  |   end | ||
|  | 
 | ||
|  |   describe ".check_style_json" do | ||
|  |     let(:dir) { mktmpdir } | ||
|  | 
 | ||
|  |     it "returns RubocopResults when RuboCop reports offenses" do | ||
|  |       formula = dir/"my-formula.rb" | ||
|  | 
 | ||
|  |       formula.write <<~'EOS' | ||
|  |         class MyFormula < Formula | ||
|  | 
 | ||
|  |         end | ||
|  |       EOS | ||
|  | 
 | ||
|  |       rubocop_result = described_class.check_style_json([formula]) | ||
|  | 
 | ||
|  |       expect(rubocop_result.file_offenses(formula.realpath.to_s).map(&:message)) | ||
|  |         .to include("Extra empty line detected at class body beginning.") | ||
|  |     end | ||
|  | 
 | ||
|  |     it "corrected offense output format" do | ||
|  |       formula = dir/"my-formula-2.rb" | ||
|  | 
 | ||
|  |       formula.write <<~EOS | ||
|  |         class MyFormula2 < Formula | ||
|  |           desc "Test formula" | ||
|  |           homepage "https://foo.org" | ||
|  |           url "https://foo.org/foo-1.7.5.tgz" | ||
|  |           sha256 "cc692fb9dee0cc288757e708fc1a3b6b56ca1210ca181053a371cb11746969da" | ||
|  | 
 | ||
|  |           depends_on "foo" | ||
|  |           depends_on "bar-config" => :build | ||
|  | 
 | ||
|  |           test do | ||
|  |             assert_equal 5, 5
 | ||
|  |           end | ||
|  |         end | ||
|  |       EOS | ||
|  |       rubocop_result = described_class.check_style_json( | ||
|  |         [formula], | ||
|  |         fix: true, only_cops: ["FormulaAudit/DependencyOrder"], | ||
|  |       ) | ||
|  |       offense_string = rubocop_result.file_offenses(formula.realpath).first.to_s | ||
|  |       expect(offense_string).to match(/\[Corrected\]/) | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   describe ".check_style_and_print" do | ||
|  |     let(:dir) { mktmpdir } | ||
|  | 
 | ||
|  |     it "returns false for conforming file with only audit-level violations" do | ||
|  |       # This file is known to use non-rocket hashes and other things that trigger audit, | ||
|  |       # but not regular, cop violations | ||
|  |       target_file = HOMEBREW_LIBRARY_PATH/"utils.rb" | ||
|  | 
 | ||
|  |       rubocop_result = described_class.check_style_and_print([target_file]) | ||
|  | 
 | ||
|  |       expect(rubocop_result).to eq true | ||
|  |     end | ||
|  |   end | ||
|  | end |