brew/Library/Homebrew/test/formulary_test.rb
Alyssa Ross 70a381a00f 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.
2017-01-21 11:34:52 +00:00

216 lines
5.7 KiB
Ruby

require "testing_env"
require "formula"
require "formula_installer"
require "utils/bottles"
class FormularyTest < Homebrew::TestCase
def test_class_naming
assert_equal "ShellFm", Formulary.class_s("shell.fm")
assert_equal "Fooxx", Formulary.class_s("foo++")
assert_equal "SLang", Formulary.class_s("s-lang")
assert_equal "PkgConfig", Formulary.class_s("pkg-config")
assert_equal "FooBar", Formulary.class_s("foo_bar")
assert_equal "OpensslAT11", Formulary.class_s("openssl@1.1")
end
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")
@bottle = @bottle_dir/"testball_bottle-0.1.#{Utils::Bottles.tag}.bottle.tar.gz"
@path.write <<-EOS.undent
class #{Formulary.class_s(@name)} < Formula
url "file://#{TEST_FIXTURE_DIR}/tarballs/testball-0.1.tbz"
sha256 TESTBALL_SHA256
bottle do
cellar :any_skip_relocation
root_url "file://#{@bottle_dir}"
sha256 "9abc8ce779067e26556002c4ca6b9427b9874d25f0cafa7028e05b5c5c410cb4" => :#{Utils::Bottles.tag}
end
def install
prefix.install "bin"
prefix.install "libexec"
end
end
EOS
end
def teardown
@path.unlink
super
end
def test_factory
assert_kind_of Formula, Formulary.factory(@name)
end
def test_factory_with_fully_qualified_name
assert_kind_of Formula, Formulary.factory("homebrew/core/#{@name}")
end
def test_formula_unavailable_error
assert_raises(FormulaUnavailableError) { Formulary.factory("not_existed_formula") }
end
def test_formula_class_unavailable_error
name = "giraffe"
path = CoreTap.new.formula_dir/"#{name}.rb"
path.write "class Wrong#{Formulary.class_s(name)} < Formula\nend\n"
assert_raises(FormulaClassUnavailableError) { Formulary.factory(name) }
ensure
path.unlink
end
def test_factory_from_path
assert_kind_of Formula, Formulary.factory(@path)
end
def test_factory_from_url
formula = shutup { Formulary.factory("file://#{@path}") }
assert_kind_of Formula, formula
ensure
formula.path.unlink
end
def test_factory_from_bottle
formula = Formulary.factory(@bottle)
assert_kind_of Formula, formula
assert_equal @bottle.realpath, formula.local_bottle_path
end
def test_factory_from_alias
alias_dir = CoreTap.instance.alias_dir
alias_dir.mkpath
alias_path = alias_dir/"foo"
FileUtils.ln_s @path, alias_path
result = Formulary.factory("foo")
assert_kind_of Formula, result
assert_equal alias_path.to_s, result.alias_path
ensure
alias_dir.rmtree
end
def test_factory_from_rack_and_from_keg
formula = Formulary.factory(@path)
installer = FormulaInstaller.new(formula)
shutup { installer.install }
keg = Keg.new(formula.prefix)
f = Formulary.from_rack(formula.rack)
assert_kind_of Formula, f
assert_kind_of Tab, f.build
f = Formulary.from_keg(keg)
assert_kind_of Formula, f
assert_kind_of Tab, f.build
ensure
keg.unlink
keg.uninstall
formula.clear_cache
formula.bottle.clear_cache
Tab.clear_cache
end
def test_load_from_contents
assert_kind_of Formula, Formulary.from_contents(@name, @path, @path.read)
end
def test_to_rack
assert_equal HOMEBREW_CELLAR/@name, Formulary.to_rack(@name)
(HOMEBREW_CELLAR/@name).mkpath
assert_equal HOMEBREW_CELLAR/@name, Formulary.to_rack(@name)
assert_raises(TapFormulaUnavailableError) { Formulary.to_rack("a/b/#{@name}") }
ensure
FileUtils.rm_rf HOMEBREW_CELLAR/@name
end
end
class FormularyTapFactoryTest < Homebrew::TestCase
def setup
super
@name = "foo"
@tap = Tap.new "homebrew", "foo"
@path = @tap.path/"#{@name}.rb"
@code = <<-EOS.undent
class #{Formulary.class_s(@name)} < Formula
url "foo-1.0"
end
EOS
@path.write @code
end
def teardown
@tap.path.rmtree
super
end
def test_factory_tap_formula
assert_kind_of Formula, Formulary.factory(@name)
end
def test_factory_tap_alias
alias_dir = @tap.path/"Aliases"
alias_dir.mkpath
FileUtils.ln_s @path, alias_dir/"bar"
assert_kind_of Formula, Formulary.factory("bar")
end
def test_tap_formula_unavailable_error
assert_raises(TapFormulaUnavailableError) { Formulary.factory("#{@tap}/not_existed_formula") }
end
def test_factory_tap_formula_with_fully_qualified_name
assert_kind_of Formula, Formulary.factory("#{@tap}/#{@name}")
end
def test_factory_ambiguity_tap_formulae
another_tap = Tap.new "homebrew", "bar"
(another_tap.path/"#{@name}.rb").write @code
assert_raises(TapFormulaAmbiguityError) { Formulary.factory(@name) }
ensure
another_tap.path.rmtree
end
end
class FormularyTapPriorityTest < Homebrew::TestCase
def setup
super
@name = "foo"
@core_path = CoreTap.new.formula_dir/"#{@name}.rb"
@tap = Tap.new "homebrew", "foo"
@tap_path = @tap.path/"#{@name}.rb"
code = <<-EOS.undent
class #{Formulary.class_s(@name)} < Formula
url "foo-1.0"
end
EOS
@core_path.write code
@tap_path.write code
end
def teardown
@core_path.unlink
@tap.path.rmtree
super
end
def test_find_with_priority_core_formula
formula = Formulary.find_with_priority(@name)
assert_kind_of Formula, formula
assert_equal @core_path, formula.path
end
def test_find_with_priority_tap_formula
@tap.pin
formula = shutup { Formulary.find_with_priority(@name) }
assert_kind_of Formula, formula
assert_equal @tap_path.realpath, formula.path
ensure
@tap.pinned_symlink_path.parent.parent.rmtree
end
end