Test officially supported cmd taps. (#390)

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.
This commit is contained in:
Mike McQuaid 2016-07-04 16:08:53 +01:00 committed by GitHub
parent 037729351f
commit 252c701c59
6 changed files with 60 additions and 11 deletions

View File

@ -1,13 +1,23 @@
#: @hide_from_man_page
#: * `tests` [`-v`] [`--coverage`] [`--generic`] [`--no-compat`] [`--only=`<test_script/test_method>] [`--seed` <seed>] [`--trace`] [`--online`]:
#: * `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["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1"
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"

View File

@ -659,6 +659,7 @@ module Homebrew
test "brew", "tests", *tests_args
test "brew", "tests", "--no-compat"
test "brew", "readall", "--syntax"
test "brew", "tests", "--official-cmd-taps"
else
test "brew", "readall", "--aliases", @tap.name
end

View File

@ -9,6 +9,7 @@ require "utils"
require "exceptions"
require "set"
require "rbconfig"
require "official_taps"
ARGV.extend(HomebrewArgvExtension)

View File

@ -15,4 +15,10 @@ OFFICIAL_TAPS = %w[
tex
versions
x11
]
].freeze
OFFICIAL_CMD_TAPS = {
"caskroom/cask" => ["cask"],
"homebrew/bundle" => ["bundle"],
"homebrew/services" => ["services"],
}.freeze

View File

@ -17,6 +17,12 @@ class IntegrationCommandTests < Homebrew::TestCase
@formula_files.each(&:unlink)
end
def needs_test_cmd_taps
unless ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"]
skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set"
end
end
def cmd_id_from_args(args)
args_pretty = args.join(" ").gsub(TEST_TMPDIR, "@TMPDIR@")
test_pretty = "#{self.class.name}\##{name}.#{@cmd_id_index += 1}"
@ -668,4 +674,35 @@ class IntegrationCommandTests < Homebrew::TestCase
ensure
desc_cache.unlink
end
def test_bundle
needs_test_cmd_taps
HOMEBREW_REPOSITORY.cd do
shutup do
system "git", "init"
system "git", "commit", "--allow-empty", "-m", "This is a test commit"
end
end
mktmpdir do |path|
FileUtils.touch "#{path}/Brewfile"
Dir.chdir path do
assert_equal "The Brewfile's dependencies are satisfied.",
cmd("bundle", "check")
end
end
ensure
FileUtils.rm_rf HOMEBREW_REPOSITORY/".git"
end
def test_cask
needs_test_cmd_taps
assert_equal "Warning: nothing to list", cmd("cask", "list")
end
def test_services
needs_test_cmd_taps
assert_equal "Warning: No services available to control with `brew services`",
cmd("services", "list")
end
end

View File

@ -94,14 +94,8 @@ begin
exit Homebrew.failed? ? 1 : 0
else
require "tap"
possible_tap = case cmd
when "brewdle", "brewdler", "bundle", "bundler"
Tap.fetch("Homebrew", "bundle")
when "cask"
Tap.fetch("caskroom", "cask")
when "services"
Tap.fetch("Homebrew", "services")
end
possible_tap = OFFICIAL_CMD_TAPS.find { |_, cmds| cmds.include?(cmd) }
possible_tap = Tap.fetch(possible_tap.first) if possible_tap
if possible_tap && !possible_tap.installed?
brew_uid = HOMEBREW_BREW_FILE.stat.uid