diff options
21 files changed, 483 insertions, 1683 deletions
diff --git a/Library/Homebrew/rubocops/checksum_cop.rb b/Library/Homebrew/rubocops/checksum_cop.rb index dcaf60e7d..23a787809 100644 --- a/Library/Homebrew/rubocops/checksum_cop.rb +++ b/Library/Homebrew/rubocops/checksum_cop.rb @@ -24,6 +24,7 @@ module RuboCop def audit_sha256(checksum) return if checksum.nil? if regex_match_group(checksum, /^$/) + @offense_source_range = @offensive_node.source_range problem "sha256 is empty" return end diff --git a/Library/Homebrew/rubocops/conflicts_cop.rb b/Library/Homebrew/rubocops/conflicts_cop.rb index 1cca3f8ae..96edf480c 100644 --- a/Library/Homebrew/rubocops/conflicts_cop.rb +++ b/Library/Homebrew/rubocops/conflicts_cop.rb @@ -6,10 +6,8 @@ module RuboCop module FormulaAudit # This cop audits versioned Formulae for `conflicts_with` class Conflicts < FormulaCop - MSG = <<~EOS.freeze - Versioned formulae should not use `conflicts_with`. - Use `keg_only :versioned_formula` instead. - EOS + MSG = "Versioned formulae should not use `conflicts_with`. " \ + "Use `keg_only :versioned_formula` instead.".freeze WHITELIST = %w[ node@ diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb index 7da4d0f10..2e9a7657e 100644 --- a/Library/Homebrew/rubocops/extend/formula_cop.rb +++ b/Library/Homebrew/rubocops/extend/formula_cop.rb @@ -186,11 +186,11 @@ module RuboCop end def_node_search :required_dependency?, <<~EOS - (send nil :depends_on ({str sym} _)) + (send nil? :depends_on ({str sym} _)) EOS def_node_search :required_dependency_name?, <<~EOS - (send nil :depends_on ({str sym} %1)) + (send nil? :depends_on ({str sym} %1)) EOS def_node_search :dependency_type_hash_match?, <<~EOS diff --git a/Library/Homebrew/rubocops/formula_desc_cop.rb b/Library/Homebrew/rubocops/formula_desc_cop.rb index 05f60c9d5..e56a4cc56 100644 --- a/Library/Homebrew/rubocops/formula_desc_cop.rb +++ b/Library/Homebrew/rubocops/formula_desc_cop.rb @@ -29,10 +29,8 @@ module RuboCop desc_length = "#{@formula_name}: #{string_content(desc)}".length max_desc_length = 80 return if desc_length <= max_desc_length - problem <<~EOS - Description is too long. "name: desc" should be less than #{max_desc_length} characters. - Length is calculated as #{@formula_name} + desc. (currently #{desc_length}) - EOS + problem "Description is too long. \"name: desc\" should be less than #{max_desc_length} characters. " \ + "Length is calculated as #{@formula_name} + desc. (currently #{desc_length})" end end diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb index 9354f41f6..9c6c97b13 100644 --- a/Library/Homebrew/rubocops/lines_cop.rb +++ b/Library/Homebrew/rubocops/lines_cop.rb @@ -8,11 +8,11 @@ module RuboCop def audit_formula(_node, _class_node, _parent_class_node, _body_node) [:automake, :autoconf, :libtool].each do |dependency| next unless depends_on?(dependency) - problem ":#{dependency} is deprecated. Usage should be \"#{dependency}\"" + problem ":#{dependency} is deprecated. Usage should be \"#{dependency}\"." end - problem ':apr is deprecated. Usage should be "apr-util"' if depends_on?(:apr) - problem ":tex is deprecated" if depends_on?(:tex) + problem ':apr is deprecated. Usage should be "apr-util".' if depends_on?(:apr) + problem ":tex is deprecated." if depends_on?(:tex) end end @@ -296,10 +296,8 @@ module RuboCop end find_method_with_args(body_node, :skip_clean, :all) do - problem <<~EOS.chomp - `skip_clean :all` is deprecated; brew no longer strips symbols - Pass explicit paths to prevent Homebrew from removing empty folders. - EOS + problem "`skip_clean :all` is deprecated; brew no longer strips symbols. " \ + "Pass explicit paths to prevent Homebrew from removing empty folders." end if find_method_def(@processed_source.ast) @@ -353,11 +351,11 @@ module RuboCop end def_node_search :conditional_dependencies, <<~EOS - {$(if (send (send nil :build) ${:include? :with? :without?} $(str _)) - (send nil :depends_on $({str sym} _)) nil) + {$(if (send (send nil? :build) ${:include? :with? :without?} $(str _)) + (send nil? :depends_on $({str sym} _)) nil?) - $(if (send (send nil :build) ${:include? :with? :without?} $(str _)) nil - (send nil :depends_on $({str sym} _)))} + $(if (send (send nil? :build) ${:include? :with? :without?} $(str _)) nil? + (send nil? :depends_on $({str sym} _)))} EOS # Match depends_on with hash as argument @@ -371,13 +369,13 @@ module RuboCop EOS def_node_search :formula_path_strings, <<~EOS - {(dstr (begin (send nil %1)) $(str _ )) - (dstr _ (begin (send nil %1)) $(str _ ))} + {(dstr (begin (send nil? %1)) $(str _ )) + (dstr _ (begin (send nil? %1)) $(str _ ))} EOS # Node Pattern search for Language::Node def_node_search :languageNodeModule?, <<~EOS - (const (const nil :Language) :Node) + (const (const nil? :Language) :Node) EOS end end diff --git a/Library/Homebrew/test/rubocops/bottle_block_cop_spec.rb b/Library/Homebrew/test/rubocops/bottle_block_cop_spec.rb index 659750858..e0982dcba 100644 --- a/Library/Homebrew/test/rubocops/bottle_block_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/bottle_block_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/bottle_block_cop" describe RuboCop::Cop::FormulaAuditStrict::BottleBlock do @@ -8,34 +5,16 @@ describe RuboCop::Cop::FormulaAuditStrict::BottleBlock do context "When auditing Bottle Block" do it "When there is revision in bottle block" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' bottle do cellar :any revision 2 + ^^^^^^^^^^ Use rebuild instead of revision in bottle block end end - EOS - - expected_offenses = [{ message: described_class::MSG, - severity: :convention, - line: 5, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end - end - - def expect_offense(expected, actual) - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) + RUBY end end @@ -50,6 +29,7 @@ describe RuboCop::Cop::FormulaAuditStrict::BottleBlock do end end EOS + corrected_source = <<~EOS class Foo < Formula url 'http://example.com/foo-1.0.tgz' diff --git a/Library/Homebrew/test/rubocops/caveats_cop_spec.rb b/Library/Homebrew/test/rubocops/caveats_cop_spec.rb index 68f79e08a..9c92d8fb8 100644 --- a/Library/Homebrew/test/rubocops/caveats_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/caveats_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/caveats_cop" describe RuboCop::Cop::FormulaAudit::Caveats do @@ -8,34 +5,16 @@ describe RuboCop::Cop::FormulaAudit::Caveats do context "When auditing caveats" do it "When there is setuid mentioned in caveats" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula homepage "http://example.com/foo" url "http://example.com/foo-1.0.tgz" def caveats "setuid" + ^^^^^^ Don\'t recommend setuid in the caveats, suggest sudo instead. end end - EOS - - expected_offenses = [{ message: "Don't recommend setuid in the caveats, suggest sudo instead.", - severity: :convention, - line: 5, - column: 5, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end - end - - def expect_offense(expected, actual) - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/checksum_cop_spec.rb b/Library/Homebrew/test/rubocops/checksum_cop_spec.rb index ab70f2dcf..3f720c90f 100644 --- a/Library/Homebrew/test/rubocops/checksum_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/checksum_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/checksum_cop" describe RuboCop::Cop::FormulaAudit::Checksum do @@ -8,105 +5,60 @@ describe RuboCop::Cop::FormulaAudit::Checksum do context "When auditing spec checksums" do it "When the checksum is empty" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' stable do url "https://github.com/foo-lang/foo-compiler/archive/0.18.0.tar.gz" sha256 "" + ^^ sha256 is empty resource "foo-package" do url "https://github.com/foo-lang/foo-package/archive/0.18.0.tar.gz" sha256 "" + ^^ sha256 is empty end end end - EOS - - expected_offenses = [{ message: "sha256 is empty", - severity: :convention, - line: 5, - column: 12, - source: source }, - { message: "sha256 is empty", - severity: :convention, - line: 9, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When the checksum is not 64 characters" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' stable do url "https://github.com/foo-lang/foo-compiler/archive/0.18.0.tar.gz" sha256 "5cf6e1ae0a645b426c0474cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea0e9ad" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sha256 should be 64 characters resource "foo-package" do url "https://github.com/foo-lang/foo-package/archive/0.18.0.tar.gz" sha256 "5cf6e1ae0a645b426c047aaa4cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea0e9" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sha256 should be 64 characters end end end - EOS - - expected_offenses = [{ message: "sha256 should be 64 characters", - severity: :convention, - line: 5, - column: 12, - source: source }, - { message: "sha256 should be 64 characters", - severity: :convention, - line: 9, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When the checksum has invalid chars" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' stable do url "https://github.com/foo-lang/foo-compiler/archive/0.18.0.tar.gz" sha256 "5cf6e1ae0a645b426c0k7cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea0e9a" + ^ sha256 contains invalid characters resource "foo-package" do url "https://github.com/foo-lang/foo-package/archive/0.18.0.tar.gz" sha256 "5cf6e1ae0a645b426x047aa4cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea9" + ^ sha256 contains invalid characters end end end - EOS - - expected_offenses = [{ message: "sha256 contains invalid characters", - severity: :convention, - line: 5, - column: 31, - source: source }, - { message: "sha256 contains invalid characters", - severity: :convention, - line: 9, - column: 31, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end @@ -116,46 +68,32 @@ describe RuboCop::Cop::FormulaAudit::ChecksumCase do context "When auditing spec checksums" do it "When the checksum has upper case characters" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' stable do url "https://github.com/foo-lang/foo-compiler/archive/0.18.0.tar.gz" sha256 "5cf6e1ae0A645b426c0a7cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea0e9a" + ^ sha256 should be lowercase resource "foo-package" do url "https://github.com/foo-lang/foo-package/archive/0.18.0.tar.gz" sha256 "5cf6e1Ae0a645b426b047aa4cc7cd3f7d1605ffa1ac5756a39a8b2268ddc7ea9" + ^ sha256 should be lowercase end end end - EOS - - expected_offenses = [{ message: "sha256 should be lowercase", - severity: :convention, - line: 5, - column: 21, - source: source }, - { message: "sha256 should be lowercase", - severity: :convention, - line: 9, - column: 20, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When auditing stable blocks outside spec blocks" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' resource "foo-outside" do url "https://github.com/foo-lang/foo-outside/archive/0.18.0.tar.gz" sha256 "A4cc7cd3f7d1605ffa1ac5755cf6e1ae0a645b426b047a6a39a8b2268ddc7ea9" + ^ sha256 should be lowercase end stable do url "https://github.com/foo-lang/foo-compiler/archive/0.18.0.tar.gz" @@ -167,19 +105,7 @@ describe RuboCop::Cop::FormulaAudit::ChecksumCase do end end end - EOS - - expected_offenses = [{ message: "sha256 should be lowercase", - severity: :convention, - line: 5, - column: 12, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end diff --git a/Library/Homebrew/test/rubocops/class_cop_spec.rb b/Library/Homebrew/test/rubocops/class_cop_spec.rb index 3f210af11..2ea58777a 100644 --- a/Library/Homebrew/test/rubocops/class_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/class_cop_spec.rb @@ -1,81 +1,62 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/class_cop" describe RuboCop::Cop::FormulaAudit::ClassName do subject(:cop) { described_class.new } - context "When auditing formula" do - it "with deprecated inheritance" do - formulas = [{ - "class" => "GithubGistFormula", - }, { - "class" => "ScriptFileFormula", - }, { - "class" => "AmazonWebServicesFormula", - }] - - formulas.each do |formula| - source = <<~EOS - class Foo < #{formula["class"]} - url 'http://example.com/foo-1.0.tgz' - end - EOS + it "reports an offense when using ScriptFileFormula" do + expect_offense(<<~RUBY) + class Foo < ScriptFileFormula + ^^^^^^^^^^^^^^^^^ ScriptFileFormula is deprecated, use Formula instead + url 'http://example.com/foo-1.0.tgz' + end + RUBY + end - expected_offenses = [{ message: "#{formula["class"]} is deprecated, use Formula instead", - severity: :convention, - line: 1, - column: 12, - source: source }] + it "reports an offense when using GithubGistFormula" do + expect_offense(<<~RUBY) + class Foo < GithubGistFormula + ^^^^^^^^^^^^^^^^^ GithubGistFormula is deprecated, use Formula instead + url 'http://example.com/foo-1.0.tgz' + end + RUBY + end - inspect_source(source) + it "reports an offense when using AmazonWebServicesFormula" do + expect_offense(<<~RUBY) + class Foo < AmazonWebServicesFormula + ^^^^^^^^^^^^^^^^^^^^^^^^ AmazonWebServicesFormula is deprecated, use Formula instead + url 'http://example.com/foo-1.0.tgz' + end + RUBY + end - expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) - end + it "supports auto-correcting deprecated parent classes" do + source = <<~EOS + class Foo < AmazonWebServicesFormula + url 'http://example.com/foo-1.0.tgz' end - end + EOS - it "with deprecated inheritance and autocorrect" do - source = <<~EOS - class Foo < AmazonWebServicesFormula - url 'http://example.com/foo-1.0.tgz' - end - EOS - corrected_source = <<~EOS - class Foo < Formula - url 'http://example.com/foo-1.0.tgz' - end - EOS + corrected_source = <<~EOS + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + end + EOS - new_source = autocorrect_source(source) - expect(new_source).to eq(corrected_source) - end + new_source = autocorrect_source(source) + expect(new_source).to eq(corrected_source) end end describe RuboCop::Cop::FormulaAuditStrict::Test do subject(:cop) { described_class.new } - context "When auditing formula" do - it "without a test block" do - source = <<~EOS - class Foo < Formula - url 'http://example.com/foo-1.0.tgz' - end - EOS - expected_offenses = [{ message: described_class::MSG, - severity: :convention, - line: 1, - column: 0, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) + it "reports an offense when there is no test block" do + expect_offense(<<~RUBY) + class Foo < Formula + ^^^^^^^^^^^^^^^^^^^ A `test do` test block should be added + url 'http://example.com/foo-1.0.tgz' end - end + RUBY end end diff --git a/Library/Homebrew/test/rubocops/components_order_cop_spec.rb b/Library/Homebrew/test/rubocops/components_order_cop_spec.rb index a4726c001..cd7cc5893 100644 --- a/Library/Homebrew/test/rubocops/components_order_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/components_order_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/components_order_cop" describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do @@ -8,28 +5,17 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do context "When auditing formula components order" do it "When url precedes homepage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `homepage` (line 3) should be put before `url` (line 2) end - EOS - - expected_offenses = [{ message: "`homepage` (line 3) should be put before `url` (line 2)", - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When `resource` precedes `depends_on`" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "https://example.com/foo-1.0.tgz" @@ -38,24 +24,13 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do end depends_on "openssl" + ^^^^^^^^^^^^^^^^^^^^ `depends_on` (line 8) should be put before `resource` (line 4) end - EOS - - expected_offenses = [{ message: "`depends_on` (line 8) should be put before `resource` (line 4)", - severity: :convention, - line: 8, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When `test` precedes `plist`" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "https://example.com/foo-1.0.tgz" @@ -64,53 +39,24 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do end def plist + ^^^^^^^^^ `plist` (line 8) should be put before `test` (line 4) end end - EOS - - expected_offenses = [{ message: "`plist` (line 8) should be put before `test` (line 4)", - severity: :convention, - line: 8, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When only one of many `depends_on` precedes `conflicts_with`" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula depends_on "autoconf" => :build conflicts_with "visionmedia-watch" depends_on "automake" => :build + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `depends_on` (line 4) should be put before `conflicts_with` (line 3) depends_on "libtool" => :build depends_on "pkg-config" => :build depends_on "gettext" end - EOS - - expected_offenses = [{ message: "`depends_on` (line 4) should be put before `conflicts_with` (line 3)", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end - end - - def expect_offense(expected, actual) - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) + RUBY end end @@ -122,6 +68,7 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do homepage "http://example.com" end EOS + correct_source = <<~EOS class Foo < Formula homepage "http://example.com" @@ -145,6 +92,7 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do depends_on "openssl" end EOS + correct_source = <<~EOS class Foo < Formula url "https://example.com/foo-1.0.tgz" @@ -156,6 +104,7 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsOrder do end end EOS + corrected_source = autocorrect_source(source) expect(corrected_source).to eq(correct_source) end diff --git a/Library/Homebrew/test/rubocops/components_redundancy_cop_spec.rb b/Library/Homebrew/test/rubocops/components_redundancy_cop_spec.rb index e899a9b07..d8878ae79 100644 --- a/Library/Homebrew/test/rubocops/components_redundancy_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/components_redundancy_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/components_redundancy_cop" describe RuboCop::Cop::FormulaAuditStrict::ComponentsRedundancy do @@ -8,80 +5,40 @@ describe RuboCop::Cop::FormulaAuditStrict::ComponentsRedundancy do context "When auditing formula components common errors" do it "When url outside stable block" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `url` should be put inside `stable` block stable do # stuff end end - EOS - - expected_offenses = [{ message: "`url` should be put inside `stable` block", - severity: :convention, - line: 2, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When both `head` and `head do` are present" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula head "http://example.com/foo.git" head do + ^^^^^^^ `head` and `head do` should not be simultaneously present # stuff end end - EOS - - expected_offenses = [{ message: "`head` and `head do` should not be simultaneously present", - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When both `bottle :modifier` and `bottle do` are present" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" bottle do + ^^^^^^^^^ `bottle :modifier` and `bottle do` should not be simultaneously present # bottles go here end bottle :unneeded end - EOS - - expected_offenses = [{ message: "`bottle :modifier` and `bottle do` should not be simultaneously present", - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end - end - - def expect_offense(expected, actual) - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/conflicts_cop_spec.rb b/Library/Homebrew/test/rubocops/conflicts_cop_spec.rb index 40efe8545..5f6f020fd 100644 --- a/Library/Homebrew/test/rubocops/conflicts_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/conflicts_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/conflicts_cop" describe RuboCop::Cop::FormulaAudit::Conflicts do @@ -8,36 +5,23 @@ describe RuboCop::Cop::FormulaAudit::Conflicts do context "When auditing formula for conflicts with" do it "multiple conflicts_with" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo@2.0.rb") class FooAT20 < Formula url 'http://example.com/foo-2.0.tgz' conflicts_with "mysql", "mariadb", "percona-server", + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Versioned formulae should not use `conflicts_with`. Use `keg_only :versioned_formula` instead. :because => "both install plugins" end - EOS - - expected_offenses = [{ message: described_class::MSG, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo@2.0.rb") - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "no conflicts_with" do - source = <<~EOS + expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo@2.0.rb") class FooAT20 < Formula url 'http://example.com/foo-2.0.tgz' desc 'Bar' end - EOS - inspect_source(source, "/homebrew-core/Formula/foo@2.0.rb") - expect(cop.offenses).to eq([]) + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/formula_desc_cop_spec.rb b/Library/Homebrew/test/rubocops/formula_desc_cop_spec.rb index 0f0189aa8..3ddc42d34 100644 --- a/Library/Homebrew/test/rubocops/formula_desc_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/formula_desc_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/formula_desc_cop" describe RuboCop::Cop::FormulaAuditStrict::DescLength do @@ -8,93 +5,43 @@ describe RuboCop::Cop::FormulaAuditStrict::DescLength do context "When auditing formula desc" do it "When there is no desc" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula + ^^^^^^^^^^^^^^^^^^^ Formula should have a desc (Description). url 'http://example.com/foo-1.0.tgz' end - EOS - - expected_offenses = [{ message: "Formula should have a desc (Description).", - severity: :convention, - line: 1, - column: 0, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "reports an offense when desc is an empty string" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc '' + ^^^^^^^ The desc (description) should not be an empty string. end - EOS - - msg = "The desc (description) should not be an empty string." - expected_offenses = [{ message: msg, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo.rb") - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When desc is too long" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'Bar#{"bar" * 29}' + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Description is too long. "name: desc" should be less than 80 characters. Length is calculated as foo + desc. (currently 95) end - EOS - - msg = <<~EOS - Description is too long. "name: desc" should be less than 80 characters. - Length is calculated as foo + desc. (currently 95) - EOS - expected_offenses = [{ message: msg, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo.rb") - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When desc is multiline string" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'Bar#{"bar" * 9}'\ '#{"foo" * 21}' + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Description is too long. "name: desc" should be less than 80 characters. Length is calculated as foo + desc. (currently 98) end - EOS - - msg = <<~EOS - Description is too long. "name: desc" should be less than 80 characters. - Length is calculated as foo + desc. (currently 98) - EOS - expected_offenses = [{ message: msg, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo.rb") - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end @@ -104,83 +51,44 @@ describe RuboCop::Cop::FormulaAuditStrict::Desc do context "When auditing formula desc" do it "When wrong \"command-line\" usage in desc" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'command line' + ^ Description should start with a capital letter + ^^^^^^^^^^^^ Description should use \"command-line\" instead of \"command line\" end - EOS - - expected_offenses = [{ message: "Description should use \"command-line\" instead of \"command line\"", - severity: :convention, - line: 3, - column: 8, - source: source }] - - inspect_source(source) - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When an article is used in desc" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'An ' + ^^^ Description shouldn\'t start with an indefinite article i.e. \"An\" end - EOS - - expected_offenses = [{ message: "Description shouldn't start with an indefinite article i.e. \"An\"", - severity: :convention, - line: 3, - column: 8, - source: source }] - - inspect_source(source) - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When an lowercase letter starts a desc" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'bar' + ^ Description should start with a capital letter end - EOS - - expected_offenses = [{ message: "Description should start with a capital letter", - severity: :convention, - line: 3, - column: 8, - source: source }] - - inspect_source(source) - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When formula name is in desc" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'http://example.com/foo-1.0.tgz' desc 'Foo is a foobar' + ^^^^ Description shouldn\'t start with the formula name end - EOS - - expected_offenses = [{ message: "Description shouldn't start with the formula name", - severity: :convention, - line: 3, - column: 8, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo.rb") - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "autocorrects all rules" do @@ -190,6 +98,7 @@ describe RuboCop::Cop::FormulaAuditStrict::Desc do desc ' an bar: commandline foo ' end EOS + correct_source = <<~EOS class Foo < Formula url 'http://example.com/foo-1.0.tgz' diff --git a/Library/Homebrew/test/rubocops/homepage_cop_spec.rb b/Library/Homebrew/test/rubocops/homepage_cop_spec.rb index be9dddae6..d394f94a1 100644 --- a/Library/Homebrew/test/rubocops/homepage_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/homepage_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/homepage_cop" describe RuboCop::Cop::FormulaAudit::Homepage do diff --git a/Library/Homebrew/test/rubocops/lines_cop_spec.rb b/Library/Homebrew/test/rubocops/lines_cop_spec.rb index f96a4fd48..e65eff1fc 100644 --- a/Library/Homebrew/test/rubocops/lines_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/lines_cop_spec.rb @@ -1,81 +1,70 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/lines_cop" describe RuboCop::Cop::FormulaAudit::Lines do subject(:cop) { described_class.new } - context "When auditing lines" do - it "correctable deprecated dependencies usage" do - formulae = [{ - "dependency" => :automake, - "correct" => "automake", - }, { - "dependency" => :autoconf, - "correct" => "autoconf", - }, { - "dependency" => :libtool, - "correct" => "libtool", - }, { - "dependency" => :apr, - "correct" => "apr-util", - }, { - "dependency" => :tex, - }] - - formulae.each do |formula| - source = <<~EOS - class Foo < Formula - url 'http://example.com/foo-1.0.tgz' - depends_on :#{formula["dependency"]} - end - EOS - if formula.key?("correct") - offense = ":#{formula["dependency"]} is deprecated. Usage should be \"#{formula["correct"]}\"" - else - offense = ":#{formula["dependency"]} is deprecated" - end - expected_offenses = [{ message: offense, - severity: :convention, - line: 3, - column: 2, - source: source }] + it "reports an offense when using depends_on :automake" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + depends_on :automake + ^^^^^^^^^^^^^^^^^^^^ :automake is deprecated. Usage should be \"automake\". + end + RUBY + end - inspect_source(source) + it "reports an offense when using depends_on :autoconf" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + depends_on :autoconf + ^^^^^^^^^^^^^^^^^^^^ :autoconf is deprecated. Usage should be \"autoconf\". + end + RUBY + end - expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) - end + it "reports an offense when using depends_on :libtool" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + depends_on :libtool + ^^^^^^^^^^^^^^^^^^^ :libtool is deprecated. Usage should be \"libtool\". end - end + RUBY + end + + it "reports an offense when using depends_on :apr" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + depends_on :apr + ^^^^^^^^^^^^^^^ :apr is deprecated. Usage should be \"apr-util\". + end + RUBY + end + + it "reports an offense when using depends_on :tex" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + depends_on :tex + ^^^^^^^^^^^^^^^ :tex is deprecated. + end + RUBY end end describe RuboCop::Cop::FormulaAudit::ClassInheritance do subject(:cop) { described_class.new } - context "When auditing lines" do - it "inconsistent space in class inheritance" do - source = <<~EOS - class Foo<Formula - desc "foo" - url 'http://example.com/foo-1.0.tgz' - end - EOS - - expected_offenses = [{ message: "Use a space in class inheritance: class Foo < Formula", - severity: :convention, - line: 1, - column: 10, - source: source }] - - inspect_source(source, "/homebrew-core/Formula/foo.rb") - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) + it "reports an offense when not using spaces for class inheritance" do + expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") + class Foo<Formula + ^^^^^^^ Use a space in class inheritance: class Foo < Formula + desc "foo" + url 'http://example.com/foo-1.0.tgz' end - end + RUBY end end @@ -84,69 +73,36 @@ describe RuboCop::Cop::FormulaAudit::Comments do context "When auditing formula" do it "commented cmake call" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' # system "cmake", ".", *std_cmake_args + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Please remove default template comments end - EOS - - expected_offenses = [{ message: "Please remove default template comments", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "default template comments" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula # PLEASE REMOVE + ^^^^^^^^^^^^^^^ Please remove default template comments desc "foo" url 'http://example.com/foo-1.0.tgz' end - EOS - - expected_offenses = [{ message: "Please remove default template comments", - severity: :convention, - line: 2, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "commented out depends_on" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' # depends_on "foo" + ^^^^^^^^^^^^^^^^^^ Commented-out dependency "foo" end - EOS - - expected_offenses = [{ message: 'Commented-out dependency "foo"', - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end @@ -155,91 +111,47 @@ describe RuboCop::Cop::FormulaAudit::AssertStatements do subject(:cop) { described_class.new } it "assert ...include usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' assert File.read("inbox").include?("Sample message 1") + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `assert_match` instead of `assert ...include?` end - EOS - - expected_offenses = [{ message: "Use `assert_match` instead of `assert ...include?`", - severity: :convention, - line: 4, - column: 9, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "assert ...exist? without a negation" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' assert File.exist? "default.ini" + ^^^^^^^^^^^^^^^^^^^^^^^^^ Use `assert_predicate <path_to_file>, :exist?` instead of `assert File.exist? "default.ini"` end - EOS - - expected_offenses = [{ message: 'Use `assert_predicate <path_to_file>, :exist?` instead of `assert File.exist? "default.ini"`', - severity: :convention, - line: 4, - column: 9, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "assert ...exist? with a negation" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' assert !File.exist?("default.ini") + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `refute_predicate <path_to_file>, :exist?` instead of `assert !File.exist?("default.ini")` end - EOS - - expected_offenses = [{ message: 'Use `refute_predicate <path_to_file>, :exist?` instead of `assert !File.exist?("default.ini")`', - severity: :convention, - line: 4, - column: 9, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "assert ...executable? without a negation" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' assert File.executable? f + ^^^^^^^^^^^^^^^^^^ Use `assert_predicate <path_to_file>, :executable?` instead of `assert File.executable? f` end - EOS - - expected_offenses = [{ message: "Use `assert_predicate <path_to_file>, :executable?` instead of `assert File.executable? f`", - severity: :convention, - line: 4, - column: 9, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end @@ -247,220 +159,121 @@ describe RuboCop::Cop::FormulaAudit::OptionDeclarations do subject(:cop) { described_class.new } it "unless build.without? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return unless build.without? "bar" + ^^^^^^^^^^^^^^^^^^^^ Use if build.with? "bar" instead of unless build.without? "bar" end end - EOS - - expected_offenses = [{ message: 'Use if build.with? "bar" instead of unless build.without? "bar"', - severity: :convention, - line: 5, - column: 18, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "unless build.with? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return unless build.with? "bar" + ^^^^^^^^^^^^^^^^^ Use if build.without? "bar" instead of unless build.with? "bar" end end - EOS - - expected_offenses = [{ message: 'Use if build.without? "bar" instead of unless build.with? "bar"', - severity: :convention, - line: 5, - column: 18, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "negated build.with? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if !build.with? "bar" + ^^^^^^^^^^^^^^^^^^ Don't negate 'build.with?': use 'build.without?' end end - EOS - - expected_offenses = [{ message: "Don't negate 'build.with?': use 'build.without?'", - severity: :convention, - line: 5, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "negated build.without? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if !build.without? "bar" + ^^^^^^^^^^^^^^^^^^^^^ Don't negate 'build.without?': use 'build.with?' end end - EOS - - expected_offenses = [{ message: "Don't negate 'build.without?': use 'build.with?'", - severity: :convention, - line: 5, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "unnecessary build.without? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if build.without? "--without-bar" + ^^^^^^^^^^^^^ Don't duplicate 'without': Use `build.without? \"bar\"` to check for \"--without-bar\" end end - EOS - - expected_offenses = [{ message: "Don't duplicate 'without': Use `build.without? \"bar\"` to check for \"--without-bar\"", - severity: :convention, - line: 5, - column: 30, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "unnecessary build.with? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if build.with? "--with-bar" + ^^^^^^^^^^ Don't duplicate 'with': Use `build.with? \"bar\"` to check for \"--with-bar\" end end - EOS - - expected_offenses = [{ message: "Don't duplicate 'with': Use `build.with? \"bar\"` to check for \"--with-bar\"", - severity: :convention, - line: 5, - column: 27, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "build.include? conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if build.include? "without-bar" + ^^^^^^^^^^^ Use build.without? \"bar\" instead of build.include? 'without-bar' end end - EOS - - expected_offenses = [{ message: "Use build.without? \"bar\" instead of build.include? 'without-bar'", - severity: :convention, - line: 5, - column: 30, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "build.include? with dashed args conditional" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def post_install return if build.include? "--bar" + ^^^^^ Reference 'bar' without dashes end end - EOS - - expected_offenses = [{ message: "Reference 'bar' without dashes", - severity: :convention, - line: 5, - column: 30, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "def options usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def options + ^^^^^^^^^^^ Use new-style option definitions [["--bar", "desc"]] end end - EOS - - expected_offenses = [{ message: "Use new-style option definitions", - severity: :convention, - line: 5, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end @@ -469,105 +282,61 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do context "When auditing formula" do it "FileUtils usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' FileUtils.mv "hello" + ^^^^^^^^^^^^^^^^^^^^ Don\'t need \'FileUtils.\' before mv end - EOS - - expected_offenses = [{ message: "Don't need 'FileUtils.' before mv", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "long inreplace block vars" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' inreplace "foo" do |longvar| + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \"inreplace <filenames> do |s|\" is preferred over \"|longvar|\". somerandomCall(longvar) end end - EOS - - expected_offenses = [{ message: "\"inreplace <filenames> do |s|\" is preferred over \"|longvar|\".", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "an invalid rebuild statement" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' bottle do rebuild 0 + ^^^^^^^^^ 'rebuild 0' should be removed sha256 "fe0679b932dd43a87fd415b609a7fbac7a069d117642ae8ebaac46ae1fb9f0b3" => :sierra end end - EOS - - expected_offenses = [{ message: "'rebuild 0' should be removed", - severity: :convention, - line: 5, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "OS.linux? check" do - source = <<~EOS + expect_offense(<<~RUBY, "/homebrew-core/") class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' bottle do if OS.linux? + ^^^^^^^^^ Don\'t use OS.linux?; Homebrew/core only supports macOS nil end sha256 "fe0679b932dd43a87fd415b609a7fbac7a069d117642ae8ebaac46ae1fb9f0b3" => :sierra end end - EOS - - expected_offenses = [{ message: "Don't use OS.linux?; Homebrew/core only supports macOS", - severity: :convention, - line: 5, - column: 7, - source: source }] - - inspect_source(source, "/homebrew-core/") - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "fails_with :llvm block" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' @@ -575,101 +344,54 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do sha256 "fe0679b932dd43a87fd415b609a7fbac7a069d117642ae8ebaac46ae1fb9f0b3" => :sierra end fails_with :llvm do + ^^^^^^^^^^^^^^^^ 'fails_with :llvm' is now a no-op so should be removed build 2335 cause "foo" end end - EOS - - expected_offenses = [{ message: "'fails_with :llvm' is now a no-op so should be removed", - severity: :convention, - line: 7, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "def test's deprecated usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def test + ^^^^^^^^ Use new-style test definitions (test do) assert_equals "1", "1" end end - EOS - - expected_offenses = [{ message: "Use new-style test definitions (test do)", - severity: :convention, - line: 5, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end - it "deprecated skip_clean call" do - source = <<~EOS + it "with deprecated skip_clean call" do + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' skip_clean :all + ^^^^^^^^^^^^^^^ `skip_clean :all` is deprecated; brew no longer strips symbols. Pass explicit paths to prevent Homebrew from removing empty folders. end - EOS - - expected_offenses = [{ message: <<~EOS.chomp, - `skip_clean :all` is deprecated; brew no longer strips symbols - Pass explicit paths to prevent Homebrew from removing empty folders. - EOS - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "build.universal? deprecated usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' if build.universal? + ^^^^^^^^^^^^^^^^ macOS has been 64-bit only since 10.6 so build.universal? is deprecated. "foo" end end - EOS - - expected_offenses = [{ message: "macOS has been 64-bit only since 10.6 so build.universal? is deprecated.", - severity: :convention, - line: 4, - column: 5, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "build.universal? deprecation exempted formula" do - source = <<~EOS + expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/wine.rb") class Wine < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' @@ -677,38 +399,24 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do "foo" end end - EOS - - inspect_source(source, "/homebrew-core/Formula/wine.rb") - expect(cop.offenses).to be_empty + RUBY end it "deprecated ENV.universal_binary usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' if build? ENV.universal_binary + ^^^^^^^^^^^^^^^^^^^^ macOS has been 64-bit only since 10.6 so ENV.universal_binary is deprecated. end end - EOS - - expected_offenses = [{ message: "macOS has been 64-bit only since 10.6 so ENV.universal_binary is deprecated.", - severity: :convention, - line: 5, - column: 5, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "ENV.universal_binary deprecation exempted formula" do - source = <<~EOS + expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/wine.rb") class Wine < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' @@ -716,685 +424,370 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do ENV.universal_binary end end - EOS - - inspect_source(source, "/homebrew-core/Formula/wine.rb") - expect(cop.offenses).to be_empty + RUBY end it "deprecated ENV.x11 usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' if build? ENV.x11 + ^^^^^^^ Use "depends_on :x11" instead of "ENV.x11" end end - EOS - - expected_offenses = [{ message: 'Use "depends_on :x11" instead of "ENV.x11"', - severity: :convention, - line: 5, - column: 5, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "install_name_tool usage instead of ruby-macho" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "install_name_tool", "-id" + ^^^^^^^^^^^^^^^^^ Use ruby-macho instead of calling "install_name_tool" end - EOS - - expected_offenses = [{ message: 'Use ruby-macho instead of calling "install_name_tool"', - severity: :convention, - line: 4, - column: 10, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "ruby-macho alternatives audit exempted formula" do - source = <<~EOS + expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/cctools.rb") class Cctools < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "install_name_tool", "-id" end - EOS - - inspect_source(source, "/homebrew-core/Formula/cctools.rb") - expect(cop.offenses).to be_empty + RUBY end it "npm install without language::Node args" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "npm", "install" + ^^^^^^^^^^^^^^^^^^^^^^^ Use Language::Node for npm install args end - EOS - - expected_offenses = [{ message: "Use Language::Node for npm install args", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "npm install without language::Node args in kibana(exempted formula)" do - source = <<~EOS + expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/kibana@4.4.rb") class KibanaAT44 < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "npm", "install" end - EOS - - inspect_source(source, "/homebrew-core/Formula/kibana@4.4.rb") - expect(cop.offenses).to be_empty + RUBY end it "depends_on with an instance as argument" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on FOO::BAR.new + ^^^^^^^^^^^^ `depends_on` can take requirement classes instead of instances end - EOS - - expected_offenses = [{ message: "`depends_on` can take requirement classes instead of instances", - severity: :convention, - line: 4, - column: 13, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "old style OS check" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on :foo if MacOS.snow_leopard? + ^^^^^^^^^^^^^^^^^^^ \"MacOS.snow_leopard?\" is deprecated, use a comparison to MacOS.version instead end - EOS - - expected_offenses = [{ message: "\"MacOS.snow_leopard?\" is deprecated, use a comparison to MacOS.version instead", - severity: :convention, - line: 4, - column: 21, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "non glob DIR usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' rm_rf Dir["src/{llvm,test,librustdoc,etc/snapshot.pyc}"] rm_rf Dir["src/snapshot.pyc"] + ^^^^^^^^^^^^^^^^ Dir(["src/snapshot.pyc"]) is unnecessary; just use "src/snapshot.pyc" end - EOS - - expected_offenses = [{ message: 'Dir(["src/snapshot.pyc"]) is unnecessary; just use "src/snapshot.pyc"', - severity: :convention, - line: 5, - column: 13, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "system call to fileUtils Method" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "mkdir", "foo" + ^^^^^ Use the `mkdir` Ruby method instead of `system "mkdir", "foo"` end - EOS - - expected_offenses = [{ message: 'Use the `mkdir` Ruby method instead of `system "mkdir", "foo"`', - severity: :convention, - line: 4, - column: 10, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "top-level function def outside class body" do - source = <<~EOS + expect_offense(<<~RUBY) def test + ^^^^^^^^ Define method test in the class body, not at the top-level nil end class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' end - EOS - - expected_offenses = [{ message: "Define method test in the class body, not at the top-level", - severity: :convention, - line: 1, - column: 0, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "Using ARGV to check options" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install verbose = ARGV.verbose? + ^^^^^^^^^^^^^ Use build instead of ARGV to check options end end - EOS - - expected_offenses = [{ message: "Use build instead of ARGV to check options", - severity: :convention, - line: 5, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it 'man+"man8" usage' do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install man1.install man+"man8" => "faad.1" + ^^^^ "man+"man8"" should be "man8" end end - EOS - - expected_offenses = [{ message: '"man+"man8"" should be "man8"', - severity: :convention, - line: 5, - column: 22, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "hardcoded gcc compiler" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install system "/usr/bin/gcc", "foo" + ^^^^^^^^^^^^ Use "#{ENV.cc}" instead of hard-coding "gcc" end end - EOS - - expected_offenses = [{ message: "Use \"\#{ENV.cc}\" instead of hard-coding \"gcc\"", - severity: :convention, - line: 5, - column: 12, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "hardcoded g++ compiler" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install system "/usr/bin/g++", "-o", "foo", "foo.cc" + ^^^^^^^^^^^^ Use "#{ENV.cxx}" instead of hard-coding "g++" end end - EOS - - expected_offenses = [{ message: "Use \"\#{ENV.cxx}\" instead of hard-coding \"g++\"", - severity: :convention, - line: 5, - column: 12, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "hardcoded llvm-g++ compiler" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install ENV["COMPILER_PATH"] = "/usr/bin/llvm-g++" + ^^^^^^^^^^^^^^^^^ Use "#{ENV.cxx}" instead of hard-coding "llvm-g++" end end - EOS - - expected_offenses = [{ message: "Use \"\#{ENV.cxx}\" instead of hard-coding \"llvm-g++\"", - severity: :convention, - line: 5, - column: 28, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "hardcoded gcc compiler" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install ENV["COMPILER_PATH"] = "/usr/bin/gcc" + ^^^^^^^^^^^^ Use \"\#{ENV.cc}\" instead of hard-coding \"gcc\" end end - EOS - - expected_offenses = [{ message: "Use \"\#{ENV.cc}\" instead of hard-coding \"gcc\"", - severity: :convention, - line: 5, - column: 28, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "formula path shortcut : man" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install - mv "\#{share}/man", share + mv "#{share}/man", share + ^^^^ "#{share}/man" should be "#{man}" end end - EOS - - expected_offenses = [{ message: '"#{share}/man" should be "#{man}"', - severity: :convention, - line: 5, - column: 17, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "formula path shortcut : libexec" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install - mv "\#{prefix}/libexec", share + mv "#{prefix}/libexec", share + ^^^^^^^^ "#{prefix}/libexec" should be "#{libexec}" end end - EOS - - expected_offenses = [{ message: "\"\#\{prefix}/libexec\" should be \"\#{libexec}\"", - severity: :convention, - line: 5, - column: 18, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "formula path shortcut : info" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install - system "./configure", "--INFODIR=\#{prefix}/share/info" + system "./configure", "--INFODIR=#{prefix}/share/info" + ^^^^^^ "#{prefix}/share" should be "#{share}" + ^^^^^^^^^^^ "#{prefix}/share/info" should be "#{info}" end end - EOS - - expected_offenses = [{ message: "\"\#\{prefix}/share/info\" should be \"\#{info}\"", - severity: :convention, - line: 5, - column: 47, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "formula path shortcut : man8" do - source = <<~EOS + expect_offense(<<~'RUBY') class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install - system "./configure", "--MANDIR=\#{prefix}/share/man/man8" + system "./configure", "--MANDIR=#{prefix}/share/man/man8" + ^^^^^^ "#{prefix}/share" should be "#{share}" + ^^^^^^^^^^^^^^^ "#{prefix}/share/man/man8" should be "#{man8}" end end - EOS - - expected_offenses = [{ message: "\"\#\{prefix}/share/man/man8\" should be \"\#{man8}\"", - severity: :convention, - line: 5, - column: 46, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "dependecies which have to vendored" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on "lpeg" => :lua51 + ^^^^^ lua modules should be vendored rather than use deprecated depends_on \"lpeg\" => :lua51` end - EOS - - expected_offenses = [{ message: "lua modules should be vendored rather than use deprecated depends_on \"lpeg\" => :lua51`", - severity: :convention, - line: 4, - column: 24, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "manually setting env" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' system "export", "var=value" + ^^^^^^ Use ENV instead of invoking 'export' to modify the environment end - EOS - - expected_offenses = [{ message: "Use ENV instead of invoking 'export' to modify the environment", - severity: :convention, - line: 4, - column: 10, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "dependencies with invalid options" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on "foo" => "with-bar" + ^^^^^^^^^^^^^^^^^^^ Dependency foo should not use option with-bar end - EOS - - expected_offenses = [{ message: "Dependency foo should not use option with-bar", - severity: :convention, - line: 4, - column: 13, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "inspecting version manually" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' if version == "HEAD" + ^^^^^^^^^^^^^^^^^ Use 'build.head?' instead of inspecting 'version' foo() end end - EOS - - expected_offenses = [{ message: "Use 'build.head?' instead of inspecting 'version'", - severity: :convention, - line: 4, - column: 5, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "deprecated ENV.fortran usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' test do ENV.fortran + ^^^^^^^^^^^ Use `depends_on :fortran` instead of `ENV.fortran` end end - EOS - - expected_offenses = [{ message: "Use `depends_on :fortran` instead of `ENV.fortran`", - severity: :convention, - line: 5, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "deprecated ARGV.include? (--HEAD) usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' test do head = ARGV.include? "--HEAD" + ^^^^^^ Use "if build.head?" instead end end - EOS - - expected_offenses = [{ message: 'Use "if build.head?" instead', - severity: :convention, - line: 5, - column: 26, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "deprecated MACOS_VERSION const usage" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' test do version = MACOS_VERSION + ^^^^^^^^^^^^^ Use MacOS.version instead of MACOS_VERSION end end - EOS - - expected_offenses = [{ message: "Use MacOS.version instead of MACOS_VERSION", - severity: :convention, - line: 5, - column: 14, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "deprecated if build.with? conditional dependency" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on "foo" if build.with? "with-foo" + ^^^^^^^^^^^^^^^^ Replace depends_on "foo" if build.with? "with-foo" with depends_on "foo" => :optional end - EOS - - expected_offenses = [{ message: 'Replace depends_on "foo" if build.with? "with-foo" with depends_on "foo" => :optional', - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "unless conditional dependency with build.without?" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on :foo unless build.without? "foo" + ^^^^^^^^^^^^^^^ Replace depends_on :foo unless build.without? "foo" with depends_on :foo => :recommended end - EOS - - expected_offenses = [{ message: 'Replace depends_on :foo unless build.without? "foo" with depends_on :foo => :recommended', - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "unless conditional dependency with build.include?" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' depends_on :foo unless build.include? "without-foo" + ^^^^^^^^^^^^^^^ Replace depends_on :foo unless build.include? "without-foo" with depends_on :foo => :recommended end - EOS - - expected_offenses = [{ message: 'Replace depends_on :foo unless build.include? "without-foo" with depends_on :foo => :recommended', - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/options_cop_spec.rb b/Library/Homebrew/test/rubocops/options_cop_spec.rb index 1ed6ee740..b888f4315 100644 --- a/Library/Homebrew/test/rubocops/options_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/options_cop_spec.rb @@ -1,32 +1,16 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/options_cop" describe RuboCop::Cop::FormulaAudit::Options do subject(:cop) { described_class.new } - context "When auditing options" do - it "32-bit" do - source = <<~EOS - class Foo < Formula - url 'http://example.com/foo-1.0.tgz' - option "32-bit", "with 32-bit" - end - EOS - - expected_offenses = [{ message: described_class::DEPRECATION_MSG, - severity: :convention, - line: 3, - column: 10, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) + it "reports an offense when using the 32-bit option" do + expect_offense(<<~RUBY) + class Foo < Formula + url 'http://example.com/foo-1.0.tgz' + option "32-bit", "with 32-bit" + ^^^^^^ macOS has been 64-bit only since 10.6 so 32-bit options are deprecated. end - end + RUBY end end @@ -35,71 +19,34 @@ describe RuboCop::Cop::FormulaAuditStrict::Options do context "When auditing options strictly" do it "with universal" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' option :universal + ^^^^^^^^^^^^^^^^^ macOS has been 64-bit only since 10.6 so universal options are deprecated. end - EOS - - expected_offenses = [{ message: described_class::DEPRECATION_MSG, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "with deprecated options" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' option :cxx11 option "examples", "with-examples" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Options should begin with with/without. Migrate '--examples' with `deprecated_option`. end - EOS - - MSG_1 = "Options should begin with with/without."\ - " Migrate '--examples' with `deprecated_option`.".freeze - expected_offenses = [{ message: MSG_1, - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "with misc deprecated options" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' option "without-check" + ^^^^^^^^^^^^^^^^^^^^^^ Use '--without-test' instead of '--without-check'. Migrate '--without-check' with `deprecated_option`. end - EOS - - MSG_2 = "Use '--without-test' instead of '--without-check'."\ - " Migrate '--without-check' with `deprecated_option`.".freeze - expected_offenses = [{ message: MSG_2, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end @@ -109,24 +56,13 @@ describe RuboCop::Cop::NewFormulaAudit::Options do context "When auditing options for a new formula" do it "with deprecated options" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' deprecated_option "examples" => "with-examples" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ New Formula should not use `deprecated_option` end - EOS - - expected_offenses = [{ message: described_class::MSG, - severity: :convention, - line: 3, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/patches_cop_spec.rb b/Library/Homebrew/test/rubocops/patches_cop_spec.rb index fdecb676e..771171160 100644 --- a/Library/Homebrew/test/rubocops/patches_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/patches_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/patches_cop" describe RuboCop::Cop::FormulaAudit::Patches do @@ -8,37 +5,24 @@ describe RuboCop::Cop::FormulaAudit::Patches do context "When auditing legacy patches" do it "When there is no legacy patch" do - source = <<~EOS + expect_no_offenses(<<~RUBY) class Foo < Formula url 'http://example.com/foo-1.0.tgz' end - EOS - inspect_source(source) - expect(cop.offenses).to eq([]) + RUBY end it "Formula with `def patches`" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula homepage "ftp://example.com/foo" url "http://example.com/foo-1.0.tgz" def patches + ^^^^^^^^^^^ Use the patch DSL instead of defining a 'patches' method DATA end end - EOS - - expected_offenses = [{ message: "Use the patch DSL instead of defining a 'patches' method", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "Patch URLs" do @@ -120,7 +104,10 @@ describe RuboCop::Cop::FormulaAudit::Patches do source: source }] end expected_offense.zip([cop.offenses.last]).each do |expected, actual| - expect_offense(expected, actual) + expect(actual.message).to eq(expected[:message]) + expect(actual.severity).to eq(expected[:severity]) + expect(actual.line).to eq(expected[:line]) + expect(actual.column).to eq(expected[:column]) end end end @@ -157,7 +144,10 @@ describe RuboCop::Cop::FormulaAudit::Patches do inspect_source(source) expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) + expect(actual.message).to eq(expected[:message]) + expect(actual.severity).to eq(expected[:severity]) + expect(actual.line).to eq(expected[:line]) + expect(actual.column).to eq(expected[:column]) end end end @@ -233,7 +223,10 @@ describe RuboCop::Cop::FormulaAudit::Patches do source: source }] end expected_offense.zip([cop.offenses.last]).each do |expected, actual| - expect_offense(expected, actual) + expect(actual.message).to eq(expected[:message]) + expect(actual.severity).to eq(expected[:severity]) + expect(actual.line).to eq(expected[:line]) + expect(actual.column).to eq(expected[:column]) end end end diff --git a/Library/Homebrew/test/rubocops/text_cop_spec.rb b/Library/Homebrew/test/rubocops/text_cop_spec.rb index dbddff1ad..84e2344c5 100644 --- a/Library/Homebrew/test/rubocops/text_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/text_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/text_cop" describe RuboCop::Cop::FormulaAudit::Text do @@ -8,189 +5,114 @@ describe RuboCop::Cop::FormulaAudit::Text do context "When auditing formula text" do it "with both openssl and libressl optional dependencies" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" depends_on "openssl" depends_on "libressl" => :optional + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Formulae should not depend on both OpenSSL and LibreSSL (even optionally). end - EOS - - expected_offenses = [{ message: "Formulae should not depend on both OpenSSL and LibreSSL (even optionally).", - severity: :convention, - line: 6, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "with both openssl and libressl dependencies" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" depends_on "openssl" depends_on "libressl" + ^^^^^^^^^^^^^^^^^^^^^ Formulae should not depend on both OpenSSL and LibreSSL (even optionally). end - EOS - - expected_offenses = [{ message: "Formulae should not depend on both OpenSSL and LibreSSL (even optionally).", - severity: :convention, - line: 6, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When xcodebuild is called without SYMROOT" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install xcodebuild "-project", "meow.xcodeproject" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ xcodebuild should be passed an explicit \"SYMROOT\" end end - EOS - - expected_offenses = [{ message: "xcodebuild should be passed an explicit \"SYMROOT\"", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When xcodebuild is called without any args" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install xcodebuild + ^^^^^^^^^^ xcodebuild should be passed an explicit \"SYMROOT\" end end - EOS - - expected_offenses = [{ message: "xcodebuild should be passed an explicit \"SYMROOT\"", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When go get is executed" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install system "go", "get", "bar" + ^^^^^^^^^^^^^^^^^^^^^^^^^ Formulae should not use `go get`. If non-vendored resources are required use `go_resource`s. end end - EOS - - expected_offenses = [{ message: "Formulae should not use `go get`. If non-vendored resources are required use `go_resource`s.", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When xcodebuild is executed" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install system "xcodebuild", "foo", "bar" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use \"xcodebuild *args\" instead of \"system 'xcodebuild', *args\" end end - EOS - - expected_offenses = [{ message: "use \"xcodebuild *args\" instead of \"system 'xcodebuild', *args\"", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When scons is executed" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install system "scons", "foo", "bar" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use \"scons *args\" instead of \"system 'scons', *args\" end end - EOS - - expected_offenses = [{ message: "use \"scons *args\" instead of \"system 'scons', *args\"", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When plist_options are not defined when using a formula-defined plist", :ruby23 do - source = <<~RUBY + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install system "xcodebuild", "foo", "bar" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use \"xcodebuild *args\" instead of \"system 'xcodebuild', *args\" end def plist + ^^^^^^^^^ Please set plist_options when using a formula-defined plist. <<~XML <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> @@ -204,23 +126,12 @@ describe RuboCop::Cop::FormulaAudit::Text do end end RUBY - - expected_offenses = [{ message: "Please set plist_options when using a formula-defined plist.", - severity: :convention, - line: 9, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end end it "When language/go is require'd" do - source = <<~EOS + expect_offense(<<~RUBY) require "language/go" + ^^^^^^^^^^^^^^^^^^^^^ require "language/go" is unnecessary unless using `go_resource`s class Foo < Formula url "http://example.com/foo-1.0.tgz" @@ -228,30 +139,20 @@ describe RuboCop::Cop::FormulaAudit::Text do def install system "go", "get", "bar" + ^^^^^^^^^^^^^^^^^^^^^^^^^ Formulae should not use `go get`. If non-vendored resources are required use `go_resource`s. end end - EOS - - expected_offenses = [{ message: "require \"language/go\" is unnecessary unless using `go_resource`s", - severity: :convention, - line: 1, - column: 0, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When formula uses virtualenv and also `setuptools` resource" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" resource "setuptools" do + ^^^^^^^^^^^^^^^^^^^^^ Formulae using virtualenvs do not need a `setuptools` resource. url "https://foo.com/foo.tar.gz" sha256 "db0904a28253cfe53e7dedc765c71596f3c53bb8a866ae50123320ec1a7b73fd" end @@ -260,51 +161,21 @@ describe RuboCop::Cop::FormulaAudit::Text do virtualenv_create(libexec) end end - EOS - - expected_offenses = [{ message: "Formulae using virtualenvs do not need a `setuptools` resource.", - severity: :convention, - line: 5, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end it "When Formula.factory(name) is used" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula url "http://example.com/foo-1.0.tgz" homepage "http://example.com" def install Formula.factory(name) + ^^^^^^^^^^^^^^^^^^^^^ \"Formula.factory(name)\" is deprecated in favor of \"Formula[name]\" end end - EOS - - expected_offenses = [{ message: "\"Formula.factory(name)\" is deprecated in favor of \"Formula[name]\"", - severity: :convention, - line: 6, - column: 4, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses).each do |expected, actual| - expect_offense(expected, actual) - end - end - - def expect_offense(expected, actual) - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) + RUBY end end end diff --git a/Library/Homebrew/test/rubocops/urls_cop_spec.rb b/Library/Homebrew/test/rubocops/urls_cop_spec.rb index 0bda7f110..494028bd5 100644 --- a/Library/Homebrew/test/rubocops/urls_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/urls_cop_spec.rb @@ -1,6 +1,3 @@ -require "rubocop" -require "rubocop/rspec/support" -require_relative "../../extend/string" require_relative "../../rubocops/urls_cop" describe RuboCop::Cop::FormulaAudit::Urls do @@ -129,65 +126,40 @@ describe RuboCop::Cop::FormulaAudit::Urls do inspect_source(source) expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) + expect(actual.message).to eq(expected[:message]) + expect(actual.severity).to eq(expected[:severity]) + expect(actual.line).to eq(expected[:line]) + expect(actual.column).to eq(expected[:column]) end end end it "with offenses in stable/devel/head block" do - formulas = [{ - "url" => "git://github.com/foo.git", - "msg" => "Please use https:// for git://github.com/foo.git", - "col" => 4, - }] - formulas.each do |formula| - source = <<~EOS - class Foo < Formula - desc "foo" - url "https://foo.com" + expect_offense(<<~RUBY) + class Foo < Formula + desc "foo" + url "https://foo.com" - devel do - url "#{formula["url"]}", - :tag => "v1.0.0-alpha.1", - :revision => "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - version "1.0.0-alpha.1" - end + devel do + url "git://github.com/foo.git", + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Please use https:// for git://github.com/foo.git + :tag => "v1.0.0-alpha.1", + :revision => "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + version "1.0.0-alpha.1" end - EOS - expected_offenses = [{ message: formula["msg"], - severity: :convention, - line: 6, - column: formula["col"], - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) end - end + RUBY end it "with duplicate mirror" do - source = <<~EOS + expect_offense(<<~RUBY) class Foo < Formula desc "foo" url "https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz" mirror "https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ URL should not be duplicated as a mirror: https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz end - EOS - - expected_offenses = [{ message: "URL should not be duplicated as a mirror: https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz", - severity: :convention, - line: 4, - column: 2, - source: source }] - - inspect_source(source) - - expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) - end + RUBY end end end @@ -195,42 +167,31 @@ end describe RuboCop::Cop::FormulaAuditStrict::PyPiUrls do subject(:cop) { described_class.new } - context "When auditing urls" do - it "with pypi offenses" do - formulas = [{ - "url" => "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz", - "msg" => "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz should be `https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz`", - "col" => 2, - "corrected_url" =>"https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz", - }] - formulas.each do |formula| - source = <<~EOS - class Foo < Formula - desc "foo" - url "#{formula["url"]}" - end - EOS - corrected_source = <<~EOS - class Foo < Formula - desc "foo" - url "#{formula["corrected_url"]}" - end - EOS - expected_offenses = [{ message: formula["msg"], - severity: :convention, - line: 3, - column: formula["col"], - source: source }] + context "when a pypi.python.org URL is used" do + it "reports an offense" do + expect_offense(<<~RUBY) + class Foo < Formula + desc "foo" + url "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz should be `https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz` + end + RUBY + end - inspect_source(source) - # Check for expected offenses - expected_offenses.zip(cop.offenses.reverse).each do |expected, actual| - expect_offense(expected, actual) + it "support auto-correction" do + corrected = autocorrect_source(<<~RUBY) + class Foo < Formula + desc "foo" + url "https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz" end - # Check for expected auto corrected source - new_source = autocorrect_source(source) - expect(new_source).to eq(corrected_source) - end + RUBY + + expect(corrected).to eq <<~RUBY + class Foo < Formula + desc "foo" + url "https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz" + end + RUBY end end end diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb index a5821ee14..98d1f2511 100644 --- a/Library/Homebrew/test/spec_helper.rb +++ b/Library/Homebrew/test/spec_helper.rb @@ -2,6 +2,8 @@ require "find" require "pathname" require "rspec/its" require "rspec/wait" +require "rubocop" +require "rubocop/rspec/support" require "set" if ENV["HOMEBREW_TESTS_COVERAGE"] @@ -23,7 +25,6 @@ require "test/support/helper/fixtures" require "test/support/helper/formula" require "test/support/helper/mktmpdir" require "test/support/helper/output_as_tty" -require "test/support/helper/rubocop" require "test/support/helper/spec/shared_context/homebrew_cask" if OS.mac? require "test/support/helper/spec/shared_context/integration_test" @@ -43,11 +44,12 @@ RSpec.configure do |config| config.filter_run_when_matching :focus + config.include(RuboCop::RSpec::ExpectOffense) + config.include(Test::Helper::Fixtures) config.include(Test::Helper::Formula) config.include(Test::Helper::MkTmpDir) config.include(Test::Helper::OutputAsTTY) - config.include(Test::Helper::RuboCop) config.before(:each, :needs_compat) do skip "Requires compatibility layer." if ENV["HOMEBREW_NO_COMPAT"] diff --git a/Library/Homebrew/test/support/helper/rubocop.rb b/Library/Homebrew/test/support/helper/rubocop.rb deleted file mode 100644 index 351f2ad82..000000000 --- a/Library/Homebrew/test/support/helper/rubocop.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Test - module Helper - module RuboCop - def expect_offense(expected, actual) - expect(actual).to_not be_nil - expect(actual.message).to eq(expected[:message]) - expect(actual.severity).to eq(expected[:severity]) - expect(actual.line).to eq(expected[:line]) - expect(actual.column).to eq(expected[:column]) - end - end - end -end |
