| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe Tap do | 
					
						
							| 
									
										
										
										
											2024-03-30 19:10:56 -07:00
										 |  |  |   include FileUtils | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 00:32:05 -07:00
										 |  |  |   alias_matcher :have_cask_file, :be_cask_file | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |   alias_matcher :have_formula_file, :be_formula_file | 
					
						
							|  |  |  |   alias_matcher :have_custom_remote, :be_custom_remote | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |   subject(:homebrew_foo_tap) { described_class.fetch("Homebrew", "foo") } | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-10 13:35:20 -07:00
										 |  |  |   let(:path) { HOMEBREW_TAP_DIRECTORY/"homebrew/homebrew-foo" } | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2021-05-03 13:24:32 +01:00
										 |  |  |     formula_file.dirname.mkpath | 
					
						
							| 
									
										
										
										
											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| | 
					
						
							| 
									
										
										
										
											2021-05-03 13:24:32 +01:00
										 |  |  |       (path/exceptions_directory).mkpath | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-30 12:29:07 -05:00
										 |  |  |       (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 | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |     expect(described_class.fetch("Homebrew", "core")).to be_a(CoreTap) | 
					
						
							|  |  |  |     expect(described_class.fetch("Homebrew", "homebrew")).to be_a(CoreTap) | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |     tap = described_class.fetch("Homebrew", "foo") | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |     expect(tap).to be_a(described_class) | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |     expect(tap.name).to eq("homebrew/foo") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     expect do | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |       described_class.fetch("foo") | 
					
						
							| 
									
										
										
										
											2024-04-08 16:38:32 +01:00
										 |  |  |     end.to raise_error(Tap::InvalidNameError, /Invalid tap name/) | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     expect do | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |       described_class.fetch("homebrew/homebrew/bar") | 
					
						
							| 
									
										
										
										
											2024-04-08 16:38:32 +01:00
										 |  |  |     end.to raise_error(Tap::InvalidNameError, /Invalid tap name/) | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |     expect do | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |       described_class.fetch("homebrew", "homebrew/baz") | 
					
						
							| 
									
										
										
										
											2024-04-08 16:38:32 +01:00
										 |  |  |     end.to raise_error(Tap::InvalidNameError, /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 | 
					
						
							| 
									
										
										
										
											2024-02-22 21:51:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     context "when path contains a dot" do | 
					
						
							|  |  |  |       let(:tap) { described_class.fetch("str4d.xyz", "rage") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       after do | 
					
						
							|  |  |  |         tap.uninstall | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns the Tap when given its exact path" do | 
					
						
							|  |  |  |         expect(described_class.from_path(path)).to eq tap | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-07-25 09:37:33 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-06 15:05:06 +01:00
										 |  |  |   describe "::allowed_taps" do | 
					
						
							|  |  |  |     before { allow(Homebrew::EnvConfig).to receive(:allowed_taps).and_return("homebrew/allowed") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns a set of allowed taps according to the environment" do | 
					
						
							|  |  |  |       expect(described_class.allowed_taps) | 
					
						
							|  |  |  |         .to contain_exactly(described_class.fetch("homebrew/allowed")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "::forbidden_taps" do | 
					
						
							|  |  |  |     before { allow(Homebrew::EnvConfig).to receive(:forbidden_taps).and_return("homebrew/forbidden") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns a set of forbidden taps according to the environment" do | 
					
						
							|  |  |  |       expect(described_class.forbidden_taps) | 
					
						
							|  |  |  |         .to contain_exactly(described_class.fetch("homebrew/forbidden")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |   specify "attributes" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     expect(homebrew_foo_tap.user).to eq("Homebrew") | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     expect(homebrew_foo_tap.repository).to eq("foo") | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     t = described_class.fetch("someone", "foo") | 
					
						
							| 
									
										
										
										
											2024-08-10 13:35:20 -07:00
										 |  |  |     path = HOMEBREW_TAP_DIRECTORY/"someone/homebrew-foo" | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |     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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-10 13:35:20 -07:00
										 |  |  |     (HOMEBREW_TAP_DIRECTORY/"someone/homebrew-no-git").mkpath | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     expect(described_class.fetch("someone", "no-git").issues_url).to be_nil | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  |   ensure | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     FileUtils.rm_rf(path.parent) | 
					
						
							| 
									
										
										
										
											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]) | 
					
						
							| 
									
										
										
										
											2022-09-13 09:43:09 +01:00
										 |  |  |     expect(homebrew_foo_tap.to_hash).to be_a(Hash) | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2024-03-16 13:17:54 -07:00
										 |  |  |     it "returns the remote URL", :needs_network do | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       setup_git_repo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(homebrew_foo_tap.remote).to eq("https://github.com/Homebrew/homebrew-foo") | 
					
						
							|  |  |  |       expect(homebrew_foo_tap).not_to have_custom_remote | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |       services_tap = described_class.fetch("Homebrew", "test-bot") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       services_tap.path.mkpath | 
					
						
							|  |  |  |       services_tap.path.cd do | 
					
						
							| 
									
										
										
										
											2017-07-29 19:55:05 +02:00
										 |  |  |         system "git", "init" | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |         system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-test-bot" | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2022-03-01 00:01:13 +00: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) | 
					
						
							| 
									
										
										
										
											2022-03-01 00:01:13 +00: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 | 
					
						
							| 
									
										
										
										
											2021-04-22 22:02:09 -04:00
										 |  |  |     it "returns the remote https repository" do | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |       setup_git_repo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(homebrew_foo_tap.remote_repository).to eq("Homebrew/homebrew-foo") | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |       services_tap = described_class.fetch("Homebrew", "test-bot") | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |       services_tap.path.mkpath | 
					
						
							|  |  |  |       services_tap.path.cd do | 
					
						
							|  |  |  |         system "git", "init" | 
					
						
							|  |  |  |         system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-bar" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(services_tap.remote_repository).to eq("Homebrew/homebrew-bar") | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-22 22:02:09 -04:00
										 |  |  |     it "returns the remote ssh repository" do | 
					
						
							|  |  |  |       setup_git_repo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(homebrew_foo_tap.remote_repository).to eq("Homebrew/homebrew-foo") | 
					
						
							| 
									
										
										
										
											2021-04-22 22:02:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |       services_tap = described_class.fetch("Homebrew", "test-bot") | 
					
						
							| 
									
										
										
										
											2021-04-22 22:02:09 -04:00
										 |  |  |       services_tap.path.mkpath | 
					
						
							|  |  |  |       services_tap.path.cd do | 
					
						
							|  |  |  |         system "git", "init" | 
					
						
							|  |  |  |         system "git", "remote", "add", "origin", "git@github.com:Homebrew/homebrew-bar" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(services_tap.remote_repository).to eq("Homebrew/homebrew-bar") | 
					
						
							| 
									
										
										
										
											2021-04-22 22:02:09 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |     it "returns nil if the Tap is not a Git repository" do | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(homebrew_foo_tap.remote_repository).to be_nil | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns nil if Git is not available" do | 
					
						
							|  |  |  |       setup_git_repo | 
					
						
							|  |  |  |       allow(Utils::Git).to receive(:available?).and_return(false) | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(homebrew_foo_tap.remote_repository).to be_nil | 
					
						
							| 
									
										
										
										
											2021-03-21 12:35:45 -04:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  |   describe "#custom_remote?" do | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |     subject(:tap) { described_class.fetch("Homebrew", "test-bot") } | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let(:remote) { nil } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       tap.path.mkpath | 
					
						
							|  |  |  |       system "git", "-C", tap.path, "init" | 
					
						
							|  |  |  |       system "git", "-C", tap.path, "remote", "add", "origin", remote if remote | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "if no remote is available" do | 
					
						
							|  |  |  |       it "returns true" do | 
					
						
							|  |  |  |         expect(tap.remote).to be_nil | 
					
						
							|  |  |  |         expect(tap.custom_remote?).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when using the default remote" do | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |       let(:remote) { "https://github.com/Homebrew/homebrew-test-bot" } | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 22:47:37 -07:00
										 |  |  |       it(:custom_remote?) { expect(tap.custom_remote?).to be false } | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context "when using a non-default remote" do | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |       let(:remote) { "git@github.com:Homebrew/homebrew-test-bot" } | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-17 22:47:37 -07:00
										 |  |  |       it(:custom_remote?) { expect(tap.custom_remote?).to be true } | 
					
						
							| 
									
										
										
										
											2024-03-04 14:47:57 +01:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-09 14:45:43 +00:00
										 |  |  |   specify "#private?", :needs_network do | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       already_tapped_tap = described_class.fetch("Homebrew", "foo") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       already_tapped_tap = described_class.fetch("Homebrew", "foo") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       already_tapped_tap = described_class.fetch("Homebrew", "foo") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       expect(already_tapped_tap).to be_installed | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       wrong_remote = "#{homebrew_foo_tap.remote}-oops" | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2020-02-05 20:22:21 +00:00
										 |  |  |         already_tapped_tap.install clone_target: wrong_remote | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(TapRemoteMismatchError) | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |     it "raises an error when the remote for Homebrew/core doesn't match HOMEBREW_CORE_GIT_REMOTE" do | 
					
						
							|  |  |  |       core_tap = described_class.fetch("Homebrew", "core") | 
					
						
							|  |  |  |       wrong_remote = "#{Homebrew::EnvConfig.core_git_remote}-oops" | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |         core_tap.install clone_target: wrong_remote | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(TapCoreRemoteMismatchError) | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when run `brew tap --custom-remote` without a custom remote (already installed)" do | 
					
						
							|  |  |  |       setup_git_repo | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       already_tapped_tap = described_class.fetch("Homebrew", "foo") | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |       expect(already_tapped_tap).to be_installed | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |         already_tapped_tap.install clone_target: nil, custom_remote: true | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(TapNoCustomRemoteError) | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error when run `brew tap --custom-remote` without a custom remote (not installed)" do | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       not_tapped_tap = described_class.fetch("Homebrew", "bar") | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |       expect(not_tapped_tap).not_to be_installed | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |         not_tapped_tap.install clone_target: nil, custom_remote: true | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(TapNoCustomRemoteError) | 
					
						
							| 
									
										
										
										
											2021-10-11 17:00:43 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |     specify "Git error" do | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       tap = described_class.fetch("user", "repo") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2017-07-29 19:55:05 +02:00
										 |  |  |         tap.install clone_target: "file:///not/existed/remote/url" | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       end.to raise_error(ErrorDuringExecution) | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect(tap).not_to be_installed | 
					
						
							| 
									
										
										
										
											2024-08-10 13:35:20 -07:00
										 |  |  |       expect(HOMEBREW_TAP_DIRECTORY/"user").not_to exist | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#uninstall" do | 
					
						
							|  |  |  |     it "raises an error if the Tap is not available" do | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |       tap = described_class.fetch("Homebrew", "bar") | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  |       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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     tap = described_class.fetch("Homebrew", "bar") | 
					
						
							| 
									
										
										
										
											2019-10-13 10:03:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"etc") if (HOMEBREW_PREFIX/"etc").exist? | 
					
						
							|  |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"share") 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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     tap = described_class.fetch("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 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"etc") if (HOMEBREW_PREFIX/"etc").exist? | 
					
						
							|  |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"share") 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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     tap = described_class.fetch("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 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"etc") if (HOMEBREW_PREFIX/"etc").exist? | 
					
						
							|  |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"share") if (HOMEBREW_PREFIX/"share").exist? | 
					
						
							| 
									
										
										
										
											2021-01-08 17:11:20 -05:00
										 |  |  |   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 | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     tap = described_class.fetch("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 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"etc") if (HOMEBREW_PREFIX/"etc").exist? | 
					
						
							|  |  |  |     FileUtils.rm_r(HOMEBREW_PREFIX/"share") if (HOMEBREW_PREFIX/"share").exist? | 
					
						
							| 
									
										
										
										
											2021-01-11 12:24:48 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   specify "#config" do | 
					
						
							|  |  |  |     setup_git_repo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-04 18:05:17 +01:00
										 |  |  |     expect(homebrew_foo_tap.config[:foo]).to be_nil | 
					
						
							|  |  |  |     homebrew_foo_tap.config[:foo] = true | 
					
						
							|  |  |  |     expect(homebrew_foo_tap.config[:foo]).to be true | 
					
						
							|  |  |  |     homebrew_foo_tap.config.delete(:foo) | 
					
						
							|  |  |  |     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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |   describe ".each" do | 
					
						
							| 
									
										
										
										
											2017-08-03 17:18:13 -07:00
										 |  |  |     it "returns an enumerator if no block is passed" do | 
					
						
							|  |  |  |       expect(described_class.each).to be_an_instance_of(Enumerator) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     context "when the core tap is not installed" do | 
					
						
							|  |  |  |       around do |example| | 
					
						
							|  |  |  |         FileUtils.rm_rf CoreTap.instance.path | 
					
						
							|  |  |  |         example.run | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         (CoreTap.instance.path/"Formula").mkpath | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "includes the core tap with the api" do | 
					
						
							|  |  |  |         expect(described_class.to_a).to include(CoreTap.instance) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-19 22:18:02 -07:00
										 |  |  |       it "omits the core tap without the api", :no_api do | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |         expect(described_class.to_a).not_to include(CoreTap.instance) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe ".installed" do | 
					
						
							|  |  |  |     it "includes only installed taps" do | 
					
						
							|  |  |  |       expect(described_class.installed) | 
					
						
							|  |  |  |         .to contain_exactly(CoreTap.instance, described_class.fetch("homebrew/foo")) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe ".all" do | 
					
						
							|  |  |  |     it "includes the core and cask taps by default", :needs_macos do | 
					
						
							|  |  |  |       expect(described_class.all).to contain_exactly( | 
					
						
							|  |  |  |         CoreTap.instance, | 
					
						
							|  |  |  |         CoreCaskTap.instance, | 
					
						
							|  |  |  |         described_class.fetch("homebrew/foo"), | 
					
						
							|  |  |  |         described_class.fetch("third-party/tap"), | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "includes the core tap and excludes the cask tap by default", :needs_linux do | 
					
						
							|  |  |  |       expect(described_class.all) | 
					
						
							|  |  |  |         .to contain_exactly(CoreTap.instance, described_class.fetch("homebrew/foo")) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-08-03 17:18:13 -07:00
										 |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |     describe "tap migration renames" do | 
					
						
							|  |  |  |       before do | 
					
						
							|  |  |  |         (path/"tap_migrations.json").write <<~JSON | 
					
						
							|  |  |  |           { | 
					
						
							|  |  |  |             "adobe-air-sdk": "homebrew/cask", | 
					
						
							|  |  |  |             "app-engine-go-32": "homebrew/cask/google-cloud-sdk", | 
					
						
							|  |  |  |             "app-engine-go-64": "homebrew/cask/google-cloud-sdk", | 
					
						
							|  |  |  |             "gimp": "homebrew/cask", | 
					
						
							|  |  |  |             "horndis": "homebrew/cask", | 
					
						
							|  |  |  |             "inkscape": "homebrew/cask", | 
					
						
							|  |  |  |             "schismtracker": "homebrew/cask/schism-tracker" | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         JSON | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe "#reverse_tap_migration_renames" do | 
					
						
							|  |  |  |         it "returns the expected hash" do | 
					
						
							|  |  |  |           expect(homebrew_foo_tap.reverse_tap_migrations_renames).to eq({ | 
					
						
							|  |  |  |             "homebrew/cask/google-cloud-sdk" => %w[app-engine-go-32 app-engine-go-64], | 
					
						
							|  |  |  |             "homebrew/cask/schism-tracker"   => %w[schismtracker], | 
					
						
							|  |  |  |           }) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-08 23:36:50 -08:00
										 |  |  |       describe ".tap_migration_oldnames" do | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |         let(:cask_tap) { CoreCaskTap.instance } | 
					
						
							|  |  |  |         let(:core_tap) { CoreTap.instance } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-10 14:37:21 +00:00
										 |  |  |         it "returns expected renames", :no_api do | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |           [ | 
					
						
							|  |  |  |             [cask_tap, "gimp", []], | 
					
						
							|  |  |  |             [core_tap, "schism-tracker", []], | 
					
						
							|  |  |  |             [cask_tap, "schism-tracker", %w[schismtracker]], | 
					
						
							|  |  |  |             [cask_tap, "google-cloud-sdk", %w[app-engine-go-32 app-engine-go-64]], | 
					
						
							|  |  |  |           ].each do |tap, name, result| | 
					
						
							| 
									
										
										
										
											2024-03-08 23:36:50 -08:00
										 |  |  |             expect(described_class.tap_migration_oldnames(tap, name)).to eq(result) | 
					
						
							| 
									
										
										
										
											2024-03-08 20:13:20 -08:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-30 12:29:07 -05:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2024-08-27 00:32:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     describe "#formula_file?" do | 
					
						
							|  |  |  |       it "matches files from Formula/" do | 
					
						
							|  |  |  |         tap = described_class.fetch("hard/core") | 
					
						
							|  |  |  |         FileUtils.mkdir_p(tap.path/"Formula") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           kvazaar.rb | 
					
						
							|  |  |  |           Casks/kvazaar.rb | 
					
						
							|  |  |  |           Casks/k/kvazaar.rb | 
					
						
							|  |  |  |           Formula/kvazaar.sh | 
					
						
							|  |  |  |           HomebrewFormula/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).not_to have_formula_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           Formula/kvazaar.rb | 
					
						
							|  |  |  |           Formula/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).to have_formula_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         FileUtils.rm_rf(tap.path.parent) if tap | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "matches files from HomebrewFormula/" do | 
					
						
							|  |  |  |         tap = described_class.fetch("hard/core") | 
					
						
							|  |  |  |         FileUtils.mkdir_p(tap.path/"HomebrewFormula") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           kvazaar.rb | 
					
						
							|  |  |  |           Casks/kvazaar.rb | 
					
						
							|  |  |  |           Casks/k/kvazaar.rb | 
					
						
							|  |  |  |           Formula/kvazaar.rb | 
					
						
							|  |  |  |           Formula/k/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/kvazaar.sh | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).not_to have_formula_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           HomebrewFormula/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).to have_formula_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         FileUtils.rm_rf(tap.path.parent) if tap | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "matches files from the top-level directory" do | 
					
						
							|  |  |  |         tap = described_class.fetch("hard/core") | 
					
						
							|  |  |  |         FileUtils.mkdir_p(tap.path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           kvazaar.sh | 
					
						
							|  |  |  |           Casks/kvazaar.rb | 
					
						
							|  |  |  |           Casks/k/kvazaar.rb | 
					
						
							|  |  |  |           Formula/kvazaar.rb | 
					
						
							|  |  |  |           Formula/k/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).not_to have_formula_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(tap).to have_formula_file("kvazaar.rb") | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         FileUtils.rm_rf(tap.path.parent) if tap | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "#cask_file?" do | 
					
						
							|  |  |  |       it "matches files from Casks/" do | 
					
						
							|  |  |  |         tap = described_class.fetch("hard/core") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           kvazaar.rb | 
					
						
							|  |  |  |           Casks/kvazaar.sh | 
					
						
							|  |  |  |           Formula/kvazaar.rb | 
					
						
							|  |  |  |           Formula/k/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/kvazaar.rb | 
					
						
							|  |  |  |           HomebrewFormula/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).not_to have_cask_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           Casks/kvazaar.rb | 
					
						
							|  |  |  |           Casks/k/kvazaar.rb | 
					
						
							|  |  |  |         ].each do |relative_path| | 
					
						
							|  |  |  |           expect(tap).to have_cask_file(relative_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-11-30 12:29:07 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |   describe CoreTap do | 
					
						
							| 
									
										
										
										
											2024-03-06 15:10:14 +01:00
										 |  |  |     subject(:core_tap) { described_class.instance } | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     specify "attributes" do | 
					
						
							|  |  |  |       expect(core_tap.user).to eq("Homebrew") | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(core_tap.repository).to eq("core") | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |       expect(core_tap.name).to eq("homebrew/core") | 
					
						
							|  |  |  |       expect(core_tap.command_files).to eq([]) | 
					
						
							|  |  |  |       expect(core_tap).to be_installed | 
					
						
							|  |  |  |       expect(core_tap).to be_official | 
					
						
							|  |  |  |       expect(core_tap).to be_a_core_tap | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-10 14:37:21 +00:00
										 |  |  |     specify "forbidden operations", :no_api do | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |       expect { core_tap.uninstall }.to raise_error(RuntimeError) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-10 14:37:21 +00:00
										 |  |  |     specify "files", :no_api do | 
					
						
							| 
									
										
										
										
											2024-08-10 13:35:20 -07:00
										 |  |  |       path = HOMEBREW_TAP_DIRECTORY/"homebrew/homebrew-core" | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |       formula_file = core_tap.formula_dir/"foo.rb" | 
					
						
							| 
									
										
										
										
											2021-05-03 13:24:32 +01:00
										 |  |  |       core_tap.formula_dir.mkpath | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |       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| | 
					
						
							| 
									
										
										
										
											2021-05-03 13:24:32 +01:00
										 |  |  |         (path/file).dirname.mkpath | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |         (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 | 
					
						
							| 
									
										
										
										
											2024-02-15 21:24:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |   describe "#repository_var_suffix" do | 
					
						
							| 
									
										
										
										
											2024-02-15 21:24:34 +01:00
										 |  |  |     it "converts the repo directory to an environment variable suffix" do | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(CoreTap.instance.repository_var_suffix).to eq "_HOMEBREW_HOMEBREW_CORE" | 
					
						
							| 
									
										
										
										
											2024-02-15 21:24:34 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "converts non-alphanumeric characters to underscores" do | 
					
						
							| 
									
										
										
										
											2024-09-24 10:15:34 +01:00
										 |  |  |       expect(described_class.fetch("my", | 
					
						
							|  |  |  |                                    "tap-with-dashes").repository_var_suffix).to eq "_MY_HOMEBREW_TAP_WITH_DASHES" | 
					
						
							|  |  |  |       expect(described_class.fetch("my", | 
					
						
							|  |  |  |                                    "tap-with-@-symbol").repository_var_suffix).to eq "_MY_HOMEBREW_TAP_WITH___SYMBOL" | 
					
						
							| 
									
										
										
										
											2024-02-15 21:24:34 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2024-03-01 03:13:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "::with_formula_name" do | 
					
						
							|  |  |  |     it "returns the tap and formula name when given a full name" do | 
					
						
							|  |  |  |       expect(described_class.with_formula_name("homebrew/core/gcc")).to eq [CoreTap.instance, "gcc"] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns nil when given a relative path" do | 
					
						
							|  |  |  |       expect(described_class.with_formula_name("./Formula/gcc.rb")).to be_nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "::with_cask_token" do | 
					
						
							|  |  |  |     it "returns the tap and cask token when given a full token" do | 
					
						
							|  |  |  |       expect(described_class.with_cask_token("homebrew/cask/alfred")).to eq [CoreCaskTap.instance, "alfred"] | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns nil when given a relative path" do | 
					
						
							|  |  |  |       expect(described_class.with_cask_token("./Casks/alfred.rb")).to be_nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-27 23:07:22 +01:00
										 |  |  | end |