aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/test/integration_cmds_tests.rb194
-rw-r--r--Library/Homebrew/test/test_integration_cmds.rb899
-rw-r--r--Library/Homebrew/test/test_integration_cmds_analytics.rb26
-rw-r--r--Library/Homebrew/test/test_integration_cmds_bottle.rb21
-rw-r--r--Library/Homebrew/test/test_integration_cmds_bundle.rb22
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cache.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cache_formula.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cask.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cat.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cellar.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cellar_formula.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_cleanup.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_command.rb11
-rw-r--r--Library/Homebrew/test/test_integration_cmds_commands.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_config.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_create.rb12
-rw-r--r--Library/Homebrew/test/test_integration_cmds_custom_command.rb16
-rw-r--r--Library/Homebrew/test/test_integration_cmds_deps.rb16
-rw-r--r--Library/Homebrew/test/test_integration_cmds_desc.rb17
-rw-r--r--Library/Homebrew/test/test_integration_cmds_doctor.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_edit.rb11
-rw-r--r--Library/Homebrew/test/test_integration_cmds_env.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_env_bash.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_env_csh.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_env_fish.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_env_plain.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_fetch.rb11
-rw-r--r--Library/Homebrew/test/test_integration_cmds_help.rb21
-rw-r--r--Library/Homebrew/test/test_integration_cmds_home.rb12
-rw-r--r--Library/Homebrew/test/test_integration_cmds_info.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_install.rb24
-rw-r--r--Library/Homebrew/test/test_integration_cmds_irb.rb19
-rw-r--r--Library/Homebrew/test/test_integration_cmds_leaves.rb15
-rw-r--r--Library/Homebrew/test/test_integration_cmds_link.rb23
-rw-r--r--Library/Homebrew/test/test_integration_cmds_linkapps.rb15
-rw-r--r--Library/Homebrew/test/test_integration_cmds_list.rb13
-rw-r--r--Library/Homebrew/test/test_integration_cmds_log.rb13
-rw-r--r--Library/Homebrew/test/test_integration_cmds_log_formula.rb27
-rw-r--r--Library/Homebrew/test/test_integration_cmds_migrate.rb18
-rw-r--r--Library/Homebrew/test/test_integration_cmds_missing.rb11
-rw-r--r--Library/Homebrew/test/test_integration_cmds_options.rb12
-rw-r--r--Library/Homebrew/test/test_integration_cmds_outdated.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_pin_unpin.rb18
-rw-r--r--Library/Homebrew/test/test_integration_cmds_prefix.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_prefix_formula.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_prune.rb21
-rw-r--r--Library/Homebrew/test/test_integration_cmds_pull.rb27
-rw-r--r--Library/Homebrew/test/test_integration_cmds_pull_offline.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_readall.rb12
-rw-r--r--Library/Homebrew/test/test_integration_cmds_reinstall.rb15
-rw-r--r--Library/Homebrew/test/test_integration_cmds_reinstall_pinned.rb15
-rw-r--r--Library/Homebrew/test/test_integration_cmds_repository.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_search.rb30
-rw-r--r--Library/Homebrew/test/test_integration_cmds_services.rb11
-rw-r--r--Library/Homebrew/test/test_integration_cmds_sh.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_switch.rb20
-rw-r--r--Library/Homebrew/test/test_integration_cmds_tap.rb30
-rw-r--r--Library/Homebrew/test/test_integration_cmds_tap_readme.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_test_formula.rb30
-rw-r--r--Library/Homebrew/test/test_integration_cmds_uninstall.rb8
-rw-r--r--Library/Homebrew/test/test_integration_cmds_unlink.rb10
-rw-r--r--Library/Homebrew/test/test_integration_cmds_unlinkapps.rb19
-rw-r--r--Library/Homebrew/test/test_integration_cmds_unpack.rb13
-rw-r--r--Library/Homebrew/test/test_integration_cmds_upgrade.rb12
-rw-r--r--Library/Homebrew/test/test_integration_cmds_uses.rb16
-rw-r--r--Library/Homebrew/test/test_integration_cmds_version.rb8
66 files changed, 1091 insertions, 899 deletions
diff --git a/Library/Homebrew/test/integration_cmds_tests.rb b/Library/Homebrew/test/integration_cmds_tests.rb
new file mode 100644
index 000000000..a63b343c0
--- /dev/null
+++ b/Library/Homebrew/test/integration_cmds_tests.rb
@@ -0,0 +1,194 @@
+require "bundler"
+require "testing_env"
+require "fileutils"
+require "pathname"
+require "formula"
+
+class IntegrationCommandTests < Homebrew::TestCase
+ def setup
+ @cmd_id_index = 0 # Assign unique IDs to invocations of `cmd_output`.
+ (HOMEBREW_PREFIX/"bin").mkpath
+ FileUtils.touch HOMEBREW_PREFIX/"bin/brew"
+ end
+
+ def teardown
+ coretap = CoreTap.new
+ paths_to_delete = [
+ HOMEBREW_LINKED_KEGS,
+ HOMEBREW_PINNED_KEGS,
+ HOMEBREW_CELLAR.children,
+ HOMEBREW_CACHE.children,
+ HOMEBREW_LOCK_DIR.children,
+ HOMEBREW_LOGS.children,
+ HOMEBREW_TEMP.children,
+ HOMEBREW_PREFIX/"bin",
+ HOMEBREW_PREFIX/"share",
+ HOMEBREW_PREFIX/"opt",
+ HOMEBREW_LIBRARY/"Taps/caskroom",
+ HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-bundle",
+ HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-foo",
+ HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-services",
+ HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-shallow",
+ HOMEBREW_REPOSITORY/".git",
+ coretap.path/".git",
+ coretap.alias_dir,
+ coretap.formula_dir.children,
+ coretap.path/"formula_renames.json",
+ ].flatten
+ FileUtils.rm_rf paths_to_delete
+ end
+
+ def needs_test_cmd_taps
+ return if ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"]
+ skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set"
+ end
+
+ def needs_macos
+ skip "Not on MacOS" unless OS.mac?
+ 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}"
+ "[#{test_pretty}] brew #{args_pretty}"
+ end
+
+ def cmd_output(*args)
+ # 1.8-compatible way of writing def cmd_output(*args, **env)
+ env = args.last.is_a?(Hash) ? args.pop : {}
+ cmd_args = %W[
+ -W0
+ -I#{HOMEBREW_LIBRARY_PATH}/test/lib
+ -rconfig
+ ]
+ if ENV["HOMEBREW_TESTS_COVERAGE"]
+ # This is needed only because we currently use a patched version of
+ # simplecov, and gems installed through git are not available without
+ # requiring bundler/setup first. See also the comment in test/Gemfile.
+ # Remove this line when we'll switch back to a stable simplecov release.
+ cmd_args << "-rbundler/setup"
+ cmd_args << "-rsimplecov"
+ end
+ cmd_args << "-rintegration_mocks"
+ cmd_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s
+ cmd_args += args
+ Bundler.with_original_env do
+ ENV["HOMEBREW_BREW_FILE"] = HOMEBREW_PREFIX/"bin/brew"
+ ENV["HOMEBREW_INTEGRATION_TEST"] = cmd_id_from_args(args)
+ ENV["HOMEBREW_TEST_TMPDIR"] = TEST_TMPDIR
+ env.each_pair { |k, v| ENV[k] = v }
+
+ read, write = IO.pipe
+ begin
+ pid = fork do
+ read.close
+ $stdout.reopen(write)
+ $stderr.reopen(write)
+ write.close
+ exec RUBY_PATH, *cmd_args
+ end
+ write.close
+ read.read.chomp
+ ensure
+ Process.wait(pid)
+ read.close
+ end
+ end
+ end
+
+ def cmd(*args)
+ output = cmd_output(*args)
+ status = $?.exitstatus
+ puts "\n#{output}" if status.nonzero?
+ assert_equal 0, status
+ output
+ end
+
+ def cmd_fail(*args)
+ output = cmd_output(*args)
+ status = $?.exitstatus
+ $stderr.puts "\n#{output}" if status.zero?
+ refute_equal 0, status
+ output
+ end
+
+ def setup_test_formula(name, content = nil)
+ formula_path = CoreTap.new.formula_dir/"#{name}.rb"
+
+ case name
+ when /^testball/
+ content = <<-EOS.undent
+ desc "Some test"
+ homepage "https://example.com/#{name}"
+ url "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
+ sha256 "#{TESTBALL_SHA256}"
+
+ option "with-foo", "Build with foo"
+ #{content}
+
+ def install
+ (prefix/"foo"/"test").write("test") if build.with? "foo"
+ prefix.install Dir["*"]
+ (buildpath/"test.c").write \
+ "#include <stdio.h>\\nint main(){return printf(\\"test\\");}"
+ bin.mkpath
+ system ENV.cc, "test.c", "-o", bin/"test"
+ end
+
+ # something here
+ EOS
+ when "foo"
+ content = <<-EOS.undent
+ url "https://example.com/#{name}-1.0"
+ EOS
+ when "bar"
+ content = <<-EOS.undent
+ url "https://example.com/#{name}-1.0"
+ depends_on "foo"
+ EOS
+ end
+
+ formula_path.write <<-EOS.undent
+ class #{Formulary.class_s(name)} < Formula
+ #{content}
+ end
+ EOS
+
+ formula_path
+ end
+
+ def setup_remote_tap(name)
+ tap = Tap.fetch name
+ tap.install(full_clone: false, quiet: true) unless tap.installed?
+ tap
+ end
+
+ def install_and_rename_coretap_formula(old_name, new_name)
+ core_tap = CoreTap.new
+ core_tap.path.cd do
+ shutup do
+ system "git", "init"
+ system "git", "add", "--all"
+ system "git", "commit", "-m",
+ "#{old_name.capitalize} has not yet been renamed"
+ end
+ end
+
+ cmd("install", old_name)
+ (core_tap.path/"Formula/#{old_name}.rb").unlink
+ formula_renames = core_tap.path/"formula_renames.json"
+ formula_renames.write Utils::JSON.dump(old_name => new_name)
+
+ core_tap.path.cd do
+ shutup do
+ system "git", "add", "--all"
+ system "git", "commit", "-m",
+ "#{old_name.capitalize} has been renamed to #{new_name.capitalize}"
+ end
+ end
+ end
+
+ def testball
+ "#{File.expand_path("..", __FILE__)}/testball.rb"
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds.rb b/Library/Homebrew/test/test_integration_cmds.rb
deleted file mode 100644
index 35ad04e7a..000000000
--- a/Library/Homebrew/test/test_integration_cmds.rb
+++ /dev/null
@@ -1,899 +0,0 @@
-require "bundler"
-require "testing_env"
-require "fileutils"
-require "pathname"
-require "formula"
-
-class IntegrationCommandTests < Homebrew::TestCase
- def setup
- @cmd_id_index = 0 # Assign unique IDs to invocations of `cmd_output`.
- (HOMEBREW_PREFIX/"bin").mkpath
- FileUtils.touch HOMEBREW_PREFIX/"bin/brew"
- end
-
- def teardown
- coretap = CoreTap.new
- paths_to_delete = [
- HOMEBREW_LINKED_KEGS,
- HOMEBREW_PINNED_KEGS,
- HOMEBREW_CELLAR.children,
- HOMEBREW_CACHE.children,
- HOMEBREW_LOCK_DIR.children,
- HOMEBREW_LOGS.children,
- HOMEBREW_TEMP.children,
- HOMEBREW_PREFIX/"bin",
- HOMEBREW_PREFIX/"share",
- HOMEBREW_PREFIX/"opt",
- HOMEBREW_LIBRARY/"Taps/caskroom",
- HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-bundle",
- HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-foo",
- HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-services",
- HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-shallow",
- HOMEBREW_REPOSITORY/".git",
- coretap.path/".git",
- coretap.alias_dir,
- coretap.formula_dir.children,
- coretap.path/"formula_renames.json",
- ].flatten
- FileUtils.rm_rf paths_to_delete
- end
-
- def needs_test_cmd_taps
- return if ENV["HOMEBREW_TEST_OFFICIAL_CMD_TAPS"]
- skip "HOMEBREW_TEST_OFFICIAL_CMD_TAPS is not set"
- end
-
- def needs_macos
- skip "Not on MacOS" unless OS.mac?
- 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}"
- "[#{test_pretty}] brew #{args_pretty}"
- end
-
- def cmd_output(*args)
- # 1.8-compatible way of writing def cmd_output(*args, **env)
- env = args.last.is_a?(Hash) ? args.pop : {}
- cmd_args = %W[
- -W0
- -I#{HOMEBREW_LIBRARY_PATH}/test/lib
- -rconfig
- ]
- if ENV["HOMEBREW_TESTS_COVERAGE"]
- # This is needed only because we currently use a patched version of
- # simplecov, and gems installed through git are not available without
- # requiring bundler/setup first. See also the comment in test/Gemfile.
- # Remove this line when we'll switch back to a stable simplecov release.
- cmd_args << "-rbundler/setup"
- cmd_args << "-rsimplecov"
- end
- cmd_args << "-rintegration_mocks"
- cmd_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s
- cmd_args += args
- Bundler.with_original_env do
- ENV["HOMEBREW_BREW_FILE"] = HOMEBREW_PREFIX/"bin/brew"
- ENV["HOMEBREW_INTEGRATION_TEST"] = cmd_id_from_args(args)
- ENV["HOMEBREW_TEST_TMPDIR"] = TEST_TMPDIR
- env.each_pair { |k, v| ENV[k] = v }
-
- read, write = IO.pipe
- begin
- pid = fork do
- read.close
- $stdout.reopen(write)
- $stderr.reopen(write)
- write.close
- exec RUBY_PATH, *cmd_args
- end
- write.close
- read.read.chomp
- ensure
- Process.wait(pid)
- read.close
- end
- end
- end
-
- def cmd(*args)
- output = cmd_output(*args)
- status = $?.exitstatus
- puts "\n#{output}" if status.nonzero?
- assert_equal 0, status
- output
- end
-
- def cmd_fail(*args)
- output = cmd_output(*args)
- status = $?.exitstatus
- $stderr.puts "\n#{output}" if status.zero?
- refute_equal 0, status
- output
- end
-
- def setup_test_formula(name, content = nil)
- formula_path = CoreTap.new.formula_dir/"#{name}.rb"
-
- case name
- when /^testball/
- content = <<-EOS.undent
- desc "Some test"
- homepage "https://example.com/#{name}"
- url "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
- sha256 "#{TESTBALL_SHA256}"
-
- option "with-foo", "Build with foo"
- #{content}
-
- def install
- (prefix/"foo"/"test").write("test") if build.with? "foo"
- prefix.install Dir["*"]
- (buildpath/"test.c").write \
- "#include <stdio.h>\\nint main(){return printf(\\"test\\");}"
- bin.mkpath
- system ENV.cc, "test.c", "-o", bin/"test"
- end
-
- # something here
- EOS
- when "foo"
- content = <<-EOS.undent
- url "https://example.com/#{name}-1.0"
- EOS
- when "bar"
- content = <<-EOS.undent
- url "https://example.com/#{name}-1.0"
- depends_on "foo"
- EOS
- end
-
- formula_path.write <<-EOS.undent
- class #{Formulary.class_s(name)} < Formula
- #{content}
- end
- EOS
-
- formula_path
- end
-
- def setup_remote_tap(name)
- tap = Tap.fetch name
- tap.install(full_clone: false, quiet: true) unless tap.installed?
- tap
- end
-
- def install_and_rename_coretap_formula(old_name, new_name)
- core_tap = CoreTap.new
- core_tap.path.cd do
- shutup do
- system "git", "init"
- system "git", "add", "--all"
- system "git", "commit", "-m",
- "#{old_name.capitalize} has not yet been renamed"
- end
- end
-
- cmd("install", old_name)
- (core_tap.path/"Formula/#{old_name}.rb").unlink
- formula_renames = core_tap.path/"formula_renames.json"
- formula_renames.write Utils::JSON.dump(old_name => new_name)
-
- core_tap.path.cd do
- shutup do
- system "git", "add", "--all"
- system "git", "commit", "-m",
- "#{old_name.capitalize} has been renamed to #{new_name.capitalize}"
- end
- end
- end
-
- def testball
- "#{File.expand_path("..", __FILE__)}/testball.rb"
- end
-
- def test_prefix
- assert_equal HOMEBREW_PREFIX.to_s,
- cmd("--prefix")
- end
-
- def test_version
- assert_match HOMEBREW_VERSION.to_s,
- cmd("--version")
- end
-
- def test_cache
- assert_equal HOMEBREW_CACHE.to_s,
- cmd("--cache")
- end
-
- def test_cache_formula
- assert_match %r{#{HOMEBREW_CACHE}/testball-},
- cmd("--cache", testball)
- end
-
- def test_cellar
- assert_equal HOMEBREW_CELLAR.to_s,
- cmd("--cellar")
- end
-
- def test_cellar_formula
- assert_match "#{HOMEBREW_CELLAR}/testball",
- cmd("--cellar", testball)
- end
-
- def test_env
- assert_match(/CMAKE_PREFIX_PATH="#{Regexp.escape(HOMEBREW_PREFIX)}[:"]/,
- cmd("--env"))
- end
-
- def test_env_bash
- assert_match(/export CMAKE_PREFIX_PATH="#{Regexp.quote(HOMEBREW_PREFIX.to_s)}"/,
- cmd("--env", "--shell=bash"))
- end
-
- def test_env_fish
- assert_match(/set [-]gx CMAKE_PREFIX_PATH "#{Regexp.quote(HOMEBREW_PREFIX.to_s)}"/,
- cmd("--env", "--shell=fish"))
- end
-
- def test_env_csh
- assert_match(/setenv CMAKE_PREFIX_PATH #{Regexp.quote(HOMEBREW_PREFIX.to_s)};/,
- cmd("--env", "--shell=tcsh"))
- end
-
- def test_env_plain
- assert_match(/CMAKE_PREFIX_PATH: #{Regexp.quote(HOMEBREW_PREFIX)}/,
- cmd("--env", "--plain"))
- end
-
- def test_prefix_formula
- assert_match "#{HOMEBREW_CELLAR}/testball",
- cmd("--prefix", testball)
- end
-
- def test_repository
- assert_match HOMEBREW_REPOSITORY.to_s,
- cmd("--repository")
- assert_match "#{HOMEBREW_LIBRARY}/Taps/foo/homebrew-bar",
- cmd("--repository", "foo/bar")
- end
-
- def test_help
- assert_match "Example usage:\n",
- cmd_fail # Generic help (empty argument list).
- assert_match "Unknown command: command-that-does-not-exist",
- cmd_fail("help", "command-that-does-not-exist")
- assert_match(/^brew cat /,
- cmd_fail("cat")) # Missing formula argument triggers help.
-
- assert_match "Example usage:\n",
- cmd("help") # Generic help.
- assert_match(/^brew cat /,
- cmd("help", "cat")) # Internal command (documented, Ruby).
- assert_match(/^brew update /,
- cmd("help", "update")) # Internal command (documented, Shell).
- assert_match(/^brew update-test /,
- cmd("help", "update-test")) # Internal developer command (documented, Ruby).
- end
-
- def test_config
- assert_match "HOMEBREW_VERSION: #{HOMEBREW_VERSION}",
- cmd("config")
- end
-
- def test_install
- setup_test_formula "testball1"
- assert_match "Specify `--HEAD`", cmd_fail("install", "testball1", "--head")
- assert_match "No head is defined", cmd_fail("install", "testball1", "--HEAD")
- assert_match "No devel block", cmd_fail("install", "testball1", "--devel")
- assert_match "#{HOMEBREW_CELLAR}/testball1/0.1", cmd("install", "testball1")
- assert_match "testball1-0.1 already installed", cmd("install", "testball1")
- assert_match "MacRuby is not packaged", cmd_fail("install", "macruby")
- assert_match "No available formula", cmd_fail("install", "formula")
- assert_match "This similarly named formula was found",
- cmd_fail("install", "testball")
-
- setup_test_formula "testball2"
- assert_match "These similarly named formulae were found",
- cmd_fail("install", "testball")
-
- install_and_rename_coretap_formula "testball1", "testball2"
- assert_match "testball1 already installed, it's just not migrated",
- cmd("install", "testball2")
- end
-
- def test_bottle
- cmd("install", "--build-bottle", testball)
- assert_match "Formula not from core or any taps",
- cmd_fail("bottle", "--no-rebuild", testball)
-
- setup_test_formula "testball"
-
- # `brew bottle` should not fail with dead symlink
- # https://github.com/Homebrew/legacy-homebrew/issues/49007
- (HOMEBREW_CELLAR/"testball/0.1").cd do
- FileUtils.ln_s "not-exist", "symlink"
- end
- assert_match(/testball-0\.1.*\.bottle\.tar\.gz/,
- cmd_output("bottle", "--no-rebuild", "testball"))
- ensure
- FileUtils.rm_f Dir["testball-0.1*.bottle.tar.gz"]
- end
-
- def test_uninstall
- cmd("install", testball)
- assert_match "Uninstalling testball", cmd("uninstall", "--force", testball)
- end
-
- def test_cleanup
- (HOMEBREW_CACHE/"test").write "test"
- assert_match "#{HOMEBREW_CACHE}/test", cmd("cleanup", "--prune=all")
- end
-
- def test_readall
- formula_file = setup_test_formula "testball"
- alias_file = CoreTap.new.alias_dir/"foobar"
- alias_file.parent.mkpath
- FileUtils.ln_s formula_file, alias_file
- cmd("readall", "--aliases", "--syntax")
- cmd("readall", "homebrew/core")
- end
-
- def test_tap
- path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
- path.mkpath
- path.cd do
- shutup do
- system "git", "init"
- system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-foo"
- FileUtils.touch "readme"
- system "git", "add", "--all"
- system "git", "commit", "-m", "init"
- end
- end
-
- assert_match "homebrew/foo", cmd("tap")
- assert_match "homebrew/versions", cmd("tap", "--list-official")
- assert_match "2 taps", cmd("tap-info")
- assert_match "https://github.com/Homebrew/homebrew-foo", cmd("tap-info", "homebrew/foo")
- assert_match "https://github.com/Homebrew/homebrew-foo", cmd("tap-info", "--json=v1", "--installed")
- assert_match "Pinned homebrew/foo", cmd("tap-pin", "homebrew/foo")
- assert_match "homebrew/foo", cmd("tap", "--list-pinned")
- assert_match "Unpinned homebrew/foo", cmd("tap-unpin", "homebrew/foo")
- assert_match "Tapped", cmd("tap", "homebrew/bar", path/".git")
- assert_match "Untapped", cmd("untap", "homebrew/bar")
- assert_equal "", cmd("tap", "homebrew/bar", path/".git", "-q", "--full")
- assert_match "Untapped", cmd("untap", "homebrew/bar")
- end
-
- def test_missing
- setup_test_formula "foo"
- setup_test_formula "bar"
-
- (HOMEBREW_CELLAR/"bar/1.0").mkpath
- assert_match "foo", cmd("missing")
- end
-
- def test_doctor
- assert_match "This is an integration test",
- cmd_fail("doctor", "check_integration_test")
- end
-
- def test_command
- assert_equal "#{HOMEBREW_LIBRARY_PATH}/cmd/info.rb",
- cmd("command", "info")
-
- assert_match "Unknown command",
- cmd_fail("command", "I-don't-exist")
- end
-
- def test_commands
- assert_match "Built-in commands",
- cmd("commands")
- end
-
- def test_cat
- formula_file = setup_test_formula "testball"
- assert_equal formula_file.read.chomp, cmd("cat", "testball")
- end
-
- def test_desc
- setup_test_formula "testball"
-
- assert_equal "testball: Some test", cmd("desc", "testball")
- assert_match "Pick one, and only one", cmd_fail("desc", "--search", "--name")
- assert_match "You must provide a search term", cmd_fail("desc", "--search")
-
- desc_cache = HOMEBREW_CACHE/"desc_cache.json"
- refute_predicate desc_cache, :exist?, "Cached file should not exist"
-
- cmd("desc", "--description", "testball")
- assert_predicate desc_cache, :exist?, "Cached file should not exist"
- end
-
- def test_edit
- (HOMEBREW_REPOSITORY/".git").mkpath
- setup_test_formula "testball"
-
- assert_match "# something here",
- cmd("edit", "testball", "HOMEBREW_EDITOR" => "/bin/cat")
- end
-
- def test_sh
- assert_match "Your shell has been configured",
- cmd("sh", "SHELL" => which("true"))
- end
-
- def test_info
- setup_test_formula "testball"
-
- assert_match "testball: stable 0.1",
- cmd("info", "testball")
- end
-
- def test_tap_readme
- assert_match "brew install homebrew/foo/<formula>",
- cmd("tap-readme", "foo", "--verbose")
- readme = HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-foo/README.md"
- assert readme.exist?, "The README should be created"
- end
-
- def test_unpack
- setup_test_formula "testball"
-
- mktmpdir do |path|
- cmd "unpack", "testball", "--destdir=#{path}"
- assert File.directory?("#{path}/testball-0.1"),
- "The tarball should be unpacked"
- end
- end
-
- def test_options
- setup_test_formula "testball", <<-EOS.undent
- depends_on "bar" => :recommended
- EOS
-
- assert_equal "--with-foo\n\tBuild with foo\n--without-bar\n\tBuild without bar support",
- cmd_output("options", "testball").chomp
- end
-
- def test_outdated
- setup_test_formula "testball"
- (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
-
- assert_equal "testball", cmd("outdated")
- end
-
- def test_upgrade
- setup_test_formula "testball"
- (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
-
- cmd("upgrade")
- assert((HOMEBREW_CELLAR/"testball/0.1").directory?,
- "The latest version directory should be created")
- end
-
- def test_linkapps
- home_dir = Pathname.new(mktmpdir)
- (home_dir/"Applications").mkpath
-
- setup_test_formula "testball"
-
- source_dir = HOMEBREW_CELLAR/"testball/0.1/TestBall.app"
- source_dir.mkpath
- assert_match "Linking: #{source_dir}",
- cmd("linkapps", "--local", "HOME" => home_dir)
- end
-
- def test_unlinkapps
- home_dir = Pathname.new(mktmpdir)
- apps_dir = home_dir/"Applications"
- apps_dir.mkpath
-
- setup_test_formula "testball"
-
- source_app = (HOMEBREW_CELLAR/"testball/0.1/TestBall.app")
- source_app.mkpath
-
- FileUtils.ln_s source_app, "#{apps_dir}/TestBall.app"
-
- assert_match "Unlinking: #{apps_dir}/TestBall.app",
- cmd("unlinkapps", "--local", "HOME" => home_dir)
- end
-
- def test_pin_unpin
- setup_test_formula "testball"
- (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
-
- cmd("pin", "testball")
- cmd("upgrade")
- refute((HOMEBREW_CELLAR/"testball/0.1").directory?,
- "The latest version directory should NOT be created")
-
- cmd("unpin", "testball")
- cmd("upgrade")
- assert((HOMEBREW_CELLAR/"testball/0.1").directory?,
- "The latest version directory should be created")
- end
-
- def test_reinstall
- setup_test_formula "testball"
-
- cmd("install", "testball", "--with-foo")
- foo_dir = HOMEBREW_CELLAR/"testball/0.1/foo"
- assert foo_dir.exist?
- foo_dir.rmtree
- assert_match "Reinstalling testball with --with-foo",
- cmd("reinstall", "testball")
- assert foo_dir.exist?
- end
-
- def test_reinstall_pinned
- setup_test_formula "testball"
-
- HOMEBREW_CELLAR.join("testball/0.1").mkpath
- HOMEBREW_PINNED_KEGS.mkpath
- FileUtils.ln_s HOMEBREW_CELLAR.join("testball/0.1"), HOMEBREW_PINNED_KEGS/"testball"
-
- assert_match "testball is pinned. You must unpin it to reinstall.", cmd("reinstall", "testball")
-
- HOMEBREW_PINNED_KEGS.rmtree
- end
-
- def test_home
- setup_test_formula "testball"
-
- assert_equal HOMEBREW_WWW,
- cmd("home", "HOMEBREW_BROWSER" => "echo")
- assert_equal Formula["testball"].homepage,
- cmd("home", "testball", "HOMEBREW_BROWSER" => "echo")
- end
-
- def test_list
- formulae = %w[bar foo qux]
- formulae.each do |f|
- (HOMEBREW_CELLAR/"#{f}/1.0/somedir").mkpath
- end
-
- assert_equal formulae.join("\n"),
- cmd("list")
- end
-
- def test_create
- url = "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
- cmd("create", url, "HOMEBREW_EDITOR" => "/bin/cat")
-
- formula_file = CoreTap.new.formula_dir/"testball.rb"
- assert formula_file.exist?, "The formula source should have been created"
- assert_match %(sha256 "#{TESTBALL_SHA256}"), formula_file.read
- end
-
- def test_fetch
- setup_test_formula "testball"
-
- cmd("fetch", "testball")
- assert((HOMEBREW_CACHE/"testball-0.1.tbz").exist?,
- "The tarball should have been cached")
- end
-
- def test_deps
- setup_test_formula "foo"
- setup_test_formula "bar"
- setup_test_formula "baz", <<-EOS.undent
- url "https://example.com/baz-1.0"
- depends_on "bar"
- EOS
-
- assert_equal "", cmd("deps", "foo")
- assert_equal "foo", cmd("deps", "bar")
- assert_equal "bar\nfoo", cmd("deps", "baz")
- end
-
- def test_uses
- setup_test_formula "foo"
- setup_test_formula "bar"
- setup_test_formula "baz", <<-EOS.undent
- url "https://example.com/baz-1.0"
- depends_on "bar"
- EOS
-
- assert_equal "", cmd("uses", "baz")
- assert_equal "baz", cmd("uses", "bar")
- assert_equal "bar\nbaz", cmd("uses", "--recursive", "foo")
- end
-
- def test_log
- FileUtils.cd HOMEBREW_REPOSITORY do
- shutup do
- system "git", "init"
- system "git", "commit", "--allow-empty", "-m", "This is a test commit"
- end
- end
- assert_match "This is a test commit", cmd("log")
- end
-
- def test_log_formula
- core_tap = CoreTap.new
- setup_test_formula "testball"
-
- core_tap.path.cd do
- shutup do
- system "git", "init"
- system "git", "add", "--all"
- system "git", "commit", "-m", "This is a test commit for Testball"
- end
- end
-
- core_tap_url = "file://#{core_tap.path}"
- shallow_tap = Tap.fetch("homebrew", "shallow")
- shutup do
- system "git", "clone", "--depth=1", core_tap_url, shallow_tap.path
- end
-
- assert_match "This is a test commit for Testball",
- cmd("log", "#{shallow_tap}/testball")
- assert_predicate shallow_tap.path/".git/shallow", :exist?,
- "A shallow clone should have been created."
- end
-
- def test_leaves
- setup_test_formula "foo"
- setup_test_formula "bar"
- assert_equal "", cmd("leaves")
-
- (HOMEBREW_CELLAR/"foo/0.1/somedir").mkpath
- assert_equal "foo", cmd("leaves")
-
- (HOMEBREW_CELLAR/"bar/0.1/somedir").mkpath
- assert_equal "bar", cmd("leaves")
- end
-
- def test_prune
- share = (HOMEBREW_PREFIX/"share")
-
- (share/"pruneable/directory/here").mkpath
- (share/"notpruneable/file").write "I'm here"
- FileUtils.ln_s "/i/dont/exist/no/really/i/dont", share/"pruneable_symlink"
-
- assert_match %r{Would remove \(empty directory\): .*/pruneable/directory/here},
- cmd("prune", "--dry-run")
- assert_match "Pruned 1 symbolic links and 3 directories",
- cmd("prune")
- refute((share/"pruneable").directory?)
- assert((share/"notpruneable").directory?)
- refute((share/"pruneable_symlink").symlink?)
-
- assert_match "Nothing pruned", cmd("prune", "--verbose")
- end
-
- def test_custom_command
- mktmpdir do |path|
- cmd = "int-test-#{rand}"
- file = "#{path}/brew-#{cmd}"
-
- File.open(file, "w") { |f| f.write "#!/bin/sh\necho 'I am #{cmd}'\n" }
- FileUtils.chmod 0777, file
-
- assert_match "I am #{cmd}",
- cmd(cmd, "PATH" => "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}")
- end
- end
-
- def test_search
- setup_test_formula "testball"
- desc_cache = HOMEBREW_CACHE/"desc_cache.json"
- refute_predicate desc_cache, :exist?, "Cached file should not exist"
-
- assert_match "testball", cmd("search")
- assert_match "testball", cmd("search", "testball")
- assert_match "testball", cmd("search", "homebrew/homebrew-core/testball")
- assert_match "testball", cmd("search", "--desc", "Some test")
-
- flags = {
- "macports" => "https://www.macports.org/ports.php?by=name&substr=testball",
- "fink" => "http://pdb.finkproject.org/pdb/browse.php?summary=testball",
- "debian" => "https://packages.debian.org/search?keywords=testball&searchon=names&suite=all&section=all",
- "opensuse" => "https://software.opensuse.org/search?q=testball",
- "fedora" => "https://admin.fedoraproject.org/pkgdb/packages/%2Atestball%2A/",
- "ubuntu" => "http://packages.ubuntu.com/search?keywords=testball&searchon=names&suite=all&section=all",
- }
-
- flags.each do |flag, url|
- assert_equal url, cmd("search", "--#{flag}",
- "testball", "HOMEBREW_BROWSER" => "echo")
- end
-
- assert_predicate desc_cache, :exist?, "Cached file should exist"
- end
-
- def test_bundle
- needs_test_cmd_taps
- setup_remote_tap("homebrew/bundle")
- 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
- end
-
- def test_cask
- needs_test_cmd_taps
- needs_macos
- setup_remote_tap("caskroom/cask")
- cmd("cask", "list")
- end
-
- def test_services
- needs_test_cmd_taps
- needs_macos
- setup_remote_tap("homebrew/services")
- assert_equal "Warning: No services available to control with `brew services`",
- cmd("services", "list")
- end
-
- def test_link
- assert_match "This command requires a keg argument", cmd_fail("link")
-
- setup_test_formula "testball1"
- cmd("install", "testball1")
- cmd("link", "testball1")
-
- cmd("unlink", "testball1")
- assert_match "Would link", cmd("link", "--dry-run", "testball1")
- assert_match "Would remove",
- cmd("link", "--dry-run", "--overwrite", "testball1")
- assert_match "Linking", cmd("link", "testball1")
-
- setup_test_formula "testball2", <<-EOS.undent
- keg_only "just because"
- EOS
- cmd("install", "testball2")
- assert_match "testball2 is keg-only", cmd("link", "testball2")
- end
-
- def test_unlink
- setup_test_formula "testball"
-
- cmd("install", "testball")
- assert_match "Would remove", cmd("unlink", "--dry-run", "testball")
- end
-
- def test_irb
- assert_match "'v8'.f # => instance of the v8 formula",
- cmd("irb", "--examples")
-
- setup_test_formula "testball"
-
- irb_test = HOMEBREW_TEMP/"irb-test.rb"
- irb_test.write <<-EOS.undent
- "testball".f
- :testball.f
- exit
- EOS
-
- assert_match "Interactive Homebrew Shell", cmd("irb", irb_test)
- end
-
- def test_pull_offline
- assert_match "You meant `git pull --rebase`.", cmd_fail("pull", "--rebase")
- assert_match "This command requires at least one argument", cmd_fail("pull")
- assert_match "Not a GitHub pull request or commit",
- cmd_fail("pull", "0")
- end
-
- def test_pull
- skip "Requires network connection" if ENV["HOMEBREW_NO_GITHUB_API"]
-
- core_tap = CoreTap.new
- core_tap.path.cd do
- shutup do
- system "git", "init"
- system "git", "checkout", "-b", "new-branch"
- end
- end
-
- assert_match "Testing URLs require `--bottle`!",
- cmd_fail("pull", "https://bot.brew.sh/job/Homebrew\%20Testing/1028/")
- assert_match "Current branch is new-branch",
- cmd_fail("pull", "1")
- assert_match "No changed formulae found to bump",
- cmd_fail("pull", "--bump", "8")
- assert_match "Can only bump one changed formula",
- cmd_fail("pull", "--bump",
- "https://api.github.com/repos/Homebrew/homebrew-core/pulls/122")
- assert_match "Patch failed to apply",
- cmd_fail("pull", "https://github.com/Homebrew/homebrew-core/pull/1")
- end
-
- def test_analytics
- HOMEBREW_REPOSITORY.cd do
- shutup do
- system "git", "init"
- end
- end
-
- assert_match "Analytics is disabled (by HOMEBREW_NO_ANALYTICS)",
- cmd("analytics", "HOMEBREW_NO_ANALYTICS" => "1")
-
- cmd("analytics", "off")
- assert_match "Analytics is disabled",
- cmd("analytics", "HOMEBREW_NO_ANALYTICS" => nil)
-
- cmd("analytics", "on")
- assert_match "Analytics is enabled", cmd("analytics",
- "HOMEBREW_NO_ANALYTICS" => nil)
-
- assert_match "Invalid usage", cmd_fail("analytics", "on", "off")
- assert_match "Invalid usage", cmd_fail("analytics", "testball")
- cmd("analytics", "regenerate-uuid")
- end
-
- def test_migrate
- setup_test_formula "testball1"
- setup_test_formula "testball2"
- assert_match "Invalid usage", cmd_fail("migrate")
- assert_match "No available formula with the name \"testball\"",
- cmd_fail("migrate", "testball")
- assert_match "testball1 doesn't replace any formula",
- cmd_fail("migrate", "testball1")
-
- install_and_rename_coretap_formula "testball1", "testball2"
- assert_match "Migrating testball1 to testball2", cmd("migrate", "testball1")
- (HOMEBREW_CELLAR/"testball1").unlink
- assert_match "Error: No such keg", cmd_fail("migrate", "testball1")
- end
-
- def test_switch
- assert_match "Usage: brew switch <name> <version>", cmd_fail("switch")
- assert_match "testball not found", cmd_fail("switch", "testball", "0.1")
-
- setup_test_formula "testball", <<-EOS.undent
- keg_only "just because"
- EOS
-
- cmd("install", "testball")
- testball_rack = HOMEBREW_CELLAR/"testball"
- FileUtils.cp_r testball_rack/"0.1", testball_rack/"0.2"
-
- cmd("switch", "testball", "0.2")
- assert_match "testball does not have a version \"0.3\"",
- cmd_fail("switch", "testball", "0.3")
- end
-
- def test_test_formula
- assert_match "This command requires a formula argument", cmd_fail("test")
- assert_match "Testing requires the latest version of testball",
- cmd_fail("test", testball)
-
- cmd("install", testball)
- assert_match "testball defines no test", cmd_fail("test", testball)
-
- setup_test_formula "testball_copy", <<-EOS.undent
- head "https://github.com/example/testball2.git"
-
- devel do
- url "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
- sha256 "#{TESTBALL_SHA256}"
- end
-
- keg_only "just because"
-
- test do
- end
- EOS
-
- cmd("install", "testball_copy")
- assert_match "Testing testball_copy", cmd("test", "--HEAD", "testball_copy")
- assert_match "Testing testball_copy", cmd("test", "--devel", "testball_copy")
- end
-end
diff --git a/Library/Homebrew/test/test_integration_cmds_analytics.rb b/Library/Homebrew/test/test_integration_cmds_analytics.rb
new file mode 100644
index 000000000..17afe7fe8
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_analytics.rb
@@ -0,0 +1,26 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestAnalytics < IntegrationCommandTests
+ def test_analytics
+ HOMEBREW_REPOSITORY.cd do
+ shutup do
+ system "git", "init"
+ end
+ end
+
+ assert_match "Analytics is disabled (by HOMEBREW_NO_ANALYTICS)",
+ cmd("analytics", "HOMEBREW_NO_ANALYTICS" => "1")
+
+ cmd("analytics", "off")
+ assert_match "Analytics is disabled",
+ cmd("analytics", "HOMEBREW_NO_ANALYTICS" => nil)
+
+ cmd("analytics", "on")
+ assert_match "Analytics is enabled", cmd("analytics",
+ "HOMEBREW_NO_ANALYTICS" => nil)
+
+ assert_match "Invalid usage", cmd_fail("analytics", "on", "off")
+ assert_match "Invalid usage", cmd_fail("analytics", "testball")
+ cmd("analytics", "regenerate-uuid")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_bottle.rb b/Library/Homebrew/test/test_integration_cmds_bottle.rb
new file mode 100644
index 000000000..b6d9de714
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_bottle.rb
@@ -0,0 +1,21 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestBottle < IntegrationCommandTests
+ def test_bottle
+ cmd("install", "--build-bottle", testball)
+ assert_match "Formula not from core or any taps",
+ cmd_fail("bottle", "--no-rebuild", testball)
+
+ setup_test_formula "testball"
+
+ # `brew bottle` should not fail with dead symlink
+ # https://github.com/Homebrew/legacy-homebrew/issues/49007
+ (HOMEBREW_CELLAR/"testball/0.1").cd do
+ FileUtils.ln_s "not-exist", "symlink"
+ end
+ assert_match(/testball-0\.1.*\.bottle\.tar\.gz/,
+ cmd_output("bottle", "--no-rebuild", "testball"))
+ ensure
+ FileUtils.rm_f Dir["testball-0.1*.bottle.tar.gz"]
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_bundle.rb b/Library/Homebrew/test/test_integration_cmds_bundle.rb
new file mode 100644
index 000000000..726bd4d10
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_bundle.rb
@@ -0,0 +1,22 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestBundle < IntegrationCommandTests
+ def test_bundle
+ needs_test_cmd_taps
+ setup_remote_tap("homebrew/bundle")
+ 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
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cache.rb b/Library/Homebrew/test/test_integration_cmds_cache.rb
new file mode 100644
index 000000000..716724f4f
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cache.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCache < IntegrationCommandTests
+ def test_cache
+ assert_equal HOMEBREW_CACHE.to_s,
+ cmd("--cache")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cache_formula.rb b/Library/Homebrew/test/test_integration_cmds_cache_formula.rb
new file mode 100644
index 000000000..82c3421b2
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cache_formula.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCacheFormula < IntegrationCommandTests
+ def test_cache_formula
+ assert_match %r{#{HOMEBREW_CACHE}/testball-},
+ cmd("--cache", testball)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cask.rb b/Library/Homebrew/test/test_integration_cmds_cask.rb
new file mode 100644
index 000000000..e97bb868c
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cask.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCask < IntegrationCommandTests
+ def test_cask
+ needs_test_cmd_taps
+ needs_macos
+ setup_remote_tap("caskroom/cask")
+ cmd("cask", "list")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cat.rb b/Library/Homebrew/test/test_integration_cmds_cat.rb
new file mode 100644
index 000000000..ad4ef199b
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cat.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCat < IntegrationCommandTests
+ def test_cat
+ formula_file = setup_test_formula "testball"
+ assert_equal formula_file.read.chomp, cmd("cat", "testball")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cellar.rb b/Library/Homebrew/test/test_integration_cmds_cellar.rb
new file mode 100644
index 000000000..3adb8fcca
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cellar.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCellar < IntegrationCommandTests
+ def test_cellar
+ assert_equal HOMEBREW_CELLAR.to_s,
+ cmd("--cellar")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cellar_formula.rb b/Library/Homebrew/test/test_integration_cmds_cellar_formula.rb
new file mode 100644
index 000000000..356c79d6d
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cellar_formula.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCellarFormula < IntegrationCommandTests
+ def test_cellar_formula
+ assert_match "#{HOMEBREW_CELLAR}/testball",
+ cmd("--cellar", testball)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_cleanup.rb b/Library/Homebrew/test/test_integration_cmds_cleanup.rb
new file mode 100644
index 000000000..fe9ce9952
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_cleanup.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCleanup < IntegrationCommandTests
+ def test_cleanup
+ (HOMEBREW_CACHE/"test").write "test"
+ assert_match "#{HOMEBREW_CACHE}/test", cmd("cleanup", "--prune=all")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_command.rb b/Library/Homebrew/test/test_integration_cmds_command.rb
new file mode 100644
index 000000000..33cfdc8ed
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_command.rb
@@ -0,0 +1,11 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCommand < IntegrationCommandTests
+ def test_command
+ assert_equal "#{HOMEBREW_LIBRARY_PATH}/cmd/info.rb",
+ cmd("command", "info")
+
+ assert_match "Unknown command",
+ cmd_fail("command", "I-don't-exist")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_commands.rb b/Library/Homebrew/test/test_integration_cmds_commands.rb
new file mode 100644
index 000000000..47c4e25ca
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_commands.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCommands < IntegrationCommandTests
+ def test_commands
+ assert_match "Built-in commands",
+ cmd("commands")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_config.rb b/Library/Homebrew/test/test_integration_cmds_config.rb
new file mode 100644
index 000000000..f1cb5cb7e
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_config.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestConfig < IntegrationCommandTests
+ def test_config
+ assert_match "HOMEBREW_VERSION: #{HOMEBREW_VERSION}",
+ cmd("config")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_create.rb b/Library/Homebrew/test/test_integration_cmds_create.rb
new file mode 100644
index 000000000..20765f9c8
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_create.rb
@@ -0,0 +1,12 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCreate < IntegrationCommandTests
+ def test_create
+ url = "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
+ cmd("create", url, "HOMEBREW_EDITOR" => "/bin/cat")
+
+ formula_file = CoreTap.new.formula_dir/"testball.rb"
+ assert formula_file.exist?, "The formula source should have been created"
+ assert_match %(sha256 "#{TESTBALL_SHA256}"), formula_file.read
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_custom_command.rb b/Library/Homebrew/test/test_integration_cmds_custom_command.rb
new file mode 100644
index 000000000..3ea2e6360
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_custom_command.rb
@@ -0,0 +1,16 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestCustomCommand < IntegrationCommandTests
+ def test_custom_command
+ mktmpdir do |path|
+ cmd = "int-test-#{rand}"
+ file = "#{path}/brew-#{cmd}"
+
+ File.open(file, "w") { |f| f.write "#!/bin/sh\necho 'I am #{cmd}'\n" }
+ FileUtils.chmod 0777, file
+
+ assert_match "I am #{cmd}",
+ cmd(cmd, "PATH" => "#{path}#{File::PATH_SEPARATOR}#{ENV["PATH"]}")
+ end
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_deps.rb b/Library/Homebrew/test/test_integration_cmds_deps.rb
new file mode 100644
index 000000000..10a654b60
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_deps.rb
@@ -0,0 +1,16 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestDeps < IntegrationCommandTests
+ def test_deps
+ setup_test_formula "foo"
+ setup_test_formula "bar"
+ setup_test_formula "baz", <<-EOS.undent
+ url "https://example.com/baz-1.0"
+ depends_on "bar"
+ EOS
+
+ assert_equal "", cmd("deps", "foo")
+ assert_equal "foo", cmd("deps", "bar")
+ assert_equal "bar\nfoo", cmd("deps", "baz")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_desc.rb b/Library/Homebrew/test/test_integration_cmds_desc.rb
new file mode 100644
index 000000000..e93b71578
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_desc.rb
@@ -0,0 +1,17 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestDesc < IntegrationCommandTests
+ def test_desc
+ setup_test_formula "testball"
+
+ assert_equal "testball: Some test", cmd("desc", "testball")
+ assert_match "Pick one, and only one", cmd_fail("desc", "--search", "--name")
+ assert_match "You must provide a search term", cmd_fail("desc", "--search")
+
+ desc_cache = HOMEBREW_CACHE/"desc_cache.json"
+ refute_predicate desc_cache, :exist?, "Cached file should not exist"
+
+ cmd("desc", "--description", "testball")
+ assert_predicate desc_cache, :exist?, "Cached file should not exist"
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_doctor.rb b/Library/Homebrew/test/test_integration_cmds_doctor.rb
new file mode 100644
index 000000000..e3edf1b0f
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_doctor.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestDoctor < IntegrationCommandTests
+ def test_doctor
+ assert_match "This is an integration test",
+ cmd_fail("doctor", "check_integration_test")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_edit.rb b/Library/Homebrew/test/test_integration_cmds_edit.rb
new file mode 100644
index 000000000..b47e0d4f9
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_edit.rb
@@ -0,0 +1,11 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEdit < IntegrationCommandTests
+ def test_edit
+ (HOMEBREW_REPOSITORY/".git").mkpath
+ setup_test_formula "testball"
+
+ assert_match "# something here",
+ cmd("edit", "testball", "HOMEBREW_EDITOR" => "/bin/cat")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_env.rb b/Library/Homebrew/test/test_integration_cmds_env.rb
new file mode 100644
index 000000000..9f6fc7cbb
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_env.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEnv < IntegrationCommandTests
+ def test_env
+ assert_match(/CMAKE_PREFIX_PATH="#{Regexp.escape(HOMEBREW_PREFIX)}[:"]/,
+ cmd("--env"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_env_bash.rb b/Library/Homebrew/test/test_integration_cmds_env_bash.rb
new file mode 100644
index 000000000..71f807199
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_env_bash.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEnvBash < IntegrationCommandTests
+ def test_env_bash
+ assert_match(/export CMAKE_PREFIX_PATH="#{Regexp.quote(HOMEBREW_PREFIX.to_s)}"/,
+ cmd("--env", "--shell=bash"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_env_csh.rb b/Library/Homebrew/test/test_integration_cmds_env_csh.rb
new file mode 100644
index 000000000..19a6ed7d2
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_env_csh.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEnvCsh < IntegrationCommandTests
+ def test_env_csh
+ assert_match(/setenv CMAKE_PREFIX_PATH #{Regexp.quote(HOMEBREW_PREFIX.to_s)};/,
+ cmd("--env", "--shell=tcsh"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_env_fish.rb b/Library/Homebrew/test/test_integration_cmds_env_fish.rb
new file mode 100644
index 000000000..9c4bf0e16
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_env_fish.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEnvFish < IntegrationCommandTests
+ def test_env_fish
+ assert_match(/set [-]gx CMAKE_PREFIX_PATH "#{Regexp.quote(HOMEBREW_PREFIX.to_s)}"/,
+ cmd("--env", "--shell=fish"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_env_plain.rb b/Library/Homebrew/test/test_integration_cmds_env_plain.rb
new file mode 100644
index 000000000..a21ad7f03
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_env_plain.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestEnvPlain < IntegrationCommandTests
+ def test_env_plain
+ assert_match(/CMAKE_PREFIX_PATH: #{Regexp.quote(HOMEBREW_PREFIX)}/,
+ cmd("--env", "--plain"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_fetch.rb b/Library/Homebrew/test/test_integration_cmds_fetch.rb
new file mode 100644
index 000000000..9c060a353
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_fetch.rb
@@ -0,0 +1,11 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestFetch < IntegrationCommandTests
+ def test_fetch
+ setup_test_formula "testball"
+
+ cmd("fetch", "testball")
+ assert((HOMEBREW_CACHE/"testball-0.1.tbz").exist?,
+ "The tarball should have been cached")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_help.rb b/Library/Homebrew/test/test_integration_cmds_help.rb
new file mode 100644
index 000000000..44fd774c9
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_help.rb
@@ -0,0 +1,21 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestHelp < IntegrationCommandTests
+ def test_help
+ assert_match "Example usage:\n",
+ cmd_fail # Generic help (empty argument list).
+ assert_match "Unknown command: command-that-does-not-exist",
+ cmd_fail("help", "command-that-does-not-exist")
+ assert_match(/^brew cat /,
+ cmd_fail("cat")) # Missing formula argument triggers help.
+
+ assert_match "Example usage:\n",
+ cmd("help") # Generic help.
+ assert_match(/^brew cat /,
+ cmd("help", "cat")) # Internal command (documented, Ruby).
+ assert_match(/^brew update /,
+ cmd("help", "update")) # Internal command (documented, Shell).
+ assert_match(/^brew update-test /,
+ cmd("help", "update-test")) # Internal developer command (documented, Ruby).
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_home.rb b/Library/Homebrew/test/test_integration_cmds_home.rb
new file mode 100644
index 000000000..ef21e85ca
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_home.rb
@@ -0,0 +1,12 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestHome < IntegrationCommandTests
+ def test_home
+ setup_test_formula "testball"
+
+ assert_equal HOMEBREW_WWW,
+ cmd("home", "HOMEBREW_BROWSER" => "echo")
+ assert_equal Formula["testball"].homepage,
+ cmd("home", "testball", "HOMEBREW_BROWSER" => "echo")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_info.rb b/Library/Homebrew/test/test_integration_cmds_info.rb
new file mode 100644
index 000000000..acb272d15
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_info.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestInfo < IntegrationCommandTests
+ def test_info
+ setup_test_formula "testball"
+
+ assert_match "testball: stable 0.1",
+ cmd("info", "testball")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_install.rb b/Library/Homebrew/test/test_integration_cmds_install.rb
new file mode 100644
index 000000000..7ce4a3484
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_install.rb
@@ -0,0 +1,24 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestInstall < IntegrationCommandTests
+ def test_install
+ setup_test_formula "testball1"
+ assert_match "Specify `--HEAD`", cmd_fail("install", "testball1", "--head")
+ assert_match "No head is defined", cmd_fail("install", "testball1", "--HEAD")
+ assert_match "No devel block", cmd_fail("install", "testball1", "--devel")
+ assert_match "#{HOMEBREW_CELLAR}/testball1/0.1", cmd("install", "testball1")
+ assert_match "testball1-0.1 already installed", cmd("install", "testball1")
+ assert_match "MacRuby is not packaged", cmd_fail("install", "macruby")
+ assert_match "No available formula", cmd_fail("install", "formula")
+ assert_match "This similarly named formula was found",
+ cmd_fail("install", "testball")
+
+ setup_test_formula "testball2"
+ assert_match "These similarly named formulae were found",
+ cmd_fail("install", "testball")
+
+ install_and_rename_coretap_formula "testball1", "testball2"
+ assert_match "testball1 already installed, it's just not migrated",
+ cmd("install", "testball2")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_irb.rb b/Library/Homebrew/test/test_integration_cmds_irb.rb
new file mode 100644
index 000000000..338b32fd9
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_irb.rb
@@ -0,0 +1,19 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestIrb < IntegrationCommandTests
+ def test_irb
+ assert_match "'v8'.f # => instance of the v8 formula",
+ cmd("irb", "--examples")
+
+ setup_test_formula "testball"
+
+ irb_test = HOMEBREW_TEMP/"irb-test.rb"
+ irb_test.write <<-EOS.undent
+ "testball".f
+ :testball.f
+ exit
+ EOS
+
+ assert_match "Interactive Homebrew Shell", cmd("irb", irb_test)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_leaves.rb b/Library/Homebrew/test/test_integration_cmds_leaves.rb
new file mode 100644
index 000000000..2ea7779d6
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_leaves.rb
@@ -0,0 +1,15 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestLeaves < IntegrationCommandTests
+ def test_leaves
+ setup_test_formula "foo"
+ setup_test_formula "bar"
+ assert_equal "", cmd("leaves")
+
+ (HOMEBREW_CELLAR/"foo/0.1/somedir").mkpath
+ assert_equal "foo", cmd("leaves")
+
+ (HOMEBREW_CELLAR/"bar/0.1/somedir").mkpath
+ assert_equal "bar", cmd("leaves")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_link.rb b/Library/Homebrew/test/test_integration_cmds_link.rb
new file mode 100644
index 000000000..8c4255476
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_link.rb
@@ -0,0 +1,23 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestLink < IntegrationCommandTests
+ def test_link
+ assert_match "This command requires a keg argument", cmd_fail("link")
+
+ setup_test_formula "testball1"
+ cmd("install", "testball1")
+ cmd("link", "testball1")
+
+ cmd("unlink", "testball1")
+ assert_match "Would link", cmd("link", "--dry-run", "testball1")
+ assert_match "Would remove",
+ cmd("link", "--dry-run", "--overwrite", "testball1")
+ assert_match "Linking", cmd("link", "testball1")
+
+ setup_test_formula "testball2", <<-EOS.undent
+ keg_only "just because"
+ EOS
+ cmd("install", "testball2")
+ assert_match "testball2 is keg-only", cmd("link", "testball2")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_linkapps.rb b/Library/Homebrew/test/test_integration_cmds_linkapps.rb
new file mode 100644
index 000000000..9afb84b77
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_linkapps.rb
@@ -0,0 +1,15 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestLinkapps < IntegrationCommandTests
+ def test_linkapps
+ home_dir = Pathname.new(mktmpdir)
+ (home_dir/"Applications").mkpath
+
+ setup_test_formula "testball"
+
+ source_dir = HOMEBREW_CELLAR/"testball/0.1/TestBall.app"
+ source_dir.mkpath
+ assert_match "Linking: #{source_dir}",
+ cmd("linkapps", "--local", "HOME" => home_dir)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_list.rb b/Library/Homebrew/test/test_integration_cmds_list.rb
new file mode 100644
index 000000000..917366905
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_list.rb
@@ -0,0 +1,13 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestList < IntegrationCommandTests
+ def test_list
+ formulae = %w[bar foo qux]
+ formulae.each do |f|
+ (HOMEBREW_CELLAR/"#{f}/1.0/somedir").mkpath
+ end
+
+ assert_equal formulae.join("\n"),
+ cmd("list")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_log.rb b/Library/Homebrew/test/test_integration_cmds_log.rb
new file mode 100644
index 000000000..1799d777d
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_log.rb
@@ -0,0 +1,13 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestLog < IntegrationCommandTests
+ def test_log
+ FileUtils.cd HOMEBREW_REPOSITORY do
+ shutup do
+ system "git", "init"
+ system "git", "commit", "--allow-empty", "-m", "This is a test commit"
+ end
+ end
+ assert_match "This is a test commit", cmd("log")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_log_formula.rb b/Library/Homebrew/test/test_integration_cmds_log_formula.rb
new file mode 100644
index 000000000..2f1f44d00
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_log_formula.rb
@@ -0,0 +1,27 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestLogFormula < IntegrationCommandTests
+ def test_log_formula
+ core_tap = CoreTap.new
+ setup_test_formula "testball"
+
+ core_tap.path.cd do
+ shutup do
+ system "git", "init"
+ system "git", "add", "--all"
+ system "git", "commit", "-m", "This is a test commit for Testball"
+ end
+ end
+
+ core_tap_url = "file://#{core_tap.path}"
+ shallow_tap = Tap.fetch("homebrew", "shallow")
+ shutup do
+ system "git", "clone", "--depth=1", core_tap_url, shallow_tap.path
+ end
+
+ assert_match "This is a test commit for Testball",
+ cmd("log", "#{shallow_tap}/testball")
+ assert_predicate shallow_tap.path/".git/shallow", :exist?,
+ "A shallow clone should have been created."
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_migrate.rb b/Library/Homebrew/test/test_integration_cmds_migrate.rb
new file mode 100644
index 000000000..3918cbb3e
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_migrate.rb
@@ -0,0 +1,18 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestMigrate < IntegrationCommandTests
+ def test_migrate
+ setup_test_formula "testball1"
+ setup_test_formula "testball2"
+ assert_match "Invalid usage", cmd_fail("migrate")
+ assert_match "No available formula with the name \"testball\"",
+ cmd_fail("migrate", "testball")
+ assert_match "testball1 doesn't replace any formula",
+ cmd_fail("migrate", "testball1")
+
+ install_and_rename_coretap_formula "testball1", "testball2"
+ assert_match "Migrating testball1 to testball2", cmd("migrate", "testball1")
+ (HOMEBREW_CELLAR/"testball1").unlink
+ assert_match "Error: No such keg", cmd_fail("migrate", "testball1")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_missing.rb b/Library/Homebrew/test/test_integration_cmds_missing.rb
new file mode 100644
index 000000000..68c3a72a4
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_missing.rb
@@ -0,0 +1,11 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestMissing < IntegrationCommandTests
+ def test_missing
+ setup_test_formula "foo"
+ setup_test_formula "bar"
+
+ (HOMEBREW_CELLAR/"bar/1.0").mkpath
+ assert_match "foo", cmd("missing")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_options.rb b/Library/Homebrew/test/test_integration_cmds_options.rb
new file mode 100644
index 000000000..de527804c
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_options.rb
@@ -0,0 +1,12 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestOptions < IntegrationCommandTests
+ def test_options
+ setup_test_formula "testball", <<-EOS.undent
+ depends_on "bar" => :recommended
+ EOS
+
+ assert_equal "--with-foo\n\tBuild with foo\n--without-bar\n\tBuild without bar support",
+ cmd_output("options", "testball").chomp
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_outdated.rb b/Library/Homebrew/test/test_integration_cmds_outdated.rb
new file mode 100644
index 000000000..b42e7bc1a
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_outdated.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestOutdated < IntegrationCommandTests
+ def test_outdated
+ setup_test_formula "testball"
+ (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
+
+ assert_equal "testball", cmd("outdated")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_pin_unpin.rb b/Library/Homebrew/test/test_integration_cmds_pin_unpin.rb
new file mode 100644
index 000000000..828ca49c0
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_pin_unpin.rb
@@ -0,0 +1,18 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPinUnpin < IntegrationCommandTests
+ def test_pin_unpin
+ setup_test_formula "testball"
+ (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
+
+ cmd("pin", "testball")
+ cmd("upgrade")
+ refute((HOMEBREW_CELLAR/"testball/0.1").directory?,
+ "The latest version directory should NOT be created")
+
+ cmd("unpin", "testball")
+ cmd("upgrade")
+ assert((HOMEBREW_CELLAR/"testball/0.1").directory?,
+ "The latest version directory should be created")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_prefix.rb b/Library/Homebrew/test/test_integration_cmds_prefix.rb
new file mode 100644
index 000000000..80a71c5ec
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_prefix.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPrefix < IntegrationCommandTests
+ def test_prefix
+ assert_equal HOMEBREW_PREFIX.to_s,
+ cmd("--prefix")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_prefix_formula.rb b/Library/Homebrew/test/test_integration_cmds_prefix_formula.rb
new file mode 100644
index 000000000..a901309cf
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_prefix_formula.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPrefixFormula < IntegrationCommandTests
+ def test_prefix_formula
+ assert_match "#{HOMEBREW_CELLAR}/testball",
+ cmd("--prefix", testball)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_prune.rb b/Library/Homebrew/test/test_integration_cmds_prune.rb
new file mode 100644
index 000000000..6072c832e
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_prune.rb
@@ -0,0 +1,21 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPrune < IntegrationCommandTests
+ def test_prune
+ share = (HOMEBREW_PREFIX/"share")
+
+ (share/"pruneable/directory/here").mkpath
+ (share/"notpruneable/file").write "I'm here"
+ FileUtils.ln_s "/i/dont/exist/no/really/i/dont", share/"pruneable_symlink"
+
+ assert_match %r{Would remove \(empty directory\): .*/pruneable/directory/here},
+ cmd("prune", "--dry-run")
+ assert_match "Pruned 1 symbolic links and 3 directories",
+ cmd("prune")
+ refute((share/"pruneable").directory?)
+ assert((share/"notpruneable").directory?)
+ refute((share/"pruneable_symlink").symlink?)
+
+ assert_match "Nothing pruned", cmd("prune", "--verbose")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_pull.rb b/Library/Homebrew/test/test_integration_cmds_pull.rb
new file mode 100644
index 000000000..1cfb286a3
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_pull.rb
@@ -0,0 +1,27 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPull < IntegrationCommandTests
+ def test_pull
+ skip "Requires network connection" if ENV["HOMEBREW_NO_GITHUB_API"]
+
+ core_tap = CoreTap.new
+ core_tap.path.cd do
+ shutup do
+ system "git", "init"
+ system "git", "checkout", "-b", "new-branch"
+ end
+ end
+
+ assert_match "Testing URLs require `--bottle`!",
+ cmd_fail("pull", "https://bot.brew.sh/job/Homebrew\%20Testing/1028/")
+ assert_match "Current branch is new-branch",
+ cmd_fail("pull", "1")
+ assert_match "No changed formulae found to bump",
+ cmd_fail("pull", "--bump", "8")
+ assert_match "Can only bump one changed formula",
+ cmd_fail("pull", "--bump",
+ "https://api.github.com/repos/Homebrew/homebrew-core/pulls/122")
+ assert_match "Patch failed to apply",
+ cmd_fail("pull", "https://github.com/Homebrew/homebrew-core/pull/1")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_pull_offline.rb b/Library/Homebrew/test/test_integration_cmds_pull_offline.rb
new file mode 100644
index 000000000..bb6fd24cf
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_pull_offline.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestPullOffline < IntegrationCommandTests
+ def test_pull_offline
+ assert_match "You meant `git pull --rebase`.", cmd_fail("pull", "--rebase")
+ assert_match "This command requires at least one argument", cmd_fail("pull")
+ assert_match "Not a GitHub pull request or commit",
+ cmd_fail("pull", "0")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_readall.rb b/Library/Homebrew/test/test_integration_cmds_readall.rb
new file mode 100644
index 000000000..1a6ca4547
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_readall.rb
@@ -0,0 +1,12 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestReadall < IntegrationCommandTests
+ def test_readall
+ formula_file = setup_test_formula "testball"
+ alias_file = CoreTap.new.alias_dir/"foobar"
+ alias_file.parent.mkpath
+ FileUtils.ln_s formula_file, alias_file
+ cmd("readall", "--aliases", "--syntax")
+ cmd("readall", "homebrew/core")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_reinstall.rb b/Library/Homebrew/test/test_integration_cmds_reinstall.rb
new file mode 100644
index 000000000..ce1c0c919
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_reinstall.rb
@@ -0,0 +1,15 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestReinstall < IntegrationCommandTests
+ def test_reinstall
+ setup_test_formula "testball"
+
+ cmd("install", "testball", "--with-foo")
+ foo_dir = HOMEBREW_CELLAR/"testball/0.1/foo"
+ assert foo_dir.exist?
+ foo_dir.rmtree
+ assert_match "Reinstalling testball with --with-foo",
+ cmd("reinstall", "testball")
+ assert foo_dir.exist?
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_reinstall_pinned.rb b/Library/Homebrew/test/test_integration_cmds_reinstall_pinned.rb
new file mode 100644
index 000000000..dc4695e40
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_reinstall_pinned.rb
@@ -0,0 +1,15 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestReinstallPinned < IntegrationCommandTests
+ def test_reinstall_pinned
+ setup_test_formula "testball"
+
+ HOMEBREW_CELLAR.join("testball/0.1").mkpath
+ HOMEBREW_PINNED_KEGS.mkpath
+ FileUtils.ln_s HOMEBREW_CELLAR.join("testball/0.1"), HOMEBREW_PINNED_KEGS/"testball"
+
+ assert_match "testball is pinned. You must unpin it to reinstall.", cmd("reinstall", "testball")
+
+ HOMEBREW_PINNED_KEGS.rmtree
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_repository.rb b/Library/Homebrew/test/test_integration_cmds_repository.rb
new file mode 100644
index 000000000..a90dc1814
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_repository.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestRepository < IntegrationCommandTests
+ def test_repository
+ assert_match HOMEBREW_REPOSITORY.to_s,
+ cmd("--repository")
+ assert_match "#{HOMEBREW_LIBRARY}/Taps/foo/homebrew-bar",
+ cmd("--repository", "foo/bar")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_search.rb b/Library/Homebrew/test/test_integration_cmds_search.rb
new file mode 100644
index 000000000..f85d1d67e
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_search.rb
@@ -0,0 +1,30 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestSearch < IntegrationCommandTests
+ def test_search
+ setup_test_formula "testball"
+ desc_cache = HOMEBREW_CACHE/"desc_cache.json"
+ refute_predicate desc_cache, :exist?, "Cached file should not exist"
+
+ assert_match "testball", cmd("search")
+ assert_match "testball", cmd("search", "testball")
+ assert_match "testball", cmd("search", "homebrew/homebrew-core/testball")
+ assert_match "testball", cmd("search", "--desc", "Some test")
+
+ flags = {
+ "macports" => "https://www.macports.org/ports.php?by=name&substr=testball",
+ "fink" => "http://pdb.finkproject.org/pdb/browse.php?summary=testball",
+ "debian" => "https://packages.debian.org/search?keywords=testball&searchon=names&suite=all&section=all",
+ "opensuse" => "https://software.opensuse.org/search?q=testball",
+ "fedora" => "https://admin.fedoraproject.org/pkgdb/packages/%2Atestball%2A/",
+ "ubuntu" => "http://packages.ubuntu.com/search?keywords=testball&searchon=names&suite=all&section=all",
+ }
+
+ flags.each do |flag, url|
+ assert_equal url, cmd("search", "--#{flag}",
+ "testball", "HOMEBREW_BROWSER" => "echo")
+ end
+
+ assert_predicate desc_cache, :exist?, "Cached file should exist"
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_services.rb b/Library/Homebrew/test/test_integration_cmds_services.rb
new file mode 100644
index 000000000..043b5b0d6
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_services.rb
@@ -0,0 +1,11 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestServices < IntegrationCommandTests
+ def test_services
+ needs_test_cmd_taps
+ needs_macos
+ setup_remote_tap("homebrew/services")
+ assert_equal "Warning: No services available to control with `brew services`",
+ cmd("services", "list")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_sh.rb b/Library/Homebrew/test/test_integration_cmds_sh.rb
new file mode 100644
index 000000000..be9e119c5
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_sh.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestSh < IntegrationCommandTests
+ def test_sh
+ assert_match "Your shell has been configured",
+ cmd("sh", "SHELL" => which("true"))
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_switch.rb b/Library/Homebrew/test/test_integration_cmds_switch.rb
new file mode 100644
index 000000000..50b636d14
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_switch.rb
@@ -0,0 +1,20 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestSwitch < IntegrationCommandTests
+ def test_switch
+ assert_match "Usage: brew switch <name> <version>", cmd_fail("switch")
+ assert_match "testball not found", cmd_fail("switch", "testball", "0.1")
+
+ setup_test_formula "testball", <<-EOS.undent
+ keg_only "just because"
+ EOS
+
+ cmd("install", "testball")
+ testball_rack = HOMEBREW_CELLAR/"testball"
+ FileUtils.cp_r testball_rack/"0.1", testball_rack/"0.2"
+
+ cmd("switch", "testball", "0.2")
+ assert_match "testball does not have a version \"0.3\"",
+ cmd_fail("switch", "testball", "0.3")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_tap.rb b/Library/Homebrew/test/test_integration_cmds_tap.rb
new file mode 100644
index 000000000..22cfd8e93
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_tap.rb
@@ -0,0 +1,30 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestTap < IntegrationCommandTests
+ def test_tap
+ path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
+ path.mkpath
+ path.cd do
+ shutup do
+ system "git", "init"
+ system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-foo"
+ FileUtils.touch "readme"
+ system "git", "add", "--all"
+ system "git", "commit", "-m", "init"
+ end
+ end
+
+ assert_match "homebrew/foo", cmd("tap")
+ assert_match "homebrew/versions", cmd("tap", "--list-official")
+ assert_match "2 taps", cmd("tap-info")
+ assert_match "https://github.com/Homebrew/homebrew-foo", cmd("tap-info", "homebrew/foo")
+ assert_match "https://github.com/Homebrew/homebrew-foo", cmd("tap-info", "--json=v1", "--installed")
+ assert_match "Pinned homebrew/foo", cmd("tap-pin", "homebrew/foo")
+ assert_match "homebrew/foo", cmd("tap", "--list-pinned")
+ assert_match "Unpinned homebrew/foo", cmd("tap-unpin", "homebrew/foo")
+ assert_match "Tapped", cmd("tap", "homebrew/bar", path/".git")
+ assert_match "Untapped", cmd("untap", "homebrew/bar")
+ assert_equal "", cmd("tap", "homebrew/bar", path/".git", "-q", "--full")
+ assert_match "Untapped", cmd("untap", "homebrew/bar")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_tap_readme.rb b/Library/Homebrew/test/test_integration_cmds_tap_readme.rb
new file mode 100644
index 000000000..c1f53c42d
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_tap_readme.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestTapReadme < IntegrationCommandTests
+ def test_tap_readme
+ assert_match "brew install homebrew/foo/<formula>",
+ cmd("tap-readme", "foo", "--verbose")
+ readme = HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-foo/README.md"
+ assert readme.exist?, "The README should be created"
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_test_formula.rb b/Library/Homebrew/test/test_integration_cmds_test_formula.rb
new file mode 100644
index 000000000..4350fdbe9
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_test_formula.rb
@@ -0,0 +1,30 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestTestFormula < IntegrationCommandTests
+ def test_test_formula
+ assert_match "This command requires a formula argument", cmd_fail("test")
+ assert_match "Testing requires the latest version of testball",
+ cmd_fail("test", testball)
+
+ cmd("install", testball)
+ assert_match "testball defines no test", cmd_fail("test", testball)
+
+ setup_test_formula "testball_copy", <<-EOS.undent
+ head "https://github.com/example/testball2.git"
+
+ devel do
+ url "file://#{File.expand_path("..", __FILE__)}/tarballs/testball-0.1.tbz"
+ sha256 "#{TESTBALL_SHA256}"
+ end
+
+ keg_only "just because"
+
+ test do
+ end
+ EOS
+
+ cmd("install", "testball_copy")
+ assert_match "Testing testball_copy", cmd("test", "--HEAD", "testball_copy")
+ assert_match "Testing testball_copy", cmd("test", "--devel", "testball_copy")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_uninstall.rb b/Library/Homebrew/test/test_integration_cmds_uninstall.rb
new file mode 100644
index 000000000..6f82bedc7
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_uninstall.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUninstall < IntegrationCommandTests
+ def test_uninstall
+ cmd("install", testball)
+ assert_match "Uninstalling testball", cmd("uninstall", "--force", testball)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_unlink.rb b/Library/Homebrew/test/test_integration_cmds_unlink.rb
new file mode 100644
index 000000000..b64cc8140
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_unlink.rb
@@ -0,0 +1,10 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUnlink < IntegrationCommandTests
+ def test_unlink
+ setup_test_formula "testball"
+
+ cmd("install", "testball")
+ assert_match "Would remove", cmd("unlink", "--dry-run", "testball")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_unlinkapps.rb b/Library/Homebrew/test/test_integration_cmds_unlinkapps.rb
new file mode 100644
index 000000000..047f17a1d
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_unlinkapps.rb
@@ -0,0 +1,19 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUnlinkapps < IntegrationCommandTests
+ def test_unlinkapps
+ home_dir = Pathname.new(mktmpdir)
+ apps_dir = home_dir/"Applications"
+ apps_dir.mkpath
+
+ setup_test_formula "testball"
+
+ source_app = (HOMEBREW_CELLAR/"testball/0.1/TestBall.app")
+ source_app.mkpath
+
+ FileUtils.ln_s source_app, "#{apps_dir}/TestBall.app"
+
+ assert_match "Unlinking: #{apps_dir}/TestBall.app",
+ cmd("unlinkapps", "--local", "HOME" => home_dir)
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_unpack.rb b/Library/Homebrew/test/test_integration_cmds_unpack.rb
new file mode 100644
index 000000000..1b6e97e52
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_unpack.rb
@@ -0,0 +1,13 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUnpack < IntegrationCommandTests
+ def test_unpack
+ setup_test_formula "testball"
+
+ mktmpdir do |path|
+ cmd "unpack", "testball", "--destdir=#{path}"
+ assert File.directory?("#{path}/testball-0.1"),
+ "The tarball should be unpacked"
+ end
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_upgrade.rb b/Library/Homebrew/test/test_integration_cmds_upgrade.rb
new file mode 100644
index 000000000..5eee33d56
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_upgrade.rb
@@ -0,0 +1,12 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUpgrade < IntegrationCommandTests
+ def test_upgrade
+ setup_test_formula "testball"
+ (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath
+
+ cmd("upgrade")
+ assert((HOMEBREW_CELLAR/"testball/0.1").directory?,
+ "The latest version directory should be created")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_uses.rb b/Library/Homebrew/test/test_integration_cmds_uses.rb
new file mode 100644
index 000000000..e5c0c0f77
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_uses.rb
@@ -0,0 +1,16 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestUses < IntegrationCommandTests
+ def test_uses
+ setup_test_formula "foo"
+ setup_test_formula "bar"
+ setup_test_formula "baz", <<-EOS.undent
+ url "https://example.com/baz-1.0"
+ depends_on "bar"
+ EOS
+
+ assert_equal "", cmd("uses", "baz")
+ assert_equal "baz", cmd("uses", "bar")
+ assert_equal "bar\nbaz", cmd("uses", "--recursive", "foo")
+ end
+end
diff --git a/Library/Homebrew/test/test_integration_cmds_version.rb b/Library/Homebrew/test/test_integration_cmds_version.rb
new file mode 100644
index 000000000..b434d0d95
--- /dev/null
+++ b/Library/Homebrew/test/test_integration_cmds_version.rb
@@ -0,0 +1,8 @@
+require "integration_cmds_tests"
+
+class IntegrationCommandTestVersion < IntegrationCommandTests
+ def test_version
+ assert_match HOMEBREW_VERSION.to_s,
+ cmd("--version")
+ end
+end