brew/Library/Homebrew/test/rubocops/cask/array_alphabetization_spec.rb
Issy Long 693a27d48b
Treat zap and uninstall the same
- Since `zap` can have more than just `trash`.
2024-01-21 19:48:30 +00:00

171 lines
4.4 KiB
Ruby

# frozen_string_literal: true
require "rubocops/rubocop-cask"
describe RuboCop::Cop::Cask::ArrayAlphabetization, :config do
it "reports an offense when a single `zap trash` path is specified in an array" do
expect_offense(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: ["~/Library/Application Support/Foo"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Avoid single-element arrays by removing the []
end
CASK
expect_correction(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: "~/Library/Application Support/Foo"
end
CASK
end
it "reports an offense when the `zap` stanza paths are not in alphabetical order" do
expect_offense(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
^ The array elements should be ordered alphabetically
"/Library/Application Support/Foo",
"/Library/Application Support/Baz",
"~/Library/Application Support/Foo",
"~/.dotfiles/thing",
"~/Library/Application Support/Bar",
],
rmdir: [
^ The array elements should be ordered alphabetically
"/Applications/foo/nested/blah",
"/Applications/foo/",
]
end
CASK
expect_correction(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
"/Library/Application Support/Baz",
"/Library/Application Support/Foo",
"~/.dotfiles/thing",
"~/Library/Application Support/Bar",
"~/Library/Application Support/Foo",
],
rmdir: [
"/Applications/foo/",
"/Applications/foo/nested/blah",
]
end
CASK
end
it "autocorrects alphabetization in zap trash paths with interpolation" do
expect_offense(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
^ The array elements should be ordered alphabetically
"~/Library/Application Support/Foo",
"~/Library/Application Support/Bar\#{version.major}",
]
end
CASK
expect_correction(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
"~/Library/Application Support/Bar\#{version.major}",
"~/Library/Application Support/Foo",
]
end
CASK
end
it "autocorrects alphabetization in `uninstall` methods" do
expect_offense(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
uninstall pkgutil: [
^ The array elements should be ordered alphabetically
"something",
"other",
],
script: [
"ordered",
"differently",
]
end
CASK
expect_correction(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
uninstall pkgutil: [
"other",
"something",
],
script: [
"ordered",
"differently",
]
end
CASK
end
it "ignores `uninstall` methods with commands" do
expect_no_offenses(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
uninstall script: {
args: ["--mode=something", "--another-mode"],
executable: "thing",
}
end
CASK
end
it "moves comments when autocorrecting" do
expect_offense(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
^ The array elements should be ordered alphabetically
# comment related to foo
"~/Library/Application Support/Foo",
# a really long comment related to Zoo
# and the Zoo comment continues
"~/Library/Application Support/Zoo",
"~/Library/Application Support/Bar",
"~/Library/Application Support/Baz", # in-line comment
]
end
CASK
expect_correction(<<~CASK)
cask "foo" do
url "https://example.com/foo.zip"
zap trash: [
"~/Library/Application Support/Bar",
"~/Library/Application Support/Baz", # in-line comment
# comment related to foo
"~/Library/Application Support/Foo",
# a really long comment related to Zoo
# and the Zoo comment continues
"~/Library/Application Support/Zoo",
]
end
CASK
end
end