2016-08-18 22:11:42 +03:00
|
|
|
require "bundler"
|
|
|
|
require "bundler/setup"
|
|
|
|
require "pathname"
|
|
|
|
|
2016-08-21 07:51:25 +02:00
|
|
|
if ENV["HOMEBREW_TESTS_COVERAGE"]
|
|
|
|
require "simplecov"
|
|
|
|
SimpleCov.command_name "test:cask:minitest"
|
2016-08-18 22:11:42 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
project_root = Pathname.new(File.expand_path("../..", __FILE__))
|
2016-08-18 22:40:05 +03:00
|
|
|
tap_root = Pathname.new(ENV["HOMEBREW_LIBRARY"]).join("Taps", "caskroom", "homebrew-cask")
|
2016-08-18 22:11:42 +03:00
|
|
|
|
|
|
|
# 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
|
|
|
|
|
2016-08-21 04:48:35 +02:00
|
|
|
require "test/helper/shutup"
|
|
|
|
include Test::Helper::Shutup
|
2016-08-18 22:11:42 +03:00
|
|
|
|
|
|
|
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
|
2016-08-18 22:40:05 +03:00
|
|
|
FileUtils.ln_s tap_root, Tap::TAP_DIRECTORY.join("caskroom").tap(&:mkpath).join("homebrew-cask")
|
2016-08-18 22:11:42 +03:00
|
|
|
|
|
|
|
# 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")
|