2020-10-10 14:16:11 +02:00
|
|
|
# typed: false
|
2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
describe Tap do
|
2017-05-09 23:00:51 +02:00
|
|
|
alias_matcher :have_formula_file, :be_formula_file
|
|
|
|
alias_matcher :have_custom_remote, :be_custom_remote
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
subject(:homebrew_foo_tap) { described_class.new("Homebrew", "foo") }
|
2018-03-25 13:30:37 +01:00
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
let(:path) { Tap::TAP_DIRECTORY/"homebrew/homebrew-foo" }
|
|
|
|
let(:formula_file) { path/"Formula/foo.rb" }
|
|
|
|
let(:alias_file) { path/"Aliases/bar" }
|
|
|
|
let(:cmd_file) { path/"cmd/brew-tap-cmd.rb" }
|
|
|
|
let(:manpage_file) { path/"manpages/brew-tap-cmd.1" }
|
|
|
|
let(:bash_completion_file) { path/"completions/bash/brew-tap-cmd" }
|
|
|
|
let(:zsh_completion_file) { path/"completions/zsh/_brew-tap-cmd" }
|
|
|
|
let(:fish_completion_file) { path/"completions/fish/brew-tap-cmd.fish" }
|
|
|
|
|
2018-03-25 13:30:37 +01:00
|
|
|
before do
|
2017-02-27 23:07:22 +01:00
|
|
|
path.mkpath
|
2020-11-30 12:29:07 -05:00
|
|
|
(path/"audit_exceptions").mkpath
|
|
|
|
(path/"style_exceptions").mkpath
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def setup_tap_files
|
2018-07-11 15:17:40 +02:00
|
|
|
formula_file.write <<~RUBY
|
2017-02-27 23:07:22 +01:00
|
|
|
class Foo < Formula
|
2018-11-28 20:51:55 +01:00
|
|
|
url "https://brew.sh/foo-1.0.tar.gz"
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
2018-07-11 15:17:40 +02:00
|
|
|
RUBY
|
2017-02-27 23:07:22 +01:00
|
|
|
|
|
|
|
alias_file.parent.mkpath
|
|
|
|
ln_s formula_file, alias_file
|
|
|
|
|
2018-07-11 15:17:40 +02:00
|
|
|
(path/"formula_renames.json").write <<~JSON
|
2017-02-27 23:07:22 +01:00
|
|
|
{ "oldname": "foo" }
|
2018-07-11 15:17:40 +02:00
|
|
|
JSON
|
2017-02-27 23:07:22 +01:00
|
|
|
|
2018-07-11 15:17:40 +02:00
|
|
|
(path/"tap_migrations.json").write <<~JSON
|
2017-02-27 23:07:22 +01:00
|
|
|
{ "removed-formula": "homebrew/foo" }
|
2018-07-11 15:17:40 +02:00
|
|
|
JSON
|
2017-02-27 23:07:22 +01:00
|
|
|
|
2020-11-30 12:29:07 -05:00
|
|
|
%w[audit_exceptions style_exceptions].each do |exceptions_directory|
|
|
|
|
(path/"#{exceptions_directory}/formula_list.json").write <<~JSON
|
|
|
|
[ "foo", "bar" ]
|
|
|
|
JSON
|
|
|
|
|
|
|
|
(path/"#{exceptions_directory}/formula_hash.json").write <<~JSON
|
|
|
|
{ "foo": "foo1", "bar": "bar1" }
|
|
|
|
JSON
|
|
|
|
end
|
|
|
|
|
|
|
|
(path/"pypi_formula_mappings.json").write <<~JSON
|
|
|
|
{
|
|
|
|
"formula1": "foo",
|
|
|
|
"formula2": {
|
|
|
|
"package_name": "foo",
|
|
|
|
"extra_packages": ["bar"],
|
|
|
|
"exclude_packages": ["baz"]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
JSON
|
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
[
|
|
|
|
cmd_file,
|
|
|
|
manpage_file,
|
|
|
|
bash_completion_file,
|
|
|
|
zsh_completion_file,
|
|
|
|
fish_completion_file,
|
|
|
|
].each do |f|
|
|
|
|
f.parent.mkpath
|
|
|
|
touch f
|
|
|
|
end
|
|
|
|
|
|
|
|
chmod 0755, cmd_file
|
|
|
|
end
|
|
|
|
|
|
|
|
def setup_git_repo
|
|
|
|
path.cd do
|
2017-07-29 19:55:05 +02:00
|
|
|
system "git", "init"
|
|
|
|
system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-foo"
|
|
|
|
system "git", "add", "--all"
|
|
|
|
system "git", "commit", "-m", "init"
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-01-08 17:11:20 -05:00
|
|
|
def setup_completion(link:)
|
|
|
|
HOMEBREW_REPOSITORY.cd do
|
|
|
|
system "git", "init"
|
2021-01-12 16:27:25 -05:00
|
|
|
system "git", "config", "--replace-all", "homebrew.linkcompletions", link.to_s
|
|
|
|
system "git", "config", "--replace-all", "homebrew.completionsmessageshown", "true"
|
2021-01-08 17:11:20 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
specify "::fetch" do
|
2019-10-13 10:03:26 +01:00
|
|
|
expect(described_class.fetch("Homebrew", "core")).to be_kind_of(CoreTap)
|
|
|
|
expect(described_class.fetch("Homebrew", "homebrew")).to be_kind_of(CoreTap)
|
|
|
|
tap = described_class.fetch("Homebrew", "foo")
|
|
|
|
expect(tap).to be_kind_of(described_class)
|
|
|
|
expect(tap.name).to eq("homebrew/foo")
|
|
|
|
|
|
|
|
expect {
|
|
|
|
described_class.fetch("foo")
|
|
|
|
}.to raise_error(/Invalid tap name/)
|
|
|
|
|
|
|
|
expect {
|
|
|
|
described_class.fetch("homebrew/homebrew/bar")
|
|
|
|
}.to raise_error(/Invalid tap name/)
|
|
|
|
|
|
|
|
expect {
|
|
|
|
described_class.fetch("homebrew", "homebrew/baz")
|
|
|
|
}.to raise_error(/Invalid tap name/)
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
2018-07-25 09:37:33 +02:00
|
|
|
describe "::from_path" do
|
|
|
|
let(:tap) { described_class.fetch("Homebrew", "core") }
|
|
|
|
let(:path) { tap.path }
|
|
|
|
let(:formula_path) { path/"Formula/formula.rb" }
|
|
|
|
|
|
|
|
it "returns the Tap for a Formula path" do
|
|
|
|
expect(described_class.from_path(formula_path)).to eq tap
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the Tap when given its exact path" do
|
|
|
|
expect(described_class.from_path(path)).to eq tap
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-03-05 18:58:30 +01:00
|
|
|
specify "::names" do
|
2017-02-27 23:07:22 +01:00
|
|
|
expect(described_class.names.sort).to eq(["homebrew/core", "homebrew/foo"])
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "attributes" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.user).to eq("Homebrew")
|
|
|
|
expect(homebrew_foo_tap.repo).to eq("foo")
|
|
|
|
expect(homebrew_foo_tap.name).to eq("homebrew/foo")
|
|
|
|
expect(homebrew_foo_tap.path).to eq(path)
|
|
|
|
expect(homebrew_foo_tap).to be_installed
|
|
|
|
expect(homebrew_foo_tap).to be_official
|
|
|
|
expect(homebrew_foo_tap).not_to be_a_core_tap
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#issues_url" do
|
2019-10-13 10:03:26 +01:00
|
|
|
t = described_class.new("someone", "foo")
|
|
|
|
path = Tap::TAP_DIRECTORY/"someone/homebrew-foo"
|
|
|
|
path.mkpath
|
|
|
|
cd path do
|
|
|
|
system "git", "init"
|
|
|
|
system "git", "remote", "add", "origin",
|
|
|
|
"https://github.com/someone/homebrew-foo"
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
2019-10-13 10:03:26 +01:00
|
|
|
expect(t.issues_url).to eq("https://github.com/someone/homebrew-foo/issues")
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.issues_url).to eq("https://github.com/Homebrew/homebrew-foo/issues")
|
2019-10-13 10:03:26 +01:00
|
|
|
|
|
|
|
(Tap::TAP_DIRECTORY/"someone/homebrew-no-git").mkpath
|
|
|
|
expect(described_class.new("someone", "no-git").issues_url).to be nil
|
|
|
|
ensure
|
|
|
|
path.parent.rmtree
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "files" do
|
|
|
|
setup_tap_files
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.formula_files).to eq([formula_file])
|
|
|
|
expect(homebrew_foo_tap.formula_names).to eq(["homebrew/foo/foo"])
|
|
|
|
expect(homebrew_foo_tap.alias_files).to eq([alias_file])
|
|
|
|
expect(homebrew_foo_tap.aliases).to eq(["homebrew/foo/bar"])
|
|
|
|
expect(homebrew_foo_tap.alias_table).to eq("homebrew/foo/bar" => "homebrew/foo/foo")
|
|
|
|
expect(homebrew_foo_tap.alias_reverse_table).to eq("homebrew/foo/foo" => ["homebrew/foo/bar"])
|
|
|
|
expect(homebrew_foo_tap.formula_renames).to eq("oldname" => "foo")
|
|
|
|
expect(homebrew_foo_tap.tap_migrations).to eq("removed-formula" => "homebrew/foo")
|
|
|
|
expect(homebrew_foo_tap.command_files).to eq([cmd_file])
|
|
|
|
expect(homebrew_foo_tap.to_hash).to be_kind_of(Hash)
|
|
|
|
expect(homebrew_foo_tap).to have_formula_file(formula_file)
|
|
|
|
expect(homebrew_foo_tap).to have_formula_file("Formula/foo.rb")
|
|
|
|
expect(homebrew_foo_tap).not_to have_formula_file("bar.rb")
|
|
|
|
expect(homebrew_foo_tap).not_to have_formula_file("Formula/baz.sh")
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "#remote" do
|
|
|
|
it "returns the remote URL" do
|
|
|
|
setup_git_repo
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.remote).to eq("https://github.com/Homebrew/homebrew-foo")
|
2017-02-27 23:07:22 +01:00
|
|
|
expect { described_class.new("Homebrew", "bar").remote }.to raise_error(TapUnavailableError)
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap).not_to have_custom_remote
|
2017-02-27 23:07:22 +01:00
|
|
|
|
|
|
|
services_tap = described_class.new("Homebrew", "services")
|
|
|
|
services_tap.path.mkpath
|
|
|
|
services_tap.path.cd do
|
2017-07-29 19:55:05 +02:00
|
|
|
system "git", "init"
|
|
|
|
system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-services"
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
expect(services_tap).not_to be_private
|
|
|
|
end
|
|
|
|
|
2021-01-26 15:21:24 -05:00
|
|
|
it "returns nil if the Tap is not a Git repository" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.remote).to be nil
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
it "returns nil if Git is not available" do
|
|
|
|
setup_git_repo
|
2020-08-23 06:32:26 +02:00
|
|
|
allow(Utils::Git).to receive(:available?).and_return(false)
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.remote).to be nil
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-03-21 12:35:45 -04:00
|
|
|
describe "#remote_repo" do
|
|
|
|
it "returns the remote repository" do
|
|
|
|
setup_git_repo
|
|
|
|
|
|
|
|
expect(homebrew_foo_tap.remote_repo).to eq("Homebrew/homebrew-foo")
|
|
|
|
expect { described_class.new("Homebrew", "bar").remote_repo }.to raise_error(TapUnavailableError)
|
|
|
|
|
|
|
|
services_tap = described_class.new("Homebrew", "services")
|
|
|
|
services_tap.path.mkpath
|
|
|
|
services_tap.path.cd do
|
|
|
|
system "git", "init"
|
|
|
|
system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-bar"
|
|
|
|
end
|
|
|
|
expect(services_tap.remote_repo).to eq("Homebrew/homebrew-bar")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns nil if the Tap is not a Git repository" do
|
|
|
|
expect(homebrew_foo_tap.remote_repo).to be nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns nil if Git is not available" do
|
|
|
|
setup_git_repo
|
|
|
|
allow(Utils::Git).to receive(:available?).and_return(false)
|
|
|
|
expect(homebrew_foo_tap.remote_repo).to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
specify "Git variant" do
|
|
|
|
touch path/"README"
|
|
|
|
setup_git_repo
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.git_head).to eq("0453e16c8e3fac73104da50927a86221ca0740c2")
|
|
|
|
expect(homebrew_foo_tap.git_last_commit).to match(/\A\d+ .+ ago\Z/)
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#private?" do
|
2021-02-17 23:22:26 +05:30
|
|
|
skip "HOMEBREW_GITHUB_API_TOKEN is required" unless GitHub::API.credentials
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap).to be_private
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "#install" do
|
|
|
|
it "raises an error when the Tap is already tapped" do
|
|
|
|
setup_git_repo
|
|
|
|
already_tapped_tap = described_class.new("Homebrew", "foo")
|
|
|
|
expect(already_tapped_tap).to be_installed
|
|
|
|
expect { already_tapped_tap.install }.to raise_error(TapAlreadyTappedError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "raises an error when the Tap is already tapped with the right remote" do
|
|
|
|
setup_git_repo
|
|
|
|
already_tapped_tap = described_class.new("Homebrew", "foo")
|
|
|
|
expect(already_tapped_tap).to be_installed
|
2021-01-31 13:14:23 -05:00
|
|
|
right_remote = homebrew_foo_tap.remote
|
2017-02-27 23:07:22 +01:00
|
|
|
expect { already_tapped_tap.install clone_target: right_remote }.to raise_error(TapAlreadyTappedError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "raises an error when the remote doesn't match" do
|
|
|
|
setup_git_repo
|
|
|
|
already_tapped_tap = described_class.new("Homebrew", "foo")
|
|
|
|
expect(already_tapped_tap).to be_installed
|
2021-01-31 13:14:23 -05:00
|
|
|
wrong_remote = "#{homebrew_foo_tap.remote}-oops"
|
2018-09-02 16:15:09 +01:00
|
|
|
expect {
|
2020-02-05 20:22:21 +00:00
|
|
|
already_tapped_tap.install clone_target: wrong_remote
|
2018-09-02 16:15:09 +01:00
|
|
|
}.to raise_error(TapRemoteMismatchError)
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
2018-04-12 16:14:02 -07:00
|
|
|
describe "force_auto_update" do
|
|
|
|
before do
|
|
|
|
setup_git_repo
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:already_tapped_tap) { described_class.new("Homebrew", "foo") }
|
|
|
|
|
|
|
|
it "defaults to nil" do
|
|
|
|
expect(already_tapped_tap).to be_installed
|
|
|
|
expect(already_tapped_tap.config["forceautoupdate"]).to be_nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it "enables forced auto-updates when true" do
|
|
|
|
expect(already_tapped_tap).to be_installed
|
|
|
|
already_tapped_tap.install force_auto_update: true
|
|
|
|
expect(already_tapped_tap.config["forceautoupdate"]).to eq("true")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "disables forced auto-updates when false" do
|
|
|
|
expect(already_tapped_tap).to be_installed
|
|
|
|
already_tapped_tap.install force_auto_update: false
|
|
|
|
expect(already_tapped_tap.config["forceautoupdate"]).to eq("false")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-27 23:07:22 +01:00
|
|
|
specify "Git error" do
|
|
|
|
tap = described_class.new("user", "repo")
|
|
|
|
|
|
|
|
expect {
|
2017-07-29 19:55:05 +02:00
|
|
|
tap.install clone_target: "file:///not/existed/remote/url"
|
2017-02-27 23:07:22 +01:00
|
|
|
}.to raise_error(ErrorDuringExecution)
|
|
|
|
|
|
|
|
expect(tap).not_to be_installed
|
|
|
|
expect(Tap::TAP_DIRECTORY/"user").not_to exist
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#uninstall" do
|
|
|
|
it "raises an error if the Tap is not available" do
|
|
|
|
tap = described_class.new("Homebrew", "bar")
|
|
|
|
expect { tap.uninstall }.to raise_error(TapUnavailableError)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#install and #uninstall" do
|
2019-10-13 10:03:26 +01:00
|
|
|
setup_tap_files
|
|
|
|
setup_git_repo
|
2021-01-12 16:27:25 -05:00
|
|
|
setup_completion link: true
|
2017-07-29 19:55:05 +02:00
|
|
|
|
2019-10-13 10:03:26 +01:00
|
|
|
tap = described_class.new("Homebrew", "bar")
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
tap.install clone_target: homebrew_foo_tap.path/".git"
|
2019-10-13 10:03:26 +01:00
|
|
|
|
|
|
|
expect(tap).to be_installed
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").to be_a_file
|
|
|
|
tap.uninstall
|
|
|
|
|
|
|
|
expect(tap).not_to be_installed
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").not_to exist
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1").not_to exist
|
|
|
|
expect(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").not_to exist
|
|
|
|
expect(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").not_to exist
|
|
|
|
expect(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").not_to exist
|
|
|
|
ensure
|
|
|
|
(HOMEBREW_PREFIX/"etc").rmtree if (HOMEBREW_PREFIX/"etc").exist?
|
|
|
|
(HOMEBREW_PREFIX/"share").rmtree if (HOMEBREW_PREFIX/"share").exist?
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
2021-01-11 12:24:48 -05:00
|
|
|
specify "#link_completions_and_manpages when completions are enabled for non-official tap" do
|
2019-10-13 10:03:26 +01:00
|
|
|
setup_tap_files
|
|
|
|
setup_git_repo
|
2021-01-12 16:27:25 -05:00
|
|
|
setup_completion link: true
|
2021-01-11 12:24:48 -05:00
|
|
|
tap = described_class.new("NotHomebrew", "baz")
|
2021-01-31 13:14:23 -05:00
|
|
|
tap.install clone_target: homebrew_foo_tap.path/".git"
|
2019-10-13 10:03:26 +01:00
|
|
|
(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").delete
|
|
|
|
(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").delete
|
|
|
|
(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").delete
|
|
|
|
(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").delete
|
|
|
|
tap.link_completions_and_manpages
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").to be_a_file
|
|
|
|
tap.uninstall
|
|
|
|
ensure
|
|
|
|
(HOMEBREW_PREFIX/"etc").rmtree if (HOMEBREW_PREFIX/"etc").exist?
|
|
|
|
(HOMEBREW_PREFIX/"share").rmtree if (HOMEBREW_PREFIX/"share").exist?
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
2021-01-08 17:11:20 -05:00
|
|
|
|
2021-01-11 12:24:48 -05:00
|
|
|
specify "#link_completions_and_manpages when completions are disabled for non-official tap" do
|
2021-01-08 17:11:20 -05:00
|
|
|
setup_tap_files
|
|
|
|
setup_git_repo
|
2021-01-12 16:27:25 -05:00
|
|
|
setup_completion link: false
|
2021-01-11 12:24:48 -05:00
|
|
|
tap = described_class.new("NotHomebrew", "baz")
|
2021-01-31 13:14:23 -05:00
|
|
|
tap.install clone_target: homebrew_foo_tap.path/".git"
|
2021-01-08 17:11:20 -05:00
|
|
|
(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").delete
|
|
|
|
tap.link_completions_and_manpages
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").not_to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").not_to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").not_to be_a_file
|
|
|
|
tap.uninstall
|
|
|
|
ensure
|
|
|
|
(HOMEBREW_PREFIX/"etc").rmtree if (HOMEBREW_PREFIX/"etc").exist?
|
|
|
|
(HOMEBREW_PREFIX/"share").rmtree if (HOMEBREW_PREFIX/"share").exist?
|
|
|
|
end
|
2021-01-11 12:24:48 -05:00
|
|
|
|
|
|
|
specify "#link_completions_and_manpages when completions are enabled for official tap" do
|
|
|
|
setup_tap_files
|
|
|
|
setup_git_repo
|
2021-01-12 16:27:25 -05:00
|
|
|
setup_completion link: false
|
2021-01-11 12:24:48 -05:00
|
|
|
tap = described_class.new("Homebrew", "baz")
|
2021-01-31 13:14:23 -05:00
|
|
|
tap.install clone_target: homebrew_foo_tap.path/".git"
|
2021-01-11 12:24:48 -05:00
|
|
|
(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").delete
|
|
|
|
(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").delete
|
|
|
|
(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").delete
|
|
|
|
(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").delete
|
|
|
|
tap.link_completions_and_manpages
|
|
|
|
expect(HOMEBREW_PREFIX/"share/man/man1/brew-tap-cmd.1").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"etc/bash_completion.d/brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/zsh/site-functions/_brew-tap-cmd").to be_a_file
|
|
|
|
expect(HOMEBREW_PREFIX/"share/fish/vendor_completions.d/brew-tap-cmd.fish").to be_a_file
|
|
|
|
tap.uninstall
|
|
|
|
ensure
|
|
|
|
(HOMEBREW_PREFIX/"etc").rmtree if (HOMEBREW_PREFIX/"etc").exist?
|
|
|
|
(HOMEBREW_PREFIX/"share").rmtree if (HOMEBREW_PREFIX/"share").exist?
|
|
|
|
end
|
2017-02-27 23:07:22 +01:00
|
|
|
|
|
|
|
specify "#config" do
|
|
|
|
setup_git_repo
|
|
|
|
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.config["foo"]).to be nil
|
|
|
|
homebrew_foo_tap.config["foo"] = "bar"
|
|
|
|
expect(homebrew_foo_tap.config["foo"]).to eq("bar")
|
|
|
|
homebrew_foo_tap.config["foo"] = nil
|
|
|
|
expect(homebrew_foo_tap.config["foo"]).to be nil
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
2017-08-03 17:18:13 -07:00
|
|
|
|
|
|
|
describe "#each" do
|
|
|
|
it "returns an enumerator if no block is passed" do
|
|
|
|
expect(described_class.each).to be_an_instance_of(Enumerator)
|
|
|
|
end
|
|
|
|
end
|
2020-11-30 12:29:07 -05:00
|
|
|
|
|
|
|
describe "Formula Lists" do
|
|
|
|
describe "#formula_renames" do
|
|
|
|
it "returns the formula_renames hash" do
|
|
|
|
setup_tap_files
|
|
|
|
|
|
|
|
expected_result = { "oldname" => "foo" }
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.formula_renames).to eq expected_result
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#tap_migrations" do
|
|
|
|
it "returns the tap_migrations hash" do
|
|
|
|
setup_tap_files
|
|
|
|
|
|
|
|
expected_result = { "removed-formula" => "homebrew/foo" }
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.tap_migrations).to eq expected_result
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#audit_exceptions" do
|
|
|
|
it "returns the audit_exceptions hash" do
|
|
|
|
setup_tap_files
|
|
|
|
|
|
|
|
expected_result = {
|
|
|
|
formula_list: ["foo", "bar"],
|
|
|
|
formula_hash: { "foo" => "foo1", "bar" => "bar1" },
|
|
|
|
}
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.audit_exceptions).to eq expected_result
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#style_exceptions" do
|
|
|
|
it "returns the style_exceptions hash" do
|
|
|
|
setup_tap_files
|
|
|
|
|
|
|
|
expected_result = {
|
|
|
|
formula_list: ["foo", "bar"],
|
|
|
|
formula_hash: { "foo" => "foo1", "bar" => "bar1" },
|
|
|
|
}
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.style_exceptions).to eq expected_result
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#pypi_formula_mappings" do
|
|
|
|
it "returns the pypi_formula_mappings hash" do
|
|
|
|
setup_tap_files
|
|
|
|
|
|
|
|
expected_result = {
|
|
|
|
"formula1" => "foo",
|
|
|
|
"formula2" => {
|
|
|
|
"package_name" => "foo",
|
|
|
|
"extra_packages" => ["bar"],
|
|
|
|
"exclude_packages" => ["baz"],
|
|
|
|
},
|
|
|
|
}
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(homebrew_foo_tap.pypi_formula_mappings).to eq expected_result
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2021-01-31 13:14:23 -05:00
|
|
|
|
2021-01-31 14:50:29 -05:00
|
|
|
describe CoreTap do
|
|
|
|
subject(:core_tap) { described_class.new }
|
|
|
|
|
|
|
|
specify "attributes" do
|
|
|
|
expect(core_tap.user).to eq("Homebrew")
|
|
|
|
expect(core_tap.repo).to eq("core")
|
|
|
|
expect(core_tap.name).to eq("homebrew/core")
|
|
|
|
expect(core_tap.command_files).to eq([])
|
|
|
|
expect(core_tap).to be_installed
|
|
|
|
expect(core_tap).not_to be_pinned
|
|
|
|
expect(core_tap).to be_official
|
|
|
|
expect(core_tap).to be_a_core_tap
|
|
|
|
end
|
2017-02-27 23:07:22 +01:00
|
|
|
|
2021-01-31 14:50:29 -05:00
|
|
|
specify "forbidden operations" do
|
|
|
|
expect { core_tap.uninstall }.to raise_error(RuntimeError)
|
|
|
|
expect { core_tap.pin }.to raise_error(RuntimeError)
|
|
|
|
expect { core_tap.unpin }.to raise_error(RuntimeError)
|
|
|
|
end
|
2017-02-27 23:07:22 +01:00
|
|
|
|
2021-01-31 14:50:29 -05:00
|
|
|
specify "files" do
|
|
|
|
path = Tap::TAP_DIRECTORY/"homebrew/homebrew-core"
|
|
|
|
formula_file = core_tap.formula_dir/"foo.rb"
|
|
|
|
formula_file.write <<~RUBY
|
|
|
|
class Foo < Formula
|
|
|
|
url "https://brew.sh/foo-1.0.tar.gz"
|
|
|
|
end
|
|
|
|
RUBY
|
|
|
|
|
|
|
|
formula_list_file_json = '{ "foo": "foo1", "bar": "bar1" }'
|
|
|
|
formula_list_file_contents = { "foo" => "foo1", "bar" => "bar1" }
|
|
|
|
%w[
|
|
|
|
formula_renames.json
|
|
|
|
tap_migrations.json
|
|
|
|
audit_exceptions/formula_list.json
|
|
|
|
style_exceptions/formula_hash.json
|
|
|
|
pypi_formula_mappings.json
|
|
|
|
].each do |file|
|
|
|
|
(path/file).write formula_list_file_json
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
|
2021-01-31 14:50:29 -05:00
|
|
|
alias_file = core_tap.alias_dir/"bar"
|
|
|
|
alias_file.parent.mkpath
|
|
|
|
ln_s formula_file, alias_file
|
|
|
|
|
|
|
|
expect(core_tap.formula_files).to eq([formula_file])
|
|
|
|
expect(core_tap.formula_names).to eq(["foo"])
|
|
|
|
expect(core_tap.alias_files).to eq([alias_file])
|
|
|
|
expect(core_tap.aliases).to eq(["bar"])
|
|
|
|
expect(core_tap.alias_table).to eq("bar" => "foo")
|
|
|
|
expect(core_tap.alias_reverse_table).to eq("foo" => ["bar"])
|
|
|
|
|
|
|
|
expect(core_tap.formula_renames).to eq formula_list_file_contents
|
|
|
|
expect(core_tap.tap_migrations).to eq formula_list_file_contents
|
|
|
|
expect(core_tap.audit_exceptions).to eq({ formula_list: formula_list_file_contents })
|
|
|
|
expect(core_tap.style_exceptions).to eq({ formula_hash: formula_list_file_contents })
|
|
|
|
expect(core_tap.pypi_formula_mappings).to eq formula_list_file_contents
|
2020-11-30 12:29:07 -05:00
|
|
|
end
|
2017-02-27 23:07:22 +01:00
|
|
|
end
|
|
|
|
end
|