1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
$:.unshift File.expand_path("../..", __FILE__)
$:.unshift File.expand_path("../lib", __FILE__)
require "simplecov" if ENV["HOMEBREW_TESTS_COVERAGE"]
require "global"
require "formulary"
# Test environment setup
(HOMEBREW_LIBRARY/"Taps/homebrew/homebrew-core/Formula").mkpath
%w[cache formula_cache locks cellar logs temp].each { |d| HOMEBREW_PREFIX.parent.join(d).mkpath }
# Test fixtures and files can be found relative to this path
TEST_DIRECTORY = File.dirname(File.expand_path(__FILE__))
begin
require "rubygems"
require "minitest/autorun"
require "parallel_tests/test/runtime_logger"
require "mocha/setup"
rescue LoadError
abort "Run `bundle install` or install the mocha and minitest gems before running the tests"
end
module Homebrew
module VersionAssertions
def version(v)
Version.create(v)
end
def assert_version_equal(expected, actual)
assert_equal Version.create(expected), actual
end
def assert_version_detected(expected, url, specs = {})
assert_equal expected, Version.detect(url, specs).to_s
end
def assert_version_nil(url)
assert_nil Version.parse(url)
end
end
module FSLeakLogger
def self.included(klass)
require "find"
@@log = File.open("#{__dir__}/fs_leak_log", "w")
klass.make_my_diffs_pretty!
end
def before_setup
@__files_before_test = []
Find.find(TEST_TMPDIR) { |f| @__files_before_test << f.sub(TEST_TMPDIR, "") }
super
end
def after_teardown
super
files_after_test = []
Find.find(TEST_TMPDIR) { |f| files_after_test << f.sub(TEST_TMPDIR, "") }
if @__files_before_test != files_after_test
@@log.puts location, diff(@__files_before_test, files_after_test)
end
end
end
class TestCase < ::Minitest::Test
require "test/helper/shutup"
include Test::Helper::Shutup
include VersionAssertions
include FSLeakLogger
TEST_SHA1 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze
TEST_SHA256 = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef".freeze
def formula(name = "formula_name", path = Formulary.core_path(name), spec = :stable, alias_path: nil, &block)
@_f = Class.new(Formula, &block).new(name, path, spec, alias_path: alias_path)
end
def mktmpdir(prefix_suffix = nil, &block)
Dir.mktmpdir(prefix_suffix, HOMEBREW_TEMP, &block)
end
def needs_compat
skip "Requires compat/ code" if ENV["HOMEBREW_NO_COMPAT"]
end
def needs_python
skip "Requires Python" unless which("python")
end
def assert_nothing_raised
yield
end
def assert_eql(exp, act, msg = nil)
msg = message(msg, "") { diff exp, act }
assert exp.eql?(act), msg
end
def refute_eql(exp, act, msg = nil)
msg = message(msg) do
"Expected #{mu_pp(act)} to not be eql to #{mu_pp(exp)}"
end
refute exp.eql?(act), msg
end
def dylib_path(name)
Pathname.new("#{TEST_DIRECTORY}/mach/#{name}.dylib")
end
def bundle_path(name)
Pathname.new("#{TEST_DIRECTORY}/mach/#{name}.bundle")
end
def with_environment(partial_env)
old = ENV.to_hash
ENV.update partial_env
begin
yield
ensure
ENV.replace old
end
end
# Use a stubbed {Formulary::FormulaLoader} to make a given formula be found
# when loading from {Formulary} with `ref`.
def stub_formula_loader(formula, ref = formula.full_name)
loader = mock
loader.stubs(:get_formula).returns(formula)
Formulary.stubs(:loader_for).with(ref).returns(loader)
end
end
end
|