 eb74717a9e
			
		
	
	
		eb74717a9e
		
			
		
	
	
	
	
		
			
			- Rename `BuildToolsError` to `UnbottledError` to better reflect what it does (particularly now) - Improve the `UnbottledError` messaging - Raise the `UnbottledError` for dependencies also when building bottles (so that we don't try and build bottles against things that have been built from source).
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "formula"
 | |
| require "formula_installer"
 | |
| require "keg"
 | |
| require "tab"
 | |
| require "cmd/install"
 | |
| require "test/support/fixtures/testball"
 | |
| require "test/support/fixtures/testball_bottle"
 | |
| 
 | |
| describe FormulaInstaller do
 | |
|   alias_matcher :pour_bottle, :be_pour_bottle
 | |
| 
 | |
|   matcher :be_poured_from_bottle do
 | |
|     match(&:poured_from_bottle)
 | |
|   end
 | |
| 
 | |
|   def temporarily_install_bottle(formula)
 | |
|     expect(formula).not_to be_latest_version_installed
 | |
|     expect(formula).to be_bottled
 | |
|     expect(formula).to pour_bottle
 | |
| 
 | |
|     stub_formula_loader formula
 | |
|     stub_formula_loader formula("gcc") { url "gcc-1.0" }
 | |
|     stub_formula_loader formula("patchelf") { url "patchelf-1.0" }
 | |
|     allow(Formula["patchelf"]).to receive(:latest_version_installed?).and_return(true)
 | |
| 
 | |
|     fi = FormulaInstaller.new(formula)
 | |
|     fi.fetch
 | |
|     fi.install
 | |
| 
 | |
|     keg = Keg.new(formula.prefix)
 | |
| 
 | |
|     expect(formula).to be_latest_version_installed
 | |
| 
 | |
|     begin
 | |
|       expect(Tab.for_keg(keg)).to be_poured_from_bottle
 | |
| 
 | |
|       yield formula
 | |
|     ensure
 | |
|       keg.unlink
 | |
|       keg.uninstall
 | |
|       formula.clear_cache
 | |
|       formula.bottle.clear_cache
 | |
|     end
 | |
| 
 | |
|     expect(keg).not_to exist
 | |
|     expect(formula).not_to be_latest_version_installed
 | |
|   end
 | |
| 
 | |
|   specify "basic bottle install" do
 | |
|     allow(DevelopmentTools).to receive(:installed?).and_return(false)
 | |
|     Homebrew.install_args.parse(["testball_bottle"])
 | |
|     temporarily_install_bottle(TestballBottle.new) do |f|
 | |
|       # Copied directly from formula_installer_spec.rb
 | |
|       # as we expect the same behavior.
 | |
| 
 | |
|       # Test that things made it into the Keg
 | |
|       expect(f.bin).to be_a_directory
 | |
| 
 | |
|       expect(f.libexec).to be_a_directory
 | |
| 
 | |
|       expect(f.prefix/"main.c").not_to exist
 | |
| 
 | |
|       # Test that things made it into the Cellar
 | |
|       keg = Keg.new f.prefix
 | |
|       keg.link
 | |
| 
 | |
|       bin = HOMEBREW_PREFIX/"bin"
 | |
|       expect(bin).to be_a_directory
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   specify "build tools error" do
 | |
|     allow(DevelopmentTools).to receive(:installed?).and_return(false)
 | |
| 
 | |
|     # Testball doesn't have a bottle block, so use it to test this behavior
 | |
|     formula = Testball.new
 | |
| 
 | |
|     expect(formula).not_to be_latest_version_installed
 | |
|     expect(formula).not_to be_bottled
 | |
| 
 | |
|     expect {
 | |
|       described_class.new(formula).install
 | |
|     }.to raise_error(UnbottledError)
 | |
| 
 | |
|     expect(formula).not_to be_latest_version_installed
 | |
|   end
 | |
| end
 |