forked from Homebrew/homebrew-cask
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_helper.rb
161 lines (130 loc) · 4.23 KB
/
test_helper.rb
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
require 'bundler'
require 'bundler/setup'
require 'pathname'
if ENV['COVERAGE']
require 'coveralls'
Coveralls.wear_merged!
end
# just in case
if RUBY_VERSION.to_i < 2
raise 'brew-cask: Ruby 2.0 or greater is required.'
end
# add homebrew-cask lib to load path
brew_cask_path = Pathname.new(File.expand_path(__FILE__+'/../../'))
casks_path = brew_cask_path.join('Casks')
lib_path = brew_cask_path.join('lib')
$:.push(lib_path)
# todo: removeme, this is transitional
require 'vendor/homebrew-fork/testing_env'
# force some environment variables
ENV['HOMEBREW_NO_EMOJI'] = '1'
ENV['HOMEBREW_CASK_OPTS'] = nil
# todo temporary, copied from old Homebrew, this method is now moved inside a class
def shutup
if ENV.has_key?('VERBOSE_TESTS')
yield
else
begin
tmperr = $stderr.clone
tmpout = $stdout.clone
$stderr.reopen '/dev/null', 'w'
$stdout.reopen '/dev/null', 'w'
yield
ensure
$stderr.reopen tmperr
$stdout.reopen tmpout
end
end
end
def sudo(*args)
%w[/usr/bin/sudo -E --] + Array(args).flatten
end
# making homebrew's cache dir allows us to actually download Casks in tests
HOMEBREW_CACHE.mkpath
HOMEBREW_CACHE.join('Casks').mkpath
# must be called after testing_env so at_exit hooks are in proper order
require 'minitest/autorun'
require 'minitest/reporters'
Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
# Force mocha to patch MiniTest since we have both loaded thanks to homebrew's testing_env
require 'mocha/api'
require 'mocha/integration/mini_test'
Mocha::Integration::MiniTest.activate
# our baby
require 'hbc'
# override Homebrew locations
Hbc.homebrew_prefix = Pathname.new(TEST_TMPDIR).join('prefix')
Hbc.homebrew_repository = Hbc.homebrew_prefix
Hbc.homebrew_tapspath = nil
# Look for Casks in testcasks by default. It is elsewhere required that
# the string "test" appear in the directory name.
Hbc.default_tap = 'caskroom/homebrew-testcasks'
# our own testy caskroom
Hbc.caskroom = Hbc.homebrew_prefix.join('TestCaskroom')
class TestHelper
# helpers for test Casks to reference local files easily
def self.local_binary_path(name)
File.expand_path(File.join(File.dirname(__FILE__), 'support', 'binaries', name))
end
def self.local_binary_url(name)
'file://' + local_binary_path(name)
end
def self.test_cask
@test_cask ||= Hbc.load('basic-cask')
end
def self.fake_fetcher
Hbc::FakeFetcher
end
def self.fake_response_for(*args)
Hbc::FakeFetcher.fake_response_for(*args)
end
def self.must_output(test, lambda, expected)
out, err = test.capture_subprocess_io do
lambda.call
end
if expected.is_a? Regexp
(out+err).chomp.must_match expected
else
(out+err).chomp.must_equal expected.gsub(/^ */, '')
end
end
def self.valid_alias?(candidate)
return false unless candidate.symlink?
candidate.readlink.exist?
end
def self.install_without_artifacts(cask)
Hbc::Installer.new(cask).tap do |i|
shutup do
i.download
i.extract_primary_container
end
end
end
end
# Extend MiniTest API with support for RSpec-style shared examples
require 'support/shared_examples'
require 'support/shared_examples/staged.rb'
require 'support/fake_fetcher'
require 'support/fake_dirs'
require 'support/fake_system_command'
require 'support/cleanup'
require 'support/never_sudo_system_command'
require 'tmpdir'
require 'tempfile'
# pretend like we installed the homebrew-cask tap
project_root = Pathname.new(File.expand_path("#{File.dirname(__FILE__)}/../"))
taps_dest = Hbc.homebrew_prefix.join(*%w{Library Taps caskroom})
# create directories
FileUtils.mkdir_p taps_dest
FileUtils.mkdir_p Hbc.homebrew_prefix.join('bin')
FileUtils.ln_s project_root, taps_dest.join('homebrew-cask')
# Common superclass for test Casks for when we need to filter them out
module Hbc
class TestCask < Cask; end
end
# jack in some optional utilities
FileUtils.ln_s '/usr/local/bin/cabextract', Hbc.homebrew_prefix.join('bin/cabextract')
FileUtils.ln_s '/usr/local/bin/unar', Hbc.homebrew_prefix.join('bin/unar')
FileUtils.ln_s '/usr/local/bin/lsar', Hbc.homebrew_prefix.join('bin/lsar')
# also jack in some test Casks
FileUtils.ln_s project_root.join('test', 'support'), taps_dest.join('homebrew-testcasks')