diff --git a/Library/Homebrew/test/integration_cmds_tests.rb b/Library/Homebrew/test/integration_cmds_tests.rb new file mode 100644 index 0000000000000000000000000000000000000000..a63b343c0303f24a49866258b5e6279bae8475da --- /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 35ad04e7a624383c08705dacfd1252ccc9f3cb5d..0000000000000000000000000000000000000000 --- 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§ion=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§ion=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 0000000000000000000000000000000000000000..17afe7fe85412c2166a4bb4149349dbb9ae9c256 --- /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 0000000000000000000000000000000000000000..b6d9de714cd7a109dada0ba9d5de35bd824d2d78 --- /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 0000000000000000000000000000000000000000..726bd4d106a52f3cd40d1370f952f56756b5170f --- /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 0000000000000000000000000000000000000000..716724f4f968293a58efe16854e8beed7154e5b3 --- /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 0000000000000000000000000000000000000000..82c3421b2429f778abe770c823826f9fef5e4a61 --- /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 0000000000000000000000000000000000000000..e97bb868c5b14ed963f0f65c29a0f6659ddc1a62 --- /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 0000000000000000000000000000000000000000..ad4ef199b6a258f692b321c39749335c7df76927 --- /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 0000000000000000000000000000000000000000..3adb8fccad77a67bd91dfdc960ab738ec8a760f3 --- /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 0000000000000000000000000000000000000000..356c79d6d4d7565c1137a2585dc6555e1645c18d --- /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 0000000000000000000000000000000000000000..fe9ce9952ce1bf0854b695f29a69e46e5a0b84ff --- /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 0000000000000000000000000000000000000000..33cfdc8ed5cc2ea1e7cfeb59daa6af97cd7959d6 --- /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 0000000000000000000000000000000000000000..47c4e25ca68b4f634d7cd81e6e237f5f340221ef --- /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 0000000000000000000000000000000000000000..f1cb5cb7e9b3ecbe25246bb206411da34cbfe1d3 --- /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 0000000000000000000000000000000000000000..20765f9c82b08a455e37e40646e568b244dbad49 --- /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 0000000000000000000000000000000000000000..3ea2e6360dc59b1cfb4a4cd516c8c5e53fc64227 --- /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 0000000000000000000000000000000000000000..10a654b60ca421117e0cb2c6f4f045ff366057b9 --- /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 0000000000000000000000000000000000000000..e93b715782441b7e8784794b9795d8bea68df0af --- /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 0000000000000000000000000000000000000000..e3edf1b0f561dd68f1db92639e3c8320bcd991fb --- /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 0000000000000000000000000000000000000000..b47e0d4f9ae507335e39540a7b77d0e2c4c22b23 --- /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 0000000000000000000000000000000000000000..9f6fc7cbb42fe54ae1679457d724977aca87e6a6 --- /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 0000000000000000000000000000000000000000..71f807199f03cd7812513ad4910650723775deb5 --- /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 0000000000000000000000000000000000000000..19a6ed7d2f95314f051f1cb33f66e65fea0dbccd --- /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 0000000000000000000000000000000000000000..9c4bf0e16d225bbf0de586e48216f7fc2cede27b --- /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 0000000000000000000000000000000000000000..a21ad7f033cf08860d794ed4f0e6ca408390b2fb --- /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 0000000000000000000000000000000000000000..9c060a3538a70f275f003ade2641da431eb60f1f --- /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 0000000000000000000000000000000000000000..44fd774c9732d2a3d4148036c533e4bff82d66e4 --- /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 0000000000000000000000000000000000000000..ef21e85ca1353e2f4546a2cc2a2955c16f7c6257 --- /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 0000000000000000000000000000000000000000..acb272d15b37af5a4cd8a3638bc7db31e0a67be8 --- /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 0000000000000000000000000000000000000000..7ce4a3484d5104f3bd9d60b5e7edbf5f83621373 --- /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 0000000000000000000000000000000000000000..338b32fd97928f08cf5ca5d62013f74f148016b3 --- /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 0000000000000000000000000000000000000000..2ea7779d69da7127d89bc7cf088ae3167e7ccc00 --- /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 0000000000000000000000000000000000000000..8c4255476f6e31530035e85bf751eaa4c8c51606 --- /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 0000000000000000000000000000000000000000..9afb84b77bc29713bb018c3ca6f09ee04a50e357 --- /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 0000000000000000000000000000000000000000..917366905f57dceca66b4da24ba2da7e85745e3b --- /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 0000000000000000000000000000000000000000..1799d777db52af418352777c9d61ff3c0fc7d895 --- /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 0000000000000000000000000000000000000000..2f1f44d0056cbd75f4a4fc12582d25e4c2ea1182 --- /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 0000000000000000000000000000000000000000..3918cbb3e68cbc6259122267c1b01a919a5c0aa6 --- /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 0000000000000000000000000000000000000000..68c3a72a45bc6ac786323d09b64f50fafaa476ef --- /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 0000000000000000000000000000000000000000..de527804c0cdf7f465ed41363b4bd2aed9508262 --- /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 0000000000000000000000000000000000000000..b42e7bc1a23b7e4a3e347c5895f75aa15c7c7706 --- /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 0000000000000000000000000000000000000000..828ca49c04e29382e7d80e2cf0bbb9980199a4fd --- /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 0000000000000000000000000000000000000000..80a71c5ec9625a7af9ce153791a9716a6be4d50b --- /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 0000000000000000000000000000000000000000..a901309cf7123edbb908cf5e23bb316b2aa5e40b --- /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 0000000000000000000000000000000000000000..6072c832eb3f3ef34b1f07aab973194c7d8aa5c5 --- /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 0000000000000000000000000000000000000000..1cfb286a3f2bf693565849565f03d6e4d753a8ba --- /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 0000000000000000000000000000000000000000..bb6fd24cffcd573cfe49ebd82f1c78c3608c1681 --- /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 0000000000000000000000000000000000000000..1a6ca45471f4073ff22a846097d97705f8900c60 --- /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 0000000000000000000000000000000000000000..ce1c0c919667df63c26fd8d73b05f88447b0ab14 --- /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 0000000000000000000000000000000000000000..dc4695e408964b7e440f8004df61220568aee19b --- /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 0000000000000000000000000000000000000000..a90dc1814aac587210cf2c497509730eddb36432 --- /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 0000000000000000000000000000000000000000..f85d1d67e40c930985bbf31f7e877fed590dfd4c --- /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§ion=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§ion=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 0000000000000000000000000000000000000000..043b5b0d6f81a8e71ec24e725adc94448ddcf641 --- /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 0000000000000000000000000000000000000000..be9e119c524519c3d2108e87f92bb2615bd92307 --- /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 0000000000000000000000000000000000000000..50b636d14a56a955bc40f3974304424c287fdca5 --- /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 0000000000000000000000000000000000000000..22cfd8e93b549cd0d9e139f33db9c4a4b2e0ca03 --- /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 0000000000000000000000000000000000000000..c1f53c42d251bb810e787a4093399684183a16c7 --- /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 0000000000000000000000000000000000000000..4350fdbe9d06472b3f0990a662d4d9d1f379efe2 --- /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 0000000000000000000000000000000000000000..6f82bedc771b03ef5314d5c9b5e5946b865ab280 --- /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 0000000000000000000000000000000000000000..b64cc81406591d3d87ab9cdb866b1c41e3923695 --- /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 0000000000000000000000000000000000000000..047f17a1da523547cf4c31be09f8734532b801bf --- /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 0000000000000000000000000000000000000000..1b6e97e52de56425e1db23e566affc9e98c8017a --- /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 0000000000000000000000000000000000000000..5eee33d56ba75b0acaf5b349ac7ac918ff7ef070 --- /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 0000000000000000000000000000000000000000..e5c0c0f770066a27c2f0d561259cb52c67ce3432 --- /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 0000000000000000000000000000000000000000..b434d0d955ed166133329f3fb1acf35bf98f81e5 --- /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