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
|
require "testing_env"
require "formula"
require "formula_installer"
require "keg"
require "tab"
require "test/support/fixtures/testball"
require "test/support/fixtures/testball_bottle"
class InstallTests < Homebrew::TestCase
def temporary_install(formula)
refute_predicate formula, :installed?
installer = FormulaInstaller.new(formula)
shutup { installer.install }
keg = Keg.new(formula.prefix)
assert_predicate formula, :installed?
begin
Tab.clear_cache
refute_predicate Tab.for_keg(keg), :poured_from_bottle
yield formula
ensure
Tab.clear_cache
keg.unlink
keg.uninstall
formula.clear_cache
# there will be log files when sandbox is enable.
formula.logs.rmtree if formula.logs.directory?
end
refute_predicate keg, :exist?
refute_predicate formula, :installed?
end
def test_a_basic_install
ARGV << "--with-invalid_flag" # added to ensure it doesn't fail install
temporary_install(Testball.new) do |f|
# Test that things made it into the Keg
assert_predicate f.prefix+"readme", :exist?
assert_predicate f.bin, :directory?
assert_equal 3, f.bin.children.length
assert_predicate f.libexec, :directory?
assert_equal 1, f.libexec.children.length
refute_predicate f.prefix+"main.c", :exist?
refute_predicate f.prefix+"license", :exist?
# Test that things make it into the Cellar
keg = Keg.new f.prefix
keg.link
bin = HOMEBREW_PREFIX+"bin"
assert_predicate bin, :directory?
assert_equal 3, bin.children.length
assert_predicate f.prefix/".brew/testball.rb", :readable?
end
end
def test_bottle_unneeded_formula_install
DevelopmentTools.stubs(:installed?).returns(false)
formula = Testball.new
formula.stubs(:bottle_unneeded?).returns(true)
formula.stubs(:bottle_disabled?).returns(true)
refute_predicate formula, :bottled?
assert_predicate formula, :bottle_unneeded?
assert_predicate formula, :bottle_disabled?
temporary_install(formula) do |f|
assert_predicate f, :installed?
end
end
def test_not_poured_from_bottle_when_compiler_specified
assert_nil ARGV.cc
cc_arg = "--cc=clang"
ARGV << cc_arg
temporary_install(TestballBottle.new) do |f|
tab = Tab.for_formula(f)
assert_equal "clang", tab.compiler
end
end
end
class FormulaInstallerTests < Homebrew::TestCase
def test_check_install_sanity_pinned_dep
dep_name = "dependency"
dep_path = CoreTap.new.formula_dir/"#{dep_name}.rb"
dep_path.write <<-EOS.undent
class #{Formulary.class_s(dep_name)} < Formula
url "foo"
version "0.2"
end
EOS
Formulary::FORMULAE.delete(dep_path)
dependency = Formulary.factory(dep_name)
dependent = formula do
url "foo"
version "0.5"
depends_on dependency.name.to_s
end
dependency.prefix("0.1").join("bin/a").mkpath
HOMEBREW_PINNED_KEGS.mkpath
FileUtils.ln_s dependency.prefix("0.1"), HOMEBREW_PINNED_KEGS/dep_name
dependency_keg = Keg.new(dependency.prefix("0.1"))
dependency_keg.link
assert_predicate dependency_keg, :linked?
assert_predicate dependency, :pinned?
fi = FormulaInstaller.new(dependent)
assert_raises(CannotInstallFormulaError) { fi.check_install_sanity }
ensure
dependency_keg.unlink
Formulary::FORMULAE.delete(dep_path)
end
end
|