tests: enforce super in lifecycle hooks

This will allow us to have global setup and teardown for tests.

For example, we can automatically clear caches after each test, to avoid
annoying intermittent failures like #1879 and #1886.
This commit is contained in:
Alyssa Ross 2017-01-21 11:21:30 +00:00
parent d7c463ad2c
commit 70a381a00f
51 changed files with 132 additions and 0 deletions

View File

@ -3,6 +3,7 @@ require "extend/ARGV"
class ArgvExtensionTests < Homebrew::TestCase
def setup
super
@argv = [].extend(HomebrewArgvExtension)
end

View File

@ -31,6 +31,7 @@ end
module SharedEnvTests
def setup
super
@env = {}.extend(EnvActivation)
end

View File

@ -6,11 +6,13 @@ require "dev-cmd/audit"
class FormulaTextTests < Homebrew::TestCase
def setup
super
@dir = mktmpdir
end
def teardown
FileUtils.rm_rf @dir
super
end
def formula_text(name, body = nil, options = {})
@ -58,11 +60,13 @@ end
class FormulaAuditorTests < Homebrew::TestCase
def setup
super
@dir = mktmpdir
end
def teardown
FileUtils.rm_rf @dir
super
end
def formula_auditor(name, text, options = {})

View File

@ -3,6 +3,7 @@ require "utils/bottles"
class BottleCollectorTests < Homebrew::TestCase
def setup
super
@collector = Utils::Bottles::Collector.new
end

View File

@ -17,6 +17,7 @@ class BottleHookTests < Homebrew::TestCase
end
def setup
super
@fi = FormulaInstaller.new FormulaDouble.new
end
@ -43,5 +44,6 @@ class BottleHookTests < Homebrew::TestCase
def teardown
Homebrew::Hooks::Bottles.reset_hooks
super
end
end

View File

@ -3,6 +3,7 @@ require "build_environment"
class BuildEnvironmentTests < Homebrew::TestCase
def setup
super
@env = BuildEnvironment.new
end

View File

@ -4,6 +4,7 @@ require "options"
class BuildOptionsTests < Homebrew::TestCase
def setup
super
args = Options.create(%w[--with-foo --with-bar --without-qux])
opts = Options.create(%w[--with-foo --with-bar --without-baz --without-qux])
@build = BuildOptions.new(args, opts)

View File

@ -4,6 +4,7 @@ require "caveats"
class CaveatsTests < Homebrew::TestCase
def setup
super
@f = formula { url "foo-1.0" }
@c = Caveats.new @f
end

View File

@ -19,6 +19,7 @@ class ChecksumVerificationTests < Homebrew::TestCase
def teardown
@_f.clear_cache
super
end
def test_good_sha256

View File

@ -6,12 +6,14 @@ class CleanerTests < Homebrew::TestCase
include FileUtils
def setup
super
@f = formula("cleaner_test") { url "foo-1.0" }
@f.prefix.mkpath
end
def teardown
@f.rack.rmtree if @f.rack.exist?
super
end
def test_clean_file

View File

@ -14,6 +14,7 @@ end
class CleanupTests < Homebrew::TestCase
def setup
super
@ds_store = Pathname.new "#{HOMEBREW_PREFIX}/Library/.DS_Store"
FileUtils.touch @ds_store
end
@ -22,6 +23,7 @@ class CleanupTests < Homebrew::TestCase
FileUtils.rm_f @ds_store
ARGV.delete "--dry-run"
ARGV.delete "--prune=all"
super
end
def test_cleanup

View File

@ -13,6 +13,7 @@ end
class CommandsTests < Homebrew::TestCase
def setup
super
@cmds = [
# internal commands
HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb",
@ -28,6 +29,7 @@ class CommandsTests < Homebrew::TestCase
def teardown
@cmds.each(&:unlink)
super
end
def test_internal_commands

View File

@ -31,6 +31,7 @@ class CompilerSelectorTests < Homebrew::TestCase
end
def setup
super
@f = Double.new
@cc = :clang
@versions = CompilerVersions.new

View File

@ -5,6 +5,7 @@ require "requirements"
class DependenciesTests < Homebrew::TestCase
def setup
super
@deps = Dependencies.new
end
@ -89,6 +90,7 @@ end
class RequirementsTests < Homebrew::TestCase
def setup
super
@reqs = Requirements.new
end

View File

@ -11,11 +11,13 @@ class DependencyCollectorTests < Homebrew::TestCase
end
def setup
super
@d = DependencyCollector.new
end
def teardown
DependencyCollector.clear_cache
super
end
def test_dependency_creation

View File

@ -9,6 +9,7 @@ class DependencyExpansionTests < Homebrew::TestCase
end
def setup
super
@foo = build_dep(:foo)
@bar = build_dep(:bar)
@baz = build_dep(:baz)

View File

@ -3,6 +3,7 @@ require "dependency"
class DependableTests < Homebrew::TestCase
def setup
super
@tags = ["foo", "bar", :build]
@dep = Struct.new(:tags).new(@tags).extend(Dependable)
end

View File

@ -3,6 +3,8 @@ require "descriptions"
class DescriptionsTest < Homebrew::TestCase
def setup
super
@descriptions_hash = {}
@descriptions = Descriptions.new(@descriptions_hash)
@ -12,6 +14,7 @@ class DescriptionsTest < Homebrew::TestCase
def teardown
$stdout = @old_stdout
super
end
def test_single_core_formula

View File

@ -5,12 +5,14 @@ require "diagnostic"
class DiagnosticChecksTest < Homebrew::TestCase
def setup
super
@env = ENV.to_hash
@checks = Homebrew::Diagnostic::Checks.new
end
def teardown
ENV.replace(@env)
super
end
def test_inject_file_list

View File

@ -15,6 +15,7 @@ class AbstractDownloadStrategyTests < Homebrew::TestCase
include FileUtils
def setup
super
@name = "foo"
@resource = ResourceDouble.new
@strategy = AbstractDownloadStrategy.new(@name, @resource)
@ -63,6 +64,7 @@ end
class GitHubPrivateRepositoryDownloadStrategyTests < Homebrew::TestCase
def setup
super
resource = ResourceDouble.new("https://github.com/owner/repo/archive/1.1.5.tar.gz")
ENV["HOMEBREW_GITHUB_API_TOKEN"] = "token"
GitHub.stubs(:repository).returns {}
@ -87,6 +89,7 @@ end
class GitHubPrivateRepositoryReleaseDownloadStrategyTests < Homebrew::TestCase
def setup
super
resource = ResourceDouble.new("https://github.com/owner/repo/releases/download/tag/foo_v0.1.0_darwin_amd64.tar.gz")
ENV["HOMEBREW_GITHUB_API_TOKEN"] = "token"
GitHub.stubs(:repository).returns {}
@ -138,6 +141,7 @@ class GitDownloadStrategyTests < Homebrew::TestCase
include FileUtils
def setup
super
resource = ResourceDouble.new("https://github.com/homebrew/foo")
@commit_id = 1
@strategy = GitDownloadStrategy.new("baz", resource)
@ -147,6 +151,7 @@ class GitDownloadStrategyTests < Homebrew::TestCase
def teardown
rmtree @cached_location
super
end
def git_commit_all
@ -236,6 +241,7 @@ end
class DownloadStrategyDetectorTests < Homebrew::TestCase
def setup
super
@d = DownloadStrategyDetector.new
end

View File

@ -3,6 +3,7 @@ require "formula_lock"
class FormulaLockTests < Homebrew::TestCase
def setup
super
@lock = FormulaLock.new("foo")
@lock.lock
end
@ -10,6 +11,7 @@ class FormulaLockTests < Homebrew::TestCase
def teardown
@lock.unlock
HOMEBREW_LOCK_DIR.children.each(&:unlink)
super
end
def test_locking_file_with_existing_lock_raises_error

View File

@ -21,6 +21,7 @@ class FormulaPinTests < Homebrew::TestCase
end
def setup
super
@f = FormulaDouble.new
@pin = FormulaPin.new(@f)
@f.rack.mkpath
@ -50,5 +51,6 @@ class FormulaPinTests < Homebrew::TestCase
def teardown
@f.rack.rmtree
super
end
end

View File

@ -874,6 +874,8 @@ class AliasChangeTests < Homebrew::TestCase
end
def setup
super
alias_name = "bar"
@alias_path = "#{CoreTap.instance.alias_dir}/#{alias_name}"
@ -942,6 +944,8 @@ class OutdatedVersionsTests < Homebrew::TestCase
attr_reader :f, :old_formula, :new_formula
def setup
super
@f = formula do
url "foo"
version "1.20"
@ -960,6 +964,7 @@ class OutdatedVersionsTests < Homebrew::TestCase
def teardown
formulae = [@f, @old_formula, @new_formula]
formulae.map(&:rack).select(&:exist?).each(&:rmtree)
super
end
def alias_path

View File

@ -16,6 +16,7 @@ end
class FormularyFactoryTest < Homebrew::TestCase
def setup
super
@name = "testball_bottle"
@path = CoreTap.new.formula_dir/"#{@name}.rb"
@bottle_dir = Pathname.new("#{TEST_FIXTURE_DIR}/bottles")
@ -41,6 +42,7 @@ class FormularyFactoryTest < Homebrew::TestCase
def teardown
@path.unlink
super
end
def test_factory
@ -129,6 +131,7 @@ end
class FormularyTapFactoryTest < Homebrew::TestCase
def setup
super
@name = "foo"
@tap = Tap.new "homebrew", "foo"
@path = @tap.path/"#{@name}.rb"
@ -142,6 +145,7 @@ class FormularyTapFactoryTest < Homebrew::TestCase
def teardown
@tap.path.rmtree
super
end
def test_factory_tap_formula
@ -174,6 +178,7 @@ end
class FormularyTapPriorityTest < Homebrew::TestCase
def setup
super
@name = "foo"
@core_path = CoreTap.new.formula_dir/"#{@name}.rb"
@tap = Tap.new "homebrew", "foo"
@ -190,6 +195,7 @@ class FormularyTapPriorityTest < Homebrew::TestCase
def teardown
@core_path.unlink
@tap.path.rmtree
super
end
def test_find_with_priority_core_formula

View File

@ -4,6 +4,7 @@ require "fileutils"
class GPG2RequirementTests < Homebrew::TestCase
def setup
super
@dir = Pathname.new(mktmpdir)
(@dir/"bin/gpg").write <<-EOS.undent
#!/bin/bash
@ -14,6 +15,7 @@ class GPG2RequirementTests < Homebrew::TestCase
def teardown
FileUtils.rm_rf @dir
super
end
def test_satisfied

View File

@ -3,6 +3,7 @@ require "gpg"
class GpgTest < Homebrew::TestCase
def setup
super
skip "GPG Unavailable" unless Gpg.available?
@dir = Pathname.new(mktmpdir)
end

View File

@ -20,6 +20,8 @@ class LinkTestCase < Homebrew::TestCase
end
def setup
super
@keg = setup_test_keg("foo", "1.0")
@dst = HOMEBREW_PREFIX.join("bin", "helloworld")
@nonexistent = Pathname.new("/some/nonexistent/path")
@ -43,6 +45,8 @@ class LinkTestCase < Homebrew::TestCase
rmtree HOMEBREW_PREFIX/"bin"
rmtree HOMEBREW_PREFIX/"lib"
super
end
end

View File

@ -4,6 +4,7 @@ require "resource"
class LanguagePythonTests < Homebrew::TestCase
def setup
super
@dir = Pathname.new(mktmpdir)
resource = stub("resource", stage: true)
formula_bin = @dir/"formula_bin"
@ -16,6 +17,7 @@ class LanguagePythonTests < Homebrew::TestCase
def teardown
FileUtils.rm_rf @dir
super
end
def test_virtualenv_creation

View File

@ -10,6 +10,7 @@ end
class MigratorErrorsTests < Homebrew::TestCase
def setup
super
@new_f = Testball.new("newname")
@new_f.oldname = "oldname"
@old_f = Testball.new("oldname")
@ -40,6 +41,8 @@ class MigratorTests < Homebrew::TestCase
include FileUtils
def setup
super
@new_f = Testball.new("newname")
@new_f.oldname = "oldname"
@ -93,6 +96,8 @@ class MigratorTests < Homebrew::TestCase
@new_f.unpin
HOMEBREW_LOCK_DIR.children.each(&:unlink)
super
end
def test_move_cellar

View File

@ -15,6 +15,7 @@ end
class OptionTests < Homebrew::TestCase
def setup
super
@option = Option.new("foo")
end
@ -43,6 +44,7 @@ end
class DeprecatedOptionTests < Homebrew::TestCase
def setup
super
@deprecated_option = DeprecatedOption.new("foo", "bar")
end
@ -68,6 +70,7 @@ end
class OptionsTests < Homebrew::TestCase
def setup
super
@options = Options.new
end

View File

@ -3,6 +3,7 @@ require "utils/bottles"
class OSMacBottleCollectorTests < Homebrew::TestCase
def setup
super
@collector = Utils::Bottles::Collector.new
end

View File

@ -7,11 +7,13 @@ class OSMacDependencyCollectorTests < Homebrew::TestCase
end
def setup
super
@d = DependencyCollector.new
end
def teardown
DependencyCollector.clear_cache
super
end
def test_tar_needs_xz_dependency

View File

@ -5,12 +5,14 @@ require "diagnostic"
class OSMacDiagnosticChecksTest < Homebrew::TestCase
def setup
super
@env = ENV.to_hash
@checks = Homebrew::Diagnostic::Checks.new
end
def teardown
ENV.replace(@env)
super
end
def test_check_for_other_package_managers

View File

@ -6,6 +6,8 @@ class OSMacLinkTests < Homebrew::TestCase
include FileUtils
def setup
super
keg = HOMEBREW_CELLAR.join("foo", "1.0")
keg.join("bin").mkpath
@ -34,6 +36,8 @@ class OSMacLinkTests < Homebrew::TestCase
rmtree HOMEBREW_PREFIX/"bin"
rmtree HOMEBREW_PREFIX/"lib"
super
end
def test_mach_o_files_skips_hardlinks

View File

@ -109,6 +109,7 @@ end
class ArchitectureListExtensionTests < MachOPathnameTests
def setup
super
@archs = [:i386, :x86_64, :ppc7400, :ppc64].extend(ArchitectureListExtension)
end
@ -157,11 +158,13 @@ class TextExecutableTests < Homebrew::TestCase
attr_reader :pn
def setup
super
@pn = HOMEBREW_PREFIX.join("an_executable")
end
def teardown
HOMEBREW_PREFIX.join("an_executable").unlink
super
end
def test_simple_shebang

View File

@ -4,6 +4,7 @@ require "os/mac/version"
class OSMacVersionTests < Homebrew::TestCase
def setup
super
@v = MacOS::Version.new("10.7")
end

View File

@ -111,6 +111,7 @@ end
class ExternalPatchTests < Homebrew::TestCase
def setup
super
@p = ExternalPatch.new(:p1) { url "file:///my.patch" }
end

View File

@ -23,6 +23,7 @@ class PatchingTests < Homebrew::TestCase
def teardown
@_f.clear_cache
@_f.patchlist.each { |p| p.clear_cache if p.external? }
super
end
def assert_patched(formula)

View File

@ -7,6 +7,7 @@ module PathnameTestExtension
include FileUtils
def setup
super
@src = Pathname.new(mktmpdir)
@dst = Pathname.new(mktmpdir)
@file = @src/"foo"
@ -16,6 +17,7 @@ module PathnameTestExtension
def teardown
rmtree(@src)
rmtree(@dst)
super
end
end

View File

@ -3,6 +3,7 @@ require "resource"
class ResourceTests < Homebrew::TestCase
def setup
super
@resource = Resource.new("test")
end

View File

@ -3,6 +3,7 @@ require "sandbox"
class SandboxTest < Homebrew::TestCase
def setup
super
skip "sandbox not implemented" unless Sandbox.available?
@sandbox = Sandbox.new
@dir = Pathname.new(mktmpdir)
@ -11,6 +12,7 @@ class SandboxTest < Homebrew::TestCase
def teardown
@dir.rmtree
super
end
def test_formula?

View File

@ -3,6 +3,7 @@ require "software_spec"
class SoftwareSpecTests < Homebrew::TestCase
def setup
super
@spec = SoftwareSpec.new
end
@ -136,6 +137,7 @@ end
class HeadSoftwareSpecTests < Homebrew::TestCase
def setup
super
@spec = HeadSoftwareSpec.new
end
@ -150,6 +152,7 @@ end
class BottleSpecificationTests < Homebrew::TestCase
def setup
super
@spec = BottleSpecification.new
end

View File

@ -4,6 +4,7 @@ require "cxxstdlib"
class CxxStdlibTests < Homebrew::TestCase
def setup
super
@clang = CxxStdlib.create(:libstdcxx, :clang)
@gcc = CxxStdlib.create(:libstdcxx, :gcc)
@gcc40 = CxxStdlib.create(:libstdcxx, :gcc_4_0)

View File

@ -6,6 +6,7 @@ require "test/support/helper/test_case"
class IntegrationCommandTestCase < Homebrew::TestCase
def setup
super
@cmd_id_index = 0 # Assign unique IDs to invocations of `cmd_output`.
(HOMEBREW_PREFIX/"bin").mkpath
FileUtils.touch HOMEBREW_PREFIX/"bin/brew"
@ -38,6 +39,7 @@ class IntegrationCommandTestCase < Homebrew::TestCase
coretap.path/"formula_renames.json",
].flatten
FileUtils.rm_rf paths_to_delete
super
end
def needs_test_cmd_taps

View File

@ -0,0 +1,22 @@
module Test
module Helper
module LifecycleEnforcer
def setup
@__setup_called = true
super
end
def teardown
@__teardown_called = true
super
end
def after_teardown
assert @__setup_called, "Expected setup to call `super` but didn't"
assert @__teardown_called, "Expected teardown to call `super` but didn't"
super
end
end
end
end

View File

@ -2,10 +2,12 @@ module Homebrew
class TestCase < ::Minitest::Test
require "test/support/helper/env"
require "test/support/helper/fs_leak_logger"
require "test/support/helper/lifecycle_enforcer"
require "test/support/helper/shutup"
require "test/support/helper/version_assertions"
include Test::Helper::Env
include Test::Helper::FSLeakLogger
include Test::Helper::LifecycleEnforcer
include Test::Helper::Shutup
include Test::Helper::VersionAssertions

View File

@ -4,6 +4,8 @@ require "formula"
class TabTests < Homebrew::TestCase
def setup
super
@used = Options.create(%w[--with-foo --without-bar])
@unused = Options.create(%w[--with-baz --without-qux])
@ -260,6 +262,7 @@ end
class TabLoadingTests < Homebrew::TestCase
def setup
super
@f = formula { url "foo-1.0" }
@f.prefix.mkpath
@path = @f.prefix.join(Tab::FILENAME)
@ -268,6 +271,7 @@ class TabLoadingTests < Homebrew::TestCase
def teardown
@f.rack.rmtree
super
end
def test_for_keg

View File

@ -34,6 +34,7 @@ class TapTest < Homebrew::TestCase
include FileUtils
def setup
super
@path = Tap::TAP_DIRECTORY/"homebrew/homebrew-foo"
@path.mkpath
@tap = Tap.new("Homebrew", "foo")
@ -86,6 +87,7 @@ class TapTest < Homebrew::TestCase
def teardown
@path.rmtree
super
end
def test_fetch
@ -285,6 +287,7 @@ class CoreTapTest < Homebrew::TestCase
include FileUtils
def setup
super
@repo = CoreTap.new
end

View File

@ -3,6 +3,8 @@ require "cmd/uninstall"
class UninstallTests < Homebrew::TestCase
def setup
super
@dependency = formula("dependency") { url "f-1" }
@dependent = formula("dependent") do
url "f-1"
@ -32,6 +34,7 @@ class UninstallTests < Homebrew::TestCase
f.installed_kegs.each(&:remove_opt_record)
f.rack.rmtree
end
super
end
def handle_unsatisfied_dependents

View File

@ -24,6 +24,7 @@ class ReportTests < Homebrew::TestCase
end
def setup
super
@tap = CoreTap.new
@reporter = ReporterMock.new(@tap)
@hub = ReporterHub.new

View File

@ -5,6 +5,7 @@ require "utils/shell"
class UtilTests < Homebrew::TestCase
def setup
super
@dir = Pathname.new(mktmpdir)
@env = ENV.to_hash
end
@ -12,6 +13,7 @@ class UtilTests < Homebrew::TestCase
def teardown
@dir.rmtree
ENV.replace @env
super
end
def test_ofail