
All of these taps use Homebrew internal APIs (or will shortly) and we autoinstall them all from `brew $CMD`. We should adjust our CI to ensure that we never accidentally break these taps when making changes to core code so that these taps can rely more on this core code rather than having to e.g. vendor equivalent code that never changes on our end.
69 lines
2.3 KiB
Ruby
69 lines
2.3 KiB
Ruby
#: @hide_from_man_page
|
|
#: * `tests` [`-v`] [`--coverage`] [`--generic`] [`--no-compat`] [`--only=`<test_script/test_method>] [`--seed` <seed>] [`--trace`] [`--online`] [`--official-cmd-taps`]:
|
|
#: Run Homebrew's unit and integration tests.
|
|
|
|
require "fileutils"
|
|
require "tap"
|
|
|
|
module Homebrew
|
|
def tests
|
|
ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1"
|
|
|
|
if ARGV.include? "--official-cmd-taps"
|
|
ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"] = "1"
|
|
OFFICIAL_CMD_TAPS.each do |tap, _|
|
|
tap = Tap.fetch tap
|
|
tap.install unless tap.installed?
|
|
end
|
|
end
|
|
|
|
(HOMEBREW_LIBRARY/"Homebrew/test").cd do
|
|
ENV["TESTOPTS"] = "-v" if ARGV.verbose?
|
|
ENV["HOMEBREW_NO_COMPAT"] = "1" if ARGV.include? "--no-compat"
|
|
ENV["HOMEBREW_TEST_GENERIC_OS"] = "1" if ARGV.include? "--generic"
|
|
ENV["HOMEBREW_NO_GITHUB_API"] = "1" unless ARGV.include? "--online"
|
|
if ARGV.include? "--coverage"
|
|
ENV["HOMEBREW_TESTS_COVERAGE"] = "1"
|
|
FileUtils.rm_f "coverage/.resultset.json"
|
|
end
|
|
|
|
# Override author/committer as global settings might be invalid and thus
|
|
# will cause silent failure during the setup of dummy Git repositories.
|
|
%w[AUTHOR COMMITTER].each do |role|
|
|
ENV["GIT_#{role}_NAME"] = "brew tests"
|
|
ENV["GIT_#{role}_EMAIL"] = "brew-tests@localhost"
|
|
end
|
|
|
|
Homebrew.install_gem_setup_path! "bundler"
|
|
unless quiet_system("bundle", "check")
|
|
system "bundle", "install", "--path", "vendor/bundle"
|
|
end
|
|
|
|
# Make it easier to reproduce test runs.
|
|
ENV["SEED"] = ARGV.next if ARGV.include? "--seed"
|
|
|
|
args = []
|
|
args << "--trace" if ARGV.include? "--trace"
|
|
if ARGV.value("only")
|
|
ENV["HOMEBREW_TESTS_ONLY"] = "1"
|
|
test_name, test_method = ARGV.value("only").split("/", 2)
|
|
args << "TEST=test_#{test_name}.rb"
|
|
args << "TESTOPTS=--name=test_#{test_method}" if test_method
|
|
end
|
|
args += ARGV.named.select { |v| v[/^TEST(OPTS)?=/] }
|
|
system "bundle", "exec", "rake", "test", *args
|
|
|
|
Homebrew.failed = !$?.success?
|
|
|
|
if (fs_leak_log = HOMEBREW_LIBRARY/"Homebrew/test/fs_leak_log").file?
|
|
fs_leak_log_content = fs_leak_log.read
|
|
unless fs_leak_log_content.empty?
|
|
opoo "File leak is detected"
|
|
puts fs_leak_log_content
|
|
Homebrew.failed = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|