diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..7762b385c886c4aaae7449874fc2d73f1384c9e0 --- /dev/null +++ b/Library/Homebrew/test/spec_helper.rb @@ -0,0 +1,77 @@ +require "find" +require "pathname" +require "rspec/its" +require "rspec/wait" +require "set" + +if ENV["HOMEBREW_TESTS_COVERAGE"] + require "simplecov" +end + +$LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew")) +$LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/test/support/lib")) + +require "global" +require "tap" + +require "test/support/helper/shutup" + +TEST_DIRECTORIES = [ + CoreTap.instance.path/"Formula", + HOMEBREW_CACHE, + HOMEBREW_CACHE_FORMULA, + HOMEBREW_CELLAR, + HOMEBREW_LOCK_DIR, + HOMEBREW_LOGS, + HOMEBREW_TEMP, +].freeze + +RSpec.configure do |config| + config.order = :random + config.include(Test::Helper::Shutup) + config.around(:each) do |example| + begin + TEST_DIRECTORIES.each(&:mkpath) + + @__files_before_test = Find.find(TEST_TMPDIR).map { |f| f.sub(TEST_TMPDIR, "") } + + @__argv = ARGV.dup + @__env = ENV.to_hash # dup doesn't work on ENV + + example.run + ensure + ARGV.replace(@__argv) + ENV.replace(@__env) + + Tab.clear_cache + + FileUtils.rm_rf [ + TEST_DIRECTORIES.map(&:children), + HOMEBREW_LINKED_KEGS, + HOMEBREW_PINNED_KEGS, + HOMEBREW_PREFIX/".git", + HOMEBREW_PREFIX/"bin", + HOMEBREW_PREFIX/"share", + HOMEBREW_PREFIX/"opt", + HOMEBREW_PREFIX/"Caskroom", + 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.instance.path/".git", + CoreTap.instance.alias_dir, + CoreTap.instance.path/"formula_renames.json", + ] + + files_after_test = Find.find(TEST_TMPDIR).map { |f| f.sub(TEST_TMPDIR, "") } + + diff = Set.new(@__files_before_test).difference(Set.new(files_after_test)) + expect(diff).to be_empty, <<-EOS.undent + file leak detected: + #{diff.map { |f| " #{f}" }.join("\n")} + EOS + end + end +end diff --git a/Library/Homebrew/test/support/helper/test_case.rb b/Library/Homebrew/test/support/helper/test_case.rb index daa66349436beb05df960ae15b8ea451d4cfd489..568beb947bb45a59cf10f657dba23df99151dc68 100644 --- a/Library/Homebrew/test/support/helper/test_case.rb +++ b/Library/Homebrew/test/support/helper/test_case.rb @@ -12,9 +12,6 @@ module Homebrew include Test::Helper::Shutup include Test::Helper::VersionAssertions - TEST_SHA1 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze - TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze - TEST_DIRECTORIES = [ CoreTap.instance.path/"Formula", HOMEBREW_CACHE, diff --git a/Library/Homebrew/test/support/lib/config.rb b/Library/Homebrew/test/support/lib/config.rb index f6fdb4ecbfb34d3276a5f859216a7f0dd86c0419..fb5c210fee843bdf59107692ad0696645cc2aa66 100644 --- a/Library/Homebrew/test/support/lib/config.rb +++ b/Library/Homebrew/test/support/lib/config.rb @@ -38,3 +38,6 @@ TESTBALL_SHA256 = "91e3f7930c98d7ccfb288e115ed52d06b0e5bc16fec7dce8bdda865300270 TESTBALL_PATCHES_SHA256 = "799c2d551ac5c3a5759bea7796631a7906a6a24435b52261a317133a0bfb34d9".freeze PATCH_A_SHA256 = "83404f4936d3257e65f176c4ffb5a5b8d6edd644a21c8d8dcc73e22a6d28fcfa".freeze PATCH_B_SHA256 = "57958271bb802a59452d0816e0670d16c8b70bdf6530bcf6f78726489ad89b90".freeze + +TEST_SHA1 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze +TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze