brew/Library/Homebrew/test/rubocops/lines/generate_completions_spec.rb

147 lines
6.3 KiB
Ruby
Raw Normal View History

2022-08-11 17:59:53 +02:00
# frozen_string_literal: true
require "rubocops/lines"
describe RuboCop::Cop::FormulaAudit do
describe RuboCop::Cop::FormulaAudit::GenerateCompletionsDSL do
subject(:cop) { described_class.new }
it "reports an offense when writing to a shell completions file directly" do
expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
class Foo < Formula
name "foo"
def install
(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "bash")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/GenerateCompletionsDSL: Use `generate_completions_from_executable(bin/"foo", "completions", shells: [:bash])` instead of `(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "bash")`.
2022-08-11 17:59:53 +02:00
end
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
name "foo"
def install
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash])
end
2022-09-05 19:32:17 +02:00
end
RUBY
end
it "reports an offense when writing to a shell completions file differing from the formula name" do
expect_offense(<<~RUBY, "/homebrew-core/Formula/foo-cli.rb")
class FooCli < Formula
name "foo-cli"
def install
(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "bash")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/GenerateCompletionsDSL: Use `generate_completions_from_executable(bin/"foo", "completions", base_name: "foo", shells: [:bash])` instead of `(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "bash")`.
2022-09-05 19:32:17 +02:00
end
end
RUBY
expect_correction(<<~RUBY)
class FooCli < Formula
name "foo-cli"
def install
generate_completions_from_executable(bin/"foo", "completions", base_name: "foo", shells: [:bash])
end
end
RUBY
end
it "reports an offense when writing to a shell completions file using an arg for the shell parameter" do
expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
class Foo < Formula
name "foo"
def install
(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "--shell=bash")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/GenerateCompletionsDSL: Use `generate_completions_from_executable(bin/"foo", "completions", shells: [:bash], shell_parameter_format: :arg)` instead of `(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "--shell=bash")`.
2022-09-05 19:32:17 +02:00
end
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
name "foo"
def install
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash], shell_parameter_format: :arg)
end
2022-09-05 19:46:42 +02:00
end
RUBY
end
it "reports an offense when writing to a shell completions file using a custom flag for the shell parameter" do
expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
class Foo < Formula
name "foo"
def install
(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "--completion-script-bash")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/GenerateCompletionsDSL: Use `generate_completions_from_executable(bin/"foo", "completions", shells: [:bash], shell_parameter_format: "--completion-script-")` instead of `(bash_completion/"foo").write Utils.safe_popen_read(bin/"foo", "completions", "--completion-script-bash")`.
2022-09-05 19:46:42 +02:00
end
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
name "foo"
def install
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash], shell_parameter_format: "--completion-script-")
end
2022-08-11 17:59:53 +02:00
end
RUBY
end
it "reports an offense when writing to a completions file indirectly" do
expect_offense(<<~RUBY)
class Foo < Formula
name "foo"
def install
output = Utils.safe_popen_read(bin/"foo", "completions", "bash")
(bash_completion/"foo").write output
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/GenerateCompletionsDSL: Use `generate_completions_from_executable` DSL instead of `(bash_completion/"foo").write output`.
2022-08-11 17:59:53 +02:00
end
end
RUBY
end
end
describe RuboCop::Cop::FormulaAudit::SingleGenerateCompletionsDSLCall do
subject(:cop) { described_class.new }
it "reports an offense when using multiple #generate_completions_from_executable calls for different shells" do
expect_offense(<<~RUBY)
class Foo < Formula
name "foo"
def install
generate_completions_from_executable(bin/"foo", "completions", shells: [:bash])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/SingleGenerateCompletionsDSLCall: Use a single `generate_completions_from_executable` call combining all specified shells.
2022-08-11 17:59:53 +02:00
generate_completions_from_executable(bin/"foo", "completions", shells: [:zsh])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/SingleGenerateCompletionsDSLCall: Use a single `generate_completions_from_executable` call combining all specified shells.
2022-08-11 17:59:53 +02:00
generate_completions_from_executable(bin/"foo", "completions", shells: [:fish])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/SingleGenerateCompletionsDSLCall: Use `generate_completions_from_executable(bin/"foo", "completions")` instead of `generate_completions_from_executable(bin/"foo", "completions", shells: [:fish])`.
2022-08-11 17:59:53 +02:00
end
end
RUBY
expect_correction(<<~RUBY)
class Foo < Formula
name "foo"
def install
generate_completions_from_executable(bin/"foo", "completions")
end
end
RUBY
end
end
end