mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
265 lines
6.0 KiB
Ruby
265 lines
6.0 KiB
Ruby
require 'testing_env'
|
|
require 'test/testball'
|
|
|
|
class FormulaTests < Test::Unit::TestCase
|
|
include VersionAssertions
|
|
|
|
def test_formula_path_initialization
|
|
name = "formula_name"
|
|
klass = Class.new(Formula) { url "http://example.com/foo-1.0.tar.gz" }
|
|
|
|
f = klass.new(name)
|
|
assert_equal Formula.path(name), f.path
|
|
|
|
f = klass.new(name, path = Object.new)
|
|
assert_equal path, f.path
|
|
|
|
f = klass.new(name, nil)
|
|
assert_nil f.path
|
|
end
|
|
|
|
def test_prefix
|
|
f = TestBall.new
|
|
assert_equal HOMEBREW_CELLAR/f.name/'0.1', f.prefix
|
|
assert_kind_of Pathname, f.prefix
|
|
end
|
|
|
|
def test_revised_prefix
|
|
f = Class.new(TestBall) { revision 1 }.new
|
|
assert_equal HOMEBREW_CELLAR/f.name/'0.1_1', f.prefix
|
|
end
|
|
|
|
def test_installed?
|
|
f = TestBall.new
|
|
f.stubs(:installed_prefix).returns(stub(:directory? => false))
|
|
assert !f.installed?
|
|
|
|
f.stubs(:installed_prefix).returns(
|
|
stub(:directory? => true, :children => [])
|
|
)
|
|
assert !f.installed?
|
|
|
|
f.stubs(:installed_prefix).returns(
|
|
stub(:directory? => true, :children => [stub])
|
|
)
|
|
assert f.installed?
|
|
end
|
|
|
|
def test_installed_prefix
|
|
f = Class.new(TestBall).new
|
|
assert_equal f.prefix, f.installed_prefix
|
|
end
|
|
|
|
def test_installed_prefix_head_installed
|
|
f = formula do
|
|
head 'foo'
|
|
devel do
|
|
url 'foo'
|
|
version '1.0'
|
|
end
|
|
end
|
|
prefix = HOMEBREW_CELLAR+f.name+f.head.version
|
|
prefix.mkpath
|
|
assert_equal prefix, f.installed_prefix
|
|
ensure
|
|
prefix.rmtree
|
|
end
|
|
|
|
def test_installed_prefix_devel_installed
|
|
f = formula do
|
|
head 'foo'
|
|
devel do
|
|
url 'foo'
|
|
version '1.0'
|
|
end
|
|
end
|
|
prefix = HOMEBREW_CELLAR+f.name+f.devel.version
|
|
prefix.mkpath
|
|
assert_equal prefix, f.installed_prefix
|
|
ensure
|
|
prefix.rmtree
|
|
end
|
|
|
|
def test_installed_prefix_stable_installed
|
|
f = formula do
|
|
head 'foo'
|
|
devel do
|
|
url 'foo'
|
|
version '1.0-devel'
|
|
end
|
|
end
|
|
prefix = HOMEBREW_CELLAR+f.name+f.version
|
|
prefix.mkpath
|
|
assert_equal prefix, f.installed_prefix
|
|
ensure
|
|
prefix.rmtree
|
|
end
|
|
|
|
def test_installed_prefix_head_active_spec
|
|
ARGV.stubs(:build_head? => true)
|
|
|
|
f = formula do
|
|
head 'foo'
|
|
devel do
|
|
url 'foo'
|
|
version '1.0-devel'
|
|
end
|
|
end
|
|
prefix = HOMEBREW_CELLAR+f.name+f.head.version
|
|
assert_equal prefix, f.installed_prefix
|
|
end
|
|
|
|
def test_installed_prefix_devel_active_spec
|
|
ARGV.stubs(:build_devel? => true)
|
|
|
|
f = formula do
|
|
head 'foo'
|
|
devel do
|
|
url 'foo'
|
|
version '1.0-devel'
|
|
end
|
|
end
|
|
prefix = HOMEBREW_CELLAR+f.name+f.devel.version
|
|
assert_equal prefix, f.installed_prefix
|
|
end
|
|
|
|
def test_equality
|
|
x = TestBall.new
|
|
y = TestBall.new
|
|
assert x == y
|
|
assert y == x
|
|
assert x.eql?(y)
|
|
assert y.eql?(x)
|
|
assert x.hash == y.hash
|
|
end
|
|
|
|
def test_inequality
|
|
x = TestBall.new("foo")
|
|
y = TestBall.new("bar")
|
|
assert x != y
|
|
assert y != x
|
|
assert x.hash != y.hash
|
|
assert !x.eql?(y)
|
|
assert !y.eql?(x)
|
|
end
|
|
|
|
def test_comparison_with_non_formula_objects_does_not_raise
|
|
assert_not_equal TestBall.new, Object.new
|
|
end
|
|
|
|
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')
|
|
end
|
|
|
|
def test_formula_spec_integration
|
|
f = Class.new(Formula) do
|
|
homepage 'http://example.com'
|
|
url 'file:///foo.com/testball-0.1.tbz'
|
|
mirror 'file:///foo.org/testball-0.1.tbz'
|
|
sha1 TEST_SHA1
|
|
|
|
head 'https://github.com/Homebrew/homebrew.git', :tag => 'foo'
|
|
|
|
devel do
|
|
url 'file:///foo.com/testball-0.2.tbz'
|
|
mirror 'file:///foo.org/testball-0.2.tbz'
|
|
sha256 TEST_SHA256
|
|
end
|
|
|
|
bottle { sha1 TEST_SHA1 => bottle_tag }
|
|
|
|
def initialize(name="spec_test_ball", path=nil)
|
|
super
|
|
end
|
|
end.new
|
|
|
|
assert_equal 'http://example.com', f.homepage
|
|
assert_version_equal '0.1', f.version
|
|
assert_equal f.stable, f.active_spec
|
|
|
|
assert_instance_of SoftwareSpec, f.stable
|
|
assert_instance_of SoftwareSpec, f.devel
|
|
assert_instance_of HeadSoftwareSpec, f.head
|
|
end
|
|
|
|
def test_path
|
|
name = 'foo-bar'
|
|
assert_equal Pathname.new("#{HOMEBREW_LIBRARY}/Formula/#{name}.rb"), Formula.path(name)
|
|
end
|
|
|
|
def test_factory
|
|
name = 'foo-bar'
|
|
path = HOMEBREW_PREFIX+"Library/Formula/#{name}.rb"
|
|
path.dirname.mkpath
|
|
File.open(path, 'w') do |f|
|
|
f << %{
|
|
require 'formula'
|
|
class #{Formulary.class_s(name)} < Formula
|
|
url 'foo-1.0'
|
|
def initialize(*args)
|
|
super
|
|
end
|
|
end
|
|
}
|
|
end
|
|
assert_kind_of Formula, Formula.factory(name)
|
|
ensure
|
|
path.unlink
|
|
end
|
|
|
|
def test_class_specs_are_always_initialized
|
|
f = formula { url 'foo-1.0' }
|
|
|
|
%w{stable devel head}.each do |spec|
|
|
assert_kind_of SoftwareSpec, f.class.send(spec)
|
|
end
|
|
end
|
|
|
|
def test_incomplete_instance_specs_are_not_accessible
|
|
f = formula { url 'foo-1.0' }
|
|
|
|
%w{devel head}.each { |spec| assert_nil f.send(spec) }
|
|
end
|
|
|
|
def test_honors_attributes_declared_before_specs
|
|
f = formula do
|
|
url 'foo-1.0'
|
|
depends_on 'foo'
|
|
devel { url 'foo-1.1' }
|
|
end
|
|
|
|
%w{stable devel head}.each do |spec|
|
|
assert_equal 'foo', f.class.send(spec).deps.first.name
|
|
end
|
|
end
|
|
|
|
def test_simple_version
|
|
assert_equal PkgVersion.parse('1.0'), formula { url 'foo-1.0.bar' }.pkg_version
|
|
end
|
|
|
|
def test_version_with_revision
|
|
f = formula do
|
|
url 'foo-1.0.bar'
|
|
revision 1
|
|
end
|
|
|
|
assert_equal PkgVersion.parse('1.0_1'), f.pkg_version
|
|
end
|
|
|
|
def test_head_ignores_revisions
|
|
ARGV.stubs(:build_head?).returns(true)
|
|
|
|
f = formula do
|
|
url 'foo-1.0.bar'
|
|
revision 1
|
|
head 'foo'
|
|
end
|
|
|
|
assert_equal PkgVersion.parse('HEAD'), f.pkg_version
|
|
end
|
|
end
|