2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-02-10 21:41:15 +01:00
|
|
|
if ENV["HOMEBREW_TESTS_COVERAGE"]
|
|
|
|
require "simplecov"
|
2021-04-01 20:29:27 -04:00
|
|
|
require "simplecov-cobertura"
|
2017-03-05 08:06:45 +01:00
|
|
|
|
2021-04-01 18:59:46 -04:00
|
|
|
formatters = [
|
|
|
|
SimpleCov::Formatter::HTMLFormatter,
|
2021-04-01 21:19:56 -04:00
|
|
|
SimpleCov::Formatter::CoberturaFormatter,
|
2021-04-01 18:59:46 -04:00
|
|
|
]
|
2021-02-04 12:35:55 -05:00
|
|
|
SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(formatters)
|
2018-12-30 20:06:13 +00:00
|
|
|
|
2024-10-27 15:38:23 +00:00
|
|
|
# Needed for outputting coverage reporting only once for parallel_tests.
|
|
|
|
# Otherwise, "Coverage report generated" will get spammed for each process.
|
|
|
|
if ENV["TEST_ENV_NUMBER"]
|
2021-02-04 12:35:55 -05:00
|
|
|
SimpleCov.at_exit do
|
|
|
|
result = SimpleCov.result
|
2024-10-27 15:38:23 +00:00
|
|
|
# `SimpleCov.result` calls `ParallelTests.wait_for_other_processes_to_finish`
|
|
|
|
# internally for you on the last process.
|
2024-10-26 11:20:37 +01:00
|
|
|
result.format! if ParallelTests.last_process?
|
2019-01-09 18:59:12 +00:00
|
|
|
end
|
2017-03-05 08:06:45 +01:00
|
|
|
end
|
2017-02-10 21:41:15 +01:00
|
|
|
end
|
|
|
|
|
2024-09-27 12:48:27 -04:00
|
|
|
require_relative "../standalone"
|
2021-02-14 11:56:32 -05:00
|
|
|
require_relative "../warnings"
|
|
|
|
|
|
|
|
Warnings.ignore :parser_syntax do
|
|
|
|
require "rubocop"
|
|
|
|
end
|
|
|
|
|
2020-12-22 18:03:01 +00:00
|
|
|
require "rspec/github"
|
2018-04-07 20:28:56 +01:00
|
|
|
require "rspec/retry"
|
2020-11-17 04:49:54 +01:00
|
|
|
require "rspec/sorbet"
|
2018-04-07 20:28:56 +01:00
|
|
|
require "rubocop/rspec/support"
|
|
|
|
require "find"
|
2020-07-22 00:38:27 +02:00
|
|
|
require "timeout"
|
2018-04-07 20:28:56 +01:00
|
|
|
|
2024-01-18 14:54:14 +00:00
|
|
|
$LOAD_PATH.unshift(File.expand_path("#{ENV.fetch("HOMEBREW_LIBRARY")}/Homebrew/test/support/lib"))
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2024-02-26 20:26:06 -08:00
|
|
|
require_relative "support/extend/cachable"
|
|
|
|
|
2018-07-17 14:23:33 +02:00
|
|
|
require_relative "../global"
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2024-04-17 22:17:47 +01:00
|
|
|
require "debug" if ENV["HOMEBREW_DEBUG"]
|
|
|
|
|
2023-02-17 15:26:18 +00:00
|
|
|
require "test/support/quiet_progress_formatter"
|
2020-08-14 13:48:03 -04:00
|
|
|
require "test/support/helper/cask"
|
2024-02-19 08:28:12 -08:00
|
|
|
require "test/support/helper/files"
|
2017-02-21 04:52:53 +01:00
|
|
|
require "test/support/helper/fixtures"
|
2017-02-25 13:26:50 +01:00
|
|
|
require "test/support/helper/formula"
|
2017-02-28 14:50:46 +01:00
|
|
|
require "test/support/helper/mktmpdir"
|
2017-03-05 06:31:36 +01:00
|
|
|
|
|
|
|
require "test/support/helper/spec/shared_context/homebrew_cask" if OS.mac?
|
2017-02-15 19:20:38 +01:00
|
|
|
require "test/support/helper/spec/shared_context/integration_test"
|
2020-12-02 20:47:53 -05:00
|
|
|
require "test/support/helper/spec/shared_examples/formulae_exist"
|
2017-02-10 21:41:15 +01:00
|
|
|
|
|
|
|
TEST_DIRECTORIES = [
|
|
|
|
CoreTap.instance.path/"Formula",
|
|
|
|
HOMEBREW_CACHE,
|
|
|
|
HOMEBREW_CACHE_FORMULA,
|
2025-06-10 14:37:21 +00:00
|
|
|
HOMEBREW_CACHE/"api",
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_CELLAR,
|
2018-09-06 18:38:43 +01:00
|
|
|
HOMEBREW_LOCKS,
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_LOGS,
|
|
|
|
HOMEBREW_TEMP,
|
2025-02-07 14:31:50 +00:00
|
|
|
HOMEBREW_ALIASES,
|
2017-02-10 21:41:15 +01:00
|
|
|
].freeze
|
|
|
|
|
2020-11-17 04:49:54 +01:00
|
|
|
# Make `instance_double` and `class_double`
|
|
|
|
# work when type-checking is active.
|
|
|
|
RSpec::Sorbet.allow_doubles!
|
|
|
|
|
2023-02-21 00:25:02 +00:00
|
|
|
RSpec.configure do |config|
|
2017-02-10 21:41:15 +01:00
|
|
|
config.order = :random
|
2017-02-27 22:12:32 +01:00
|
|
|
|
2018-05-25 23:19:13 +02:00
|
|
|
config.raise_errors_for_deprecations!
|
2024-02-18 15:03:00 -08:00
|
|
|
config.warnings = true
|
2024-02-18 15:17:25 -08:00
|
|
|
config.disable_monkey_patching!
|
2018-05-25 23:19:13 +02:00
|
|
|
|
2017-07-07 16:34:29 +01:00
|
|
|
config.filter_run_when_matching :focus
|
|
|
|
|
2019-01-09 18:59:12 +00:00
|
|
|
config.silence_filter_announcements = true if ENV["TEST_ENV_NUMBER"]
|
2018-06-06 18:17:15 -04:00
|
|
|
|
2023-02-17 15:26:18 +00:00
|
|
|
# Improve backtrace formatting
|
|
|
|
config.filter_gems_from_backtrace "rspec-retry", "sorbet-runtime"
|
|
|
|
config.backtrace_exclusion_patterns << %r{test/spec_helper\.rb}
|
|
|
|
|
2019-02-26 22:13:00 +00:00
|
|
|
config.expect_with :rspec do |c|
|
|
|
|
c.max_formatted_output_length = 200
|
|
|
|
end
|
2018-05-24 14:28:20 +01:00
|
|
|
|
2021-06-29 12:43:47 +01:00
|
|
|
# Use rspec-retry to handle flaky tests.
|
|
|
|
config.default_sleep_interval = 1
|
|
|
|
|
2024-12-24 10:32:55 +00:00
|
|
|
# Don't want the nicer default retry behaviour when using CodeCov to
|
2021-06-29 12:43:47 +01:00
|
|
|
# identify flaky tests.
|
2024-12-24 10:32:55 +00:00
|
|
|
config.default_retry_count = 2 unless ENV["CODECOV_TOKEN"]
|
2020-06-29 09:54:06 +01:00
|
|
|
|
2024-02-18 15:08:05 -08:00
|
|
|
config.expect_with :rspec do |expectations|
|
|
|
|
# This option will default to `true` in RSpec 4. It makes the `description`
|
|
|
|
# and `failure_message` of custom matchers include text for helper methods
|
|
|
|
# defined using `chain`, e.g.:
|
|
|
|
# be_bigger_than(2).and_smaller_than(4).description
|
|
|
|
# # => "be bigger than 2 and smaller than 4"
|
|
|
|
# ...rather than:
|
|
|
|
# # => "be bigger than 2"
|
|
|
|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
|
|
|
end
|
|
|
|
config.mock_with :rspec do |mocks|
|
|
|
|
# Prevents you from mocking or stubbing a method that does not exist on
|
2024-04-30 11:10:23 +02:00
|
|
|
# a real object. This is generally recommended and will default to
|
2024-02-18 15:08:05 -08:00
|
|
|
# `true` in RSpec 4.
|
|
|
|
mocks.verify_partial_doubles = true
|
|
|
|
end
|
|
|
|
config.shared_context_metadata_behavior = :apply_to_host_groups
|
|
|
|
|
2021-06-29 12:43:47 +01:00
|
|
|
# Increase timeouts for integration tests (as we expect them to take longer).
|
|
|
|
config.around(:each, :integration_test) do |example|
|
|
|
|
example.metadata[:timeout] ||= 120
|
|
|
|
example.run
|
|
|
|
end
|
|
|
|
|
|
|
|
config.around(:each, :needs_network) do |example|
|
|
|
|
example.metadata[:timeout] ||= 120
|
|
|
|
|
2024-12-24 10:32:55 +00:00
|
|
|
# Don't want the nicer default retry behaviour when using CodeCov to
|
2021-06-29 12:43:47 +01:00
|
|
|
# identify flaky tests.
|
2024-12-24 10:32:55 +00:00
|
|
|
example.metadata[:retry] ||= 4 unless ENV["CODECOV_TOKEN"]
|
2021-06-29 12:43:47 +01:00
|
|
|
|
|
|
|
example.metadata[:retry_wait] ||= 2
|
|
|
|
example.metadata[:exponential_backoff] ||= true
|
|
|
|
example.run
|
2020-06-29 09:54:06 +01:00
|
|
|
end
|
|
|
|
|
2018-05-24 14:28:20 +01:00
|
|
|
# Never truncate output objects.
|
|
|
|
RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = nil
|
2018-05-24 14:28:20 +01:00
|
|
|
|
2017-10-21 03:12:50 +02:00
|
|
|
config.include(RuboCop::RSpec::ExpectOffense)
|
|
|
|
|
2020-08-14 13:48:03 -04:00
|
|
|
config.include(Test::Helper::Cask)
|
2017-02-21 04:52:53 +01:00
|
|
|
config.include(Test::Helper::Fixtures)
|
2017-02-25 13:26:50 +01:00
|
|
|
config.include(Test::Helper::Formula)
|
2017-02-28 14:50:46 +01:00
|
|
|
config.include(Test::Helper::MkTmpDir)
|
2017-02-27 22:12:32 +01:00
|
|
|
|
2019-07-28 14:11:29 +01:00
|
|
|
config.before(:each, :needs_linux) do
|
2020-09-08 19:23:32 +02:00
|
|
|
skip "Not running on Linux." unless OS.linux?
|
2019-07-28 14:11:29 +01:00
|
|
|
end
|
|
|
|
|
2017-02-27 22:12:32 +01:00
|
|
|
config.before(:each, :needs_macos) do
|
2020-09-08 19:23:32 +02:00
|
|
|
skip "Not running on macOS." unless OS.mac?
|
2017-02-12 21:37:46 +01:00
|
|
|
end
|
2017-02-27 22:12:32 +01:00
|
|
|
|
2023-02-17 15:26:18 +00:00
|
|
|
config.before(:each, :needs_ci) do
|
|
|
|
skip "Not running on CI." unless ENV["CI"]
|
|
|
|
end
|
|
|
|
|
2018-11-27 11:52:30 -08:00
|
|
|
config.before(:each, :needs_java) do
|
2021-01-25 09:18:10 +00:00
|
|
|
skip "Java is not installed." unless which("java")
|
2018-11-27 11:52:30 -08:00
|
|
|
end
|
|
|
|
|
2017-02-27 22:12:32 +01:00
|
|
|
config.before(:each, :needs_python) do
|
2023-02-17 15:26:18 +00:00
|
|
|
skip "Python is not installed." if !which("python3") && !which("python")
|
2017-02-27 22:12:32 +01:00
|
|
|
end
|
|
|
|
|
2017-04-22 12:26:18 +01:00
|
|
|
config.before(:each, :needs_network) do
|
|
|
|
skip "Requires network connection." unless ENV["HOMEBREW_TEST_ONLINE"]
|
|
|
|
end
|
|
|
|
|
2024-05-03 00:32:50 -07:00
|
|
|
config.before(:each, :needs_homebrew_core) do
|
|
|
|
core_tap_path = "#{ENV.fetch("HOMEBREW_LIBRARY")}/Taps/homebrew/homebrew-core"
|
|
|
|
skip "Requires homebrew/core to be tapped." unless Dir.exist?(core_tap_path)
|
|
|
|
end
|
|
|
|
|
2025-03-13 20:13:13 +01:00
|
|
|
config.before(:each, :needs_systemd) do
|
|
|
|
skip "No SystemD found." unless which("systemctl")
|
|
|
|
end
|
|
|
|
|
|
|
|
config.before(:each, :needs_daemon_manager) do
|
|
|
|
skip "No LaunchCTL or SystemD found." if !which("systemctl") && !which("launchctl")
|
|
|
|
end
|
|
|
|
|
2024-03-16 13:14:12 -07:00
|
|
|
config.before do |example|
|
|
|
|
next if example.metadata.key?(:needs_network)
|
|
|
|
next if example.metadata.key?(:needs_utils_curl)
|
|
|
|
|
|
|
|
allow(Utils::Curl).to receive(:curl_executable).and_raise(<<~ERROR)
|
|
|
|
Unexpected call to Utils::Curl.curl_executable without setting :needs_network or :needs_utils_curl.
|
|
|
|
ERROR
|
|
|
|
end
|
|
|
|
|
2024-03-19 22:18:02 -07:00
|
|
|
config.before(:each, :no_api) do
|
|
|
|
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
|
|
|
|
end
|
|
|
|
|
2018-02-05 18:36:26 -08:00
|
|
|
config.before(:each, :needs_svn) do
|
2021-10-03 21:47:17 +01:00
|
|
|
svn_shim = HOMEBREW_SHIMS_PATH/"shared/svn"
|
2020-09-11 11:11:42 +01:00
|
|
|
skip "Subversion is not installed." unless quiet_system svn_shim, "--version"
|
2020-06-24 10:13:09 +01:00
|
|
|
|
2020-09-11 11:11:42 +01:00
|
|
|
svn_shim_path = Pathname(Utils.popen_read(svn_shim, "--homebrew=print-path").chomp.presence)
|
2022-06-15 05:40:43 +01:00
|
|
|
svn_paths = PATH.new(ENV.fetch("PATH"))
|
2020-09-11 11:11:42 +01:00
|
|
|
svn_paths.prepend(svn_shim_path.dirname)
|
|
|
|
|
2019-11-06 14:58:33 +00:00
|
|
|
if OS.mac?
|
|
|
|
xcrun_svn = Utils.popen_read("xcrun", "-f", "svn")
|
|
|
|
svn_paths.append(File.dirname(xcrun_svn)) if $CHILD_STATUS.success? && xcrun_svn.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
svn = which("svn", svn_paths)
|
2020-09-11 11:11:42 +01:00
|
|
|
skip "svn is not installed." unless svn
|
|
|
|
|
2019-11-06 14:58:33 +00:00
|
|
|
svnadmin = which("svnadmin", svn_paths)
|
2020-09-11 11:11:42 +01:00
|
|
|
skip "svnadmin is not installed." unless svnadmin
|
2019-11-06 14:58:33 +00:00
|
|
|
|
2022-06-15 05:40:43 +01:00
|
|
|
ENV["PATH"] = PATH.new(ENV.fetch("PATH"))
|
2019-11-06 14:58:33 +00:00
|
|
|
.append(svn.dirname)
|
|
|
|
.append(svnadmin.dirname)
|
2018-08-13 10:04:32 -07:00
|
|
|
end
|
|
|
|
|
2021-12-31 17:07:53 +00:00
|
|
|
config.before(:each, :needs_homebrew_curl) do
|
2022-05-30 04:25:24 +01:00
|
|
|
ENV["HOMEBREW_CURL"] = HOMEBREW_BREWED_CURL_PATH
|
2023-09-04 22:17:57 -04:00
|
|
|
skip "A `curl` with TLS 1.3 support is required." unless Utils::Curl.curl_supports_tls13?
|
2021-10-23 15:09:34 -04:00
|
|
|
rescue FormulaUnavailableError
|
|
|
|
skip "No `curl` formula is available."
|
2021-09-24 22:44:27 -04:00
|
|
|
end
|
|
|
|
|
2018-08-13 10:04:32 -07:00
|
|
|
config.before(:each, :needs_unzip) do
|
2020-09-11 11:11:42 +01:00
|
|
|
skip "Unzip is not installed." unless which("unzip")
|
2018-02-05 18:36:26 -08:00
|
|
|
end
|
|
|
|
|
2023-02-21 00:25:02 +00:00
|
|
|
config.around do |example|
|
2020-12-17 18:09:33 +01:00
|
|
|
Homebrew.raise_deprecation_exceptions = true
|
2019-11-05 21:53:41 +00:00
|
|
|
|
2024-03-05 23:53:52 -08:00
|
|
|
Tap.installed.each(&:clear_cache)
|
2024-02-25 15:14:22 -08:00
|
|
|
Cachable::Registry.clear_all_caches
|
2020-12-17 18:09:33 +01:00
|
|
|
FormulaInstaller.clear_attempted
|
|
|
|
FormulaInstaller.clear_installed
|
2021-10-31 10:52:40 -07:00
|
|
|
FormulaInstaller.clear_fetched
|
2022-05-30 04:10:25 +01:00
|
|
|
Utils::Curl.clear_path_cache
|
2018-07-16 10:55:22 +02:00
|
|
|
|
2020-12-17 18:09:33 +01:00
|
|
|
TEST_DIRECTORIES.each(&:mkpath)
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2020-12-17 18:09:33 +01:00
|
|
|
@__homebrew_failed = Homebrew.failed?
|
2017-02-18 16:52:36 +01:00
|
|
|
|
2024-02-19 08:28:12 -08:00
|
|
|
@__files_before_test = Test::Helper::Files.find_files
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2020-12-17 18:09:33 +01:00
|
|
|
@__env = ENV.to_hash # dup doesn't work on ENV
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2020-12-17 18:09:33 +01:00
|
|
|
@__stdout = $stdout.clone
|
|
|
|
@__stderr = $stderr.clone
|
2022-03-06 19:06:28 +00:00
|
|
|
@__stdin = $stdin.clone
|
2020-04-07 08:32:30 +02:00
|
|
|
|
2025-06-10 14:37:21 +00:00
|
|
|
# Link original API cache files to test cache directory.
|
|
|
|
Pathname("#{ENV.fetch("HOMEBREW_CACHE")}/api").glob("*.json").each do |path|
|
2025-06-15 14:05:25 +03:00
|
|
|
FileUtils.ln_s path, HOMEBREW_CACHE/"api/#{path.basename}"
|
2025-06-10 14:37:21 +00:00
|
|
|
end
|
|
|
|
|
2020-12-17 18:09:33 +01:00
|
|
|
begin
|
2024-04-03 00:12:28 +01:00
|
|
|
if example.metadata.keys.exclude?(:focus) && !ENV.key?("HOMEBREW_VERBOSE_TESTS")
|
2017-07-29 19:55:05 +02:00
|
|
|
$stdout.reopen(File::NULL)
|
|
|
|
$stderr.reopen(File::NULL)
|
Set up the `debug` gem for test debugging
- This processed that we'd requested a debugger, but didn't drop us into
a debugging console until I
[stopped the stdin disablement](https://github.com/Homebrew/brew/issues/16708#issuecomment-1953483970).
Usage:
```
❯ git diff
diff --git a/Library/Homebrew/test/migrator_spec.rb b/Library/Homebrew/test/migrator_spec.rb
index 87fadd5e95..db4700810a 100644
--- a/Library/Homebrew/test/migrator_spec.rb
+++ b/Library/Homebrew/test/migrator_spec.rb
@@ -69,6 +69,8 @@ RSpec.describe Migrator do
tab.source["tap"] = "homebrew/core"
tab.write
+ binding.break
+
expect do
described_class.new(new_formula, "oldname")
end.to raise_error(Migrator::MigratorDifferentTapsError)
issyl0 at pictor in /opt/homebrew on bye-byebug
❯ brew tests --only=migrator --debug
Randomized with seed 59158
1 process for 1 spec, ~ 1 spec per process
.==> Relinking newname
.==> Unlinking oldname
...==> Moving oldname versions to /private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/newname
....==> Migrating formula oldname to newname
==> Unlinking oldname
==> Moving oldname versions to /private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/newname
==> Relinking newname
....[67, 76] in ~/migrator_spec.rb
67| tab = Tab.empty
68| tab.tabfile = HOMEBREW_CELLAR/"oldname/0.1/INSTALL_RECEIPT.json"
69| tab.source["tap"] = "homebrew/core"
70| tab.write
71|
=> 72| binding.break
73|
74| expect do
75| described_class.new(new_formula, "oldname")
76| end.to raise_error(Migrator::MigratorDifferentTapsError)
=>#0 block in <top (required)> (3 levels) at ~/migrator_spec.rb:72
#1 [C] BasicObject#instance_exec at /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263
# and 68 frames (use `bt' command for all frames)
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p tab
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p # command(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p # command t # command ta # command tab # command(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p tab # command
=> #<Tab:0x0000000107156be0 @aliases=[], @arch=nil, @built_as_bottle=false, @built_on={"os"=>"Macintosh", "os_version"=>"macOS 14", "cpu_family"=>"arm_firestorm_icestorm"}, @compiler=:clang, @homebrew_version="4.2.16-55-gc8f60ec-dirty", @installed_as_dependency=false, @installed_on_request=false, @loaded_from_api=false, @poured_from_bottle=false, @runtime_dependencies=nil, @source={"path"=>nil, "tap"=>"homebrew/core", "tap_git_head"=>nil, "spec"=>"stable", "versions"=>{"stable"=>nil, "head"=>nil, "version_scheme"=>0}}, @source_modified_time=0, @stdlib=nil, @tabfile=#<Pathname:/private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/oldname/0.1/INSTALL_RECEIPT.json>, @time=nil, @unused_options=[], @used_options=[]>
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464)
```
2024-04-02 23:43:46 +01:00
|
|
|
$stdin.reopen(File::NULL)
|
2022-10-20 11:28:27 +01:00
|
|
|
else
|
Set up the `debug` gem for test debugging
- This processed that we'd requested a debugger, but didn't drop us into
a debugging console until I
[stopped the stdin disablement](https://github.com/Homebrew/brew/issues/16708#issuecomment-1953483970).
Usage:
```
❯ git diff
diff --git a/Library/Homebrew/test/migrator_spec.rb b/Library/Homebrew/test/migrator_spec.rb
index 87fadd5e95..db4700810a 100644
--- a/Library/Homebrew/test/migrator_spec.rb
+++ b/Library/Homebrew/test/migrator_spec.rb
@@ -69,6 +69,8 @@ RSpec.describe Migrator do
tab.source["tap"] = "homebrew/core"
tab.write
+ binding.break
+
expect do
described_class.new(new_formula, "oldname")
end.to raise_error(Migrator::MigratorDifferentTapsError)
issyl0 at pictor in /opt/homebrew on bye-byebug
❯ brew tests --only=migrator --debug
Randomized with seed 59158
1 process for 1 spec, ~ 1 spec per process
.==> Relinking newname
.==> Unlinking oldname
...==> Moving oldname versions to /private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/newname
....==> Migrating formula oldname to newname
==> Unlinking oldname
==> Moving oldname versions to /private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/newname
==> Relinking newname
....[67, 76] in ~/migrator_spec.rb
67| tab = Tab.empty
68| tab.tabfile = HOMEBREW_CELLAR/"oldname/0.1/INSTALL_RECEIPT.json"
69| tab.source["tap"] = "homebrew/core"
70| tab.write
71|
=> 72| binding.break
73|
74| expect do
75| described_class.new(new_formula, "oldname")
76| end.to raise_error(Migrator::MigratorDifferentTapsError)
=>#0 block in <top (required)> (3 levels) at ~/migrator_spec.rb:72
#1 [C] BasicObject#instance_exec at /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263
# and 68 frames (use `bt' command for all frames)
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p tab
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p # command(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p # command t # command ta # command tab # command(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464) p tab # command
=> #<Tab:0x0000000107156be0 @aliases=[], @arch=nil, @built_as_bottle=false, @built_on={"os"=>"Macintosh", "os_version"=>"macOS 14", "cpu_family"=>"arm_firestorm_icestorm"}, @compiler=:clang, @homebrew_version="4.2.16-55-gc8f60ec-dirty", @installed_as_dependency=false, @installed_on_request=false, @loaded_from_api=false, @poured_from_bottle=false, @runtime_dependencies=nil, @source={"path"=>nil, "tap"=>"homebrew/core", "tap_git_head"=>nil, "spec"=>"stable", "versions"=>{"stable"=>nil, "head"=>nil, "version_scheme"=>0}}, @source_modified_time=0, @stdlib=nil, @tabfile=#<Pathname:/private/tmp/homebrew-tests-20240403-85464-3uogqr/cellar/oldname/0.1/INSTALL_RECEIPT.json>, @time=nil, @unused_options=[], @used_options=[]>
(rdbg@/opt/homebrew/Library/Homebrew/vendor/bundle/ruby/3.1.0/bin/rspec#85464)
```
2024-04-02 23:43:46 +01:00
|
|
|
# don't retry when focusing
|
2022-10-20 11:28:27 +01:00
|
|
|
config.default_retry_count = 0
|
2017-07-29 19:55:05 +02:00
|
|
|
end
|
|
|
|
|
2020-07-22 00:38:27 +02:00
|
|
|
begin
|
2020-10-29 09:50:17 +00:00
|
|
|
timeout = example.metadata.fetch(:timeout, 60)
|
2020-07-22 00:38:27 +02:00
|
|
|
Timeout.timeout(timeout) do
|
|
|
|
example.run
|
|
|
|
end
|
2020-10-29 09:50:17 +00:00
|
|
|
rescue Timeout::Error => e
|
|
|
|
example.example.set_exception(e)
|
2020-07-22 00:38:27 +02:00
|
|
|
end
|
2020-04-07 08:32:30 +02:00
|
|
|
rescue SystemExit => e
|
2020-10-29 09:50:17 +00:00
|
|
|
example.example.set_exception(e)
|
2017-02-10 21:41:15 +01:00
|
|
|
ensure
|
|
|
|
ENV.replace(@__env)
|
2023-10-10 03:39:42 +02:00
|
|
|
Context.current = Context::ContextStruct.new
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2020-04-07 08:32:30 +02:00
|
|
|
$stdout.reopen(@__stdout)
|
|
|
|
$stderr.reopen(@__stderr)
|
2022-03-06 19:06:28 +00:00
|
|
|
$stdin.reopen(@__stdin)
|
2020-04-07 08:32:30 +02:00
|
|
|
@__stdout.close
|
|
|
|
@__stderr.close
|
2022-03-06 19:06:28 +00:00
|
|
|
@__stdin.close
|
2017-07-29 19:55:05 +02:00
|
|
|
|
2024-03-05 23:53:52 -08:00
|
|
|
Tap.all.each(&:clear_cache)
|
2024-02-25 15:14:22 -08:00
|
|
|
Cachable::Registry.clear_all_caches
|
2017-02-10 21:41:15 +01:00
|
|
|
|
|
|
|
FileUtils.rm_rf [
|
2020-12-17 18:09:33 +01:00
|
|
|
*TEST_DIRECTORIES,
|
2024-10-05 13:46:24 -07:00
|
|
|
*Keg.must_exist_subdirectories,
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_LINKED_KEGS,
|
|
|
|
HOMEBREW_PINNED_KEGS,
|
|
|
|
HOMEBREW_PREFIX/"Caskroom",
|
2019-10-21 12:27:39 -07:00
|
|
|
HOMEBREW_PREFIX/"Frameworks",
|
2018-05-25 17:28:43 +02:00
|
|
|
HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-cask",
|
2017-04-23 18:56:22 +01:00
|
|
|
HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-bar",
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-foo",
|
2025-03-13 14:50:03 +00:00
|
|
|
HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-test-bot",
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-shallow",
|
2018-04-13 16:40:08 +02:00
|
|
|
HOMEBREW_LIBRARY/"PinnedTaps",
|
2017-02-10 21:41:15 +01:00
|
|
|
HOMEBREW_REPOSITORY/".git",
|
|
|
|
CoreTap.instance.path/".git",
|
|
|
|
CoreTap.instance.alias_dir,
|
|
|
|
CoreTap.instance.path/"formula_renames.json",
|
2020-11-30 12:29:07 -05:00
|
|
|
CoreTap.instance.path/"tap_migrations.json",
|
|
|
|
CoreTap.instance.path/"audit_exceptions",
|
|
|
|
CoreTap.instance.path/"style_exceptions",
|
|
|
|
CoreTap.instance.path/"pypi_formula_mappings.json",
|
2019-03-27 09:45:48 +00:00
|
|
|
*Pathname.glob("#{HOMEBREW_CELLAR}/*/"),
|
2025-04-14 15:32:42 +01:00
|
|
|
HOMEBREW_LIBRARY_PATH/"test/.vscode",
|
|
|
|
HOMEBREW_LIBRARY_PATH/"test/.cursor",
|
|
|
|
HOMEBREW_LIBRARY_PATH/"test/Library",
|
2017-02-10 21:41:15 +01:00
|
|
|
]
|
|
|
|
|
2024-02-19 08:28:12 -08:00
|
|
|
files_after_test = Test::Helper::Files.find_files
|
2017-02-10 21:41:15 +01:00
|
|
|
|
2017-02-18 02:30:47 +01:00
|
|
|
diff = Set.new(@__files_before_test) ^ Set.new(files_after_test)
|
2017-10-15 02:28:32 +02:00
|
|
|
expect(diff).to be_empty, <<~EOS
|
2017-02-10 21:41:15 +01:00
|
|
|
file leak detected:
|
|
|
|
#{diff.map { |f| " #{f}" }.join("\n")}
|
|
|
|
EOS
|
2017-02-18 16:52:36 +01:00
|
|
|
|
|
|
|
Homebrew.failed = @__homebrew_failed
|
2017-02-10 21:41:15 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-02-18 16:52:36 +01:00
|
|
|
|
2017-03-08 15:49:37 +01:00
|
|
|
RSpec::Matchers.define_negated_matcher :not_to_output, :output
|
2017-02-18 16:52:36 +01:00
|
|
|
RSpec::Matchers.alias_matcher :have_failed, :be_failed
|
2020-09-05 07:41:56 +02:00
|
|
|
|
|
|
|
# Match consecutive elements in an array.
|
|
|
|
RSpec::Matchers.define :array_including_cons do |*cons|
|
|
|
|
match do |actual|
|
|
|
|
expect(actual.each_cons(cons.size)).to include(cons)
|
|
|
|
end
|
|
|
|
end
|