mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
284 lines
9.9 KiB
Ruby
284 lines
9.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rubocops/dependency_order"
|
|
|
|
RSpec.describe RuboCop::Cop::FormulaAudit::DependencyOrder do
|
|
subject(:cop) { described_class.new }
|
|
|
|
context "when auditing `uses_from_macos`" do
|
|
it "reports and corrects incorrectly ordered conditional dependencies" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
uses_from_macos "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 5) should be put before `dependency "apple"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "foo" => :optional
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects incorrectly ordered alphabetical dependencies" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "foo"
|
|
uses_from_macos "bar"
|
|
^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 5) should be put before `dependency "foo"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "bar"
|
|
uses_from_macos "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects incorrectly ordered dependencies that are Requirements" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos FooRequirement
|
|
uses_from_macos "bar"
|
|
^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 5) should be put before `dependency "FooRequirement"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "bar"
|
|
uses_from_macos FooRequirement
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects wrong conditional order within a spec block" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
head do
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
uses_from_macos "bar"
|
|
^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 6) should be put before `dependency "apple"` (line 5)
|
|
uses_from_macos "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 7) should be put before `dependency "apple"` (line 5)
|
|
end
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
uses_from_macos "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 10) should be put before `dependency "apple"` (line 9)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
head do
|
|
uses_from_macos "bar"
|
|
uses_from_macos "foo" => :optional
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
end
|
|
uses_from_macos "foo" => :optional
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports no offenses if correct order for multiple tags" do
|
|
expect_no_offenses(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
uses_from_macos "bar" => [:build, :test]
|
|
uses_from_macos "foo" => :build
|
|
uses_from_macos "apple"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects wrong conditional order within a system block" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
on_arm do
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
uses_from_macos "bar"
|
|
^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 6) should be put before `dependency "apple"` (line 5)
|
|
uses_from_macos "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 7) should be put before `dependency "apple"` (line 5)
|
|
end
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
on_arm do
|
|
uses_from_macos "bar"
|
|
uses_from_macos "foo" => :optional
|
|
uses_from_macos "apple" if build.with? "foo"
|
|
end
|
|
end
|
|
RUBY
|
|
end
|
|
end
|
|
|
|
context "when auditing `depends_on`" do
|
|
it "reports and corrects incorrectly ordered conditional dependencies" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "apple" if build.with? "foo"
|
|
depends_on "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 5) should be put before `dependency "apple"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "foo" => :optional
|
|
depends_on "apple" if build.with? "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects incorrectly ordered alphabetical dependencies" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "foo"
|
|
depends_on "bar"
|
|
^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 5) should be put before `dependency "foo"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "bar"
|
|
depends_on "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects incorrectly ordered dependencies that are Requirements" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on FooRequirement
|
|
depends_on "bar"
|
|
^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 5) should be put before `dependency "FooRequirement"` (line 4)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "bar"
|
|
depends_on FooRequirement
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects wrong conditional order within a spec block" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
head do
|
|
depends_on "apple" if build.with? "foo"
|
|
depends_on "bar"
|
|
^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 6) should be put before `dependency "apple"` (line 5)
|
|
depends_on "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 7) should be put before `dependency "apple"` (line 5)
|
|
end
|
|
depends_on "apple" if build.with? "foo"
|
|
depends_on "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 10) should be put before `dependency "apple"` (line 9)
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
head do
|
|
depends_on "bar"
|
|
depends_on "foo" => :optional
|
|
depends_on "apple" if build.with? "foo"
|
|
end
|
|
depends_on "foo" => :optional
|
|
depends_on "apple" if build.with? "foo"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports no offenses if correct order for multiple tags" do
|
|
expect_no_offenses(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
depends_on "bar" => [:build, :test]
|
|
depends_on "foo" => :build
|
|
depends_on "apple"
|
|
end
|
|
RUBY
|
|
end
|
|
|
|
it "reports and corrects wrong conditional order within a system block" do
|
|
expect_offense(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
on_linux do
|
|
depends_on "apple" if build.with? "foo"
|
|
depends_on "bar"
|
|
^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "bar"` (line 6) should be put before `dependency "apple"` (line 5)
|
|
depends_on "foo" => :optional
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/DependencyOrder: `dependency "foo"` (line 7) should be put before `dependency "apple"` (line 5)
|
|
end
|
|
end
|
|
RUBY
|
|
|
|
expect_correction(<<~RUBY)
|
|
class Foo < Formula
|
|
homepage "https://brew.sh"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
on_linux do
|
|
depends_on "bar"
|
|
depends_on "foo" => :optional
|
|
depends_on "apple" if build.with? "foo"
|
|
end
|
|
end
|
|
RUBY
|
|
end
|
|
end
|
|
end
|