169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "bundler"
 | |
| require "bundler/setup"
 | |
| require "pathname"
 | |
| 
 | |
| if ENV["HOMEBREW_TESTS_COVERAGE"]
 | |
|   require "simplecov"
 | |
|   SimpleCov.command_name "test:cask:minitest"
 | |
| end
 | |
| 
 | |
| project_root = Pathname.new(File.expand_path("../..", __FILE__))
 | |
| tap_root = Pathname.new(ENV["HOMEBREW_LIBRARY"]).join("Taps", "caskroom", "homebrew-cask")
 | |
| 
 | |
| # add Homebrew to load path
 | |
| $LOAD_PATH.unshift(File.expand_path("#{ENV['HOMEBREW_REPOSITORY']}/Library/Homebrew"))
 | |
| 
 | |
| require "global"
 | |
| 
 | |
| # add Homebrew-Cask to load path
 | |
| $LOAD_PATH.push(project_root.join("lib").to_s)
 | |
| 
 | |
| # force some environment variables
 | |
| ENV["HOMEBREW_NO_EMOJI"] = "1"
 | |
| ENV["HOMEBREW_CASK_OPTS"] = nil
 | |
| 
 | |
| require "test/helper/shutup"
 | |
| include Test::Helper::Shutup
 | |
| 
 | |
| def sudo(*args)
 | |
|   %w[/usr/bin/sudo -E --] + Array(args).flatten
 | |
| end
 | |
| 
 | |
| TEST_TMPDIR = Dir.mktmpdir("homebrew_cask_tests")
 | |
| at_exit do
 | |
|   FileUtils.remove_entry(TEST_TMPDIR)
 | |
| end
 | |
| 
 | |
| # must be called after testing_env so at_exit hooks are in proper order
 | |
| require "minitest/autorun"
 | |
| require "minitest/reporters"
 | |
| Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
 | |
| 
 | |
| # Force mocha to patch MiniTest since we have both loaded thanks to homebrew's testing_env
 | |
| require "mocha/api"
 | |
| require "mocha/integration/mini_test"
 | |
| Mocha::Integration::MiniTest.activate
 | |
| 
 | |
| # our baby
 | |
| require "hbc"
 | |
| 
 | |
| # override Homebrew locations
 | |
| Hbc.homebrew_prefix = Pathname.new(TEST_TMPDIR).join("prefix")
 | |
| Hbc.homebrew_repository = Hbc.homebrew_prefix
 | |
| 
 | |
| # Override Tap::TAP_DIRECTORY to use our test Tap directory.
 | |
| class Tap
 | |
|   send(:remove_const, :TAP_DIRECTORY)
 | |
|   TAP_DIRECTORY = Hbc.homebrew_prefix.join("Library", "Taps")
 | |
| end
 | |
| 
 | |
| Hbc.default_tap = Tap.fetch("caskroom", "testcasks")
 | |
| 
 | |
| # also jack in some test Casks
 | |
| FileUtils.ln_s project_root.join("test", "support"), Tap::TAP_DIRECTORY.join("caskroom").tap(&:mkpath).join("homebrew-testcasks")
 | |
| 
 | |
| # pretend that the caskroom/cask Tap is installed
 | |
| FileUtils.ln_s tap_root, Tap::TAP_DIRECTORY.join("caskroom").tap(&:mkpath).join("homebrew-cask")
 | |
| 
 | |
| # create cache directory
 | |
| Hbc.homebrew_cache = Pathname.new(TEST_TMPDIR).join("cache")
 | |
| Hbc.cache.mkpath
 | |
| 
 | |
| # our own testy caskroom
 | |
| Hbc.caskroom = Hbc.homebrew_prefix.join("TestCaskroom")
 | |
| 
 | |
| class TestHelper
 | |
|   # helpers for test Casks to reference local files easily
 | |
|   def self.local_binary_path(name)
 | |
|     File.expand_path(File.join(File.dirname(__FILE__), "support", "binaries", name))
 | |
|   end
 | |
| 
 | |
|   def self.local_binary_url(name)
 | |
|     "file://" + local_binary_path(name)
 | |
|   end
 | |
| 
 | |
|   def self.test_cask
 | |
|     @test_cask ||= Hbc.load("basic-cask")
 | |
|   end
 | |
| 
 | |
|   def self.fake_fetcher
 | |
|     Hbc::FakeFetcher
 | |
|   end
 | |
| 
 | |
|   def self.fake_response_for(*args)
 | |
|     Hbc::FakeFetcher.fake_response_for(*args)
 | |
|   end
 | |
| 
 | |
|   def self.must_output(test, lambda, expected = nil)
 | |
|     out, err = test.capture_subprocess_io do
 | |
|       lambda.call
 | |
|     end
 | |
| 
 | |
|     if block_given?
 | |
|       yield (out + err).chomp
 | |
|     elsif expected.is_a?(Regexp)
 | |
|       (out + err).chomp.must_match expected
 | |
|     else
 | |
|       (out + err).chomp.must_equal expected.gsub(%r{^ *}, "")
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def self.valid_alias?(candidate)
 | |
|     return false unless candidate.symlink?
 | |
|     candidate.readlink.exist?
 | |
|   end
 | |
| 
 | |
|   def self.install_without_artifacts(cask)
 | |
|     Hbc::Installer.new(cask).tap do |i|
 | |
|       shutup do
 | |
|         i.download
 | |
|         i.extract_primary_container
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def self.install_with_caskfile(cask)
 | |
|     Hbc::Installer.new(cask).tap do |i|
 | |
|       shutup do
 | |
|         i.save_caskfile
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def self.install_without_artifacts_with_caskfile(cask)
 | |
|     Hbc::Installer.new(cask).tap do |i|
 | |
|       shutup do
 | |
|         i.download
 | |
|         i.extract_primary_container
 | |
|         i.save_caskfile
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| # Extend MiniTest API with support for RSpec-style shared examples
 | |
| require "support/shared_examples"
 | |
| require "support/shared_examples/dsl_base.rb"
 | |
| require "support/shared_examples/staged.rb"
 | |
| 
 | |
| require "support/fake_fetcher"
 | |
| require "support/fake_dirs"
 | |
| require "support/fake_system_command"
 | |
| require "support/cleanup"
 | |
| require "support/never_sudo_system_command"
 | |
| require "tmpdir"
 | |
| require "tempfile"
 | |
| 
 | |
| # create directories
 | |
| FileUtils.mkdir_p Hbc.homebrew_prefix.join("bin")
 | |
| 
 | |
| # Common superclass for test Casks for when we need to filter them out
 | |
| class Hbc::TestCask < Hbc::Cask; end
 | |
| 
 | |
| # jack in some optional utilities
 | |
| FileUtils.ln_s "/usr/local/bin/cabextract", Hbc.homebrew_prefix.join("bin/cabextract")
 | |
| FileUtils.ln_s "/usr/local/bin/unar", Hbc.homebrew_prefix.join("bin/unar")
 | |
| FileUtils.ln_s "/usr/local/bin/unlzma", Hbc.homebrew_prefix.join("bin/unlzma")
 | |
| FileUtils.ln_s "/usr/local/bin/unxz", Hbc.homebrew_prefix.join("bin/unxz")
 | |
| FileUtils.ln_s "/usr/local/bin/lsar", Hbc.homebrew_prefix.join("bin/lsar")
 | 
