| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | require "cmd/uninstall" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 08:35:36 +00:00
										 |  |  | require "cmd/shared_examples/args_parse" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe "Homebrew.uninstall_args" do | 
					
						
							|  |  |  |   it_behaves_like "parseable arguments" | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | describe "brew uninstall", :integration_test do | 
					
						
							|  |  |  |   it "uninstalls a given Formula" do | 
					
						
							| 
									
										
										
										
											2019-03-28 08:35:36 +00:00
										 |  |  |     install_test_formula "testball" | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 08:35:36 +00:00
										 |  |  |     expect { brew "uninstall", "--force", "testball" } | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |       .to output(/Uninstalling testball/).to_stdout | 
					
						
							|  |  |  |       .and not_to_output.to_stderr | 
					
						
							|  |  |  |       .and be_a_success | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe Homebrew do | 
					
						
							|  |  |  |   let(:dependency) { formula("dependency") { url "f-1" } } | 
					
						
							|  |  |  |   let(:dependent) do | 
					
						
							|  |  |  |     formula("dependent") do | 
					
						
							|  |  |  |       url "f-1" | 
					
						
							|  |  |  |       depends_on "dependency" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-21 12:10:44 -07:00
										 |  |  |   let(:kegs_by_rack) { { dependency.rack => [Keg.new(dependency.latest_installed_prefix)] } } | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |   before do | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |     [dependency, dependent].each do |f| | 
					
						
							| 
									
										
										
										
											2020-08-21 12:10:44 -07:00
										 |  |  |       f.latest_installed_prefix.mkpath | 
					
						
							|  |  |  |       Keg.new(f.latest_installed_prefix).optlink | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tab = Tab.empty | 
					
						
							|  |  |  |     tab.homebrew_version = "1.1.6" | 
					
						
							| 
									
										
										
										
											2020-08-21 12:10:44 -07:00
										 |  |  |     tab.tabfile = dependent.latest_installed_prefix/Tab::FILENAME | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |     tab.runtime_dependencies = [ | 
					
						
							|  |  |  |       { "full_name" => "dependency", "version" => "1" }, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     tab.write | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     stub_formula_loader dependency | 
					
						
							|  |  |  |     stub_formula_loader dependent | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "::handle_unsatisfied_dependents" do | 
					
						
							|  |  |  |     specify "when developer" do | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       ENV["HOMEBREW_DEVELOPER"] = "1" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |       expect { | 
					
						
							| 
									
										
										
										
											2020-07-26 09:45:26 +02:00
										 |  |  |         described_class.handle_unsatisfied_dependents(kegs_by_rack) | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |       }.to output(/Warning/).to_stderr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(described_class).not_to have_failed | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     specify "when not developer" do | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       expect { | 
					
						
							| 
									
										
										
										
											2020-07-26 09:45:26 +02:00
										 |  |  |         described_class.handle_unsatisfied_dependents(kegs_by_rack) | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       }.to output(/Error/).to_stderr | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       expect(described_class).to have_failed | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-26 09:45:26 +02:00
										 |  |  |     specify "when not developer and `ignore_dependencies` is true" do | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       expect { | 
					
						
							| 
									
										
										
										
											2020-07-26 09:45:26 +02:00
										 |  |  |         described_class.handle_unsatisfied_dependents(kegs_by_rack, ignore_dependencies: true) | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       }.not_to output.to_stderr | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       expect(described_class).not_to have_failed | 
					
						
							| 
									
										
										
										
											2017-02-23 06:06:42 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |