brew/Library/Homebrew/test/test_formula.rb

289 lines
9.0 KiB
Ruby
Raw Normal View History

2010-03-16 22:33:13 -07:00
require 'testing_env'
require 'test/testball'
2011-09-16 11:04:12 -07:00
class AbstractDownloadStrategy
attr_reader :url
end
2010-03-16 22:33:13 -07:00
class MostlyAbstractFormula < Formula
url ''
2010-03-16 22:33:13 -07:00
end
class FormulaTests < Test::Unit::TestCase
include VersionAssertions
2010-03-16 22:33:13 -07:00
def test_prefix
nostdout do
TestBall.new.brew do |f|
assert_equal File.expand_path(f.prefix), (HOMEBREW_CELLAR+f.name+'0.1').to_s
assert_kind_of Pathname, f.prefix
end
end
end
2010-03-16 22:33:13 -07:00
def test_class_naming
assert_equal 'ShellFm', Formula.class_s('shell.fm')
assert_equal 'Fooxx', Formula.class_s('foo++')
assert_equal 'SLang', Formula.class_s('s-lang')
assert_equal 'PkgConfig', Formula.class_s('pkg-config')
assert_equal 'FooBar', Formula.class_s('foo_bar')
end
def test_cant_override_brew
assert_raises(RuntimeError) do
eval <<-EOS
class TestBallOverrideBrew < Formula
def initialize
super "foo"
end
def brew
end
end
EOS
end
2010-03-16 22:33:13 -07:00
end
2010-03-16 22:33:13 -07:00
def test_abstract_formula
f=MostlyAbstractFormula.new
assert_equal '__UNKNOWN__', f.name
assert_raises(RuntimeError) { f.prefix }
nostdout { assert_raises(RuntimeError) { f.brew } }
end
2011-09-16 11:04:12 -07:00
def test_mirror_support
HOMEBREW_CACHE.mkpath unless HOMEBREW_CACHE.exist?
nostdout do
f = TestBallWithMirror.new
tarball, downloader = f.fetch
assert_equal f.url, "file:///#{TEST_FOLDER}/bad_url/testball-0.1.tbz"
assert_equal downloader.url, "file:///#{TEST_FOLDER}/tarballs/testball-0.1.tbz"
end
2011-09-16 11:04:12 -07:00
end
2012-04-05 21:09:24 -05:00
def test_formula_specs
f = SpecTestBall.new
assert_equal 'http://example.com', f.homepage
assert_equal 'file:///foo.com/testball-0.1.tbz', f.url
assert_equal 1, f.mirrors.length
assert_version_equal '0.1', f.version
2012-04-05 21:09:24 -05:00
assert_equal f.stable, f.active_spec
assert_equal CurlDownloadStrategy, f.download_strategy
assert_instance_of CurlDownloadStrategy, f.downloader
assert_instance_of SoftwareSpec, f.stable
assert_instance_of Bottle, f.bottle
assert_instance_of SoftwareSpec, f.devel
assert_instance_of HeadSoftwareSpec, f.head
assert_equal 'file:///foo.com/testball-0.1.tbz', f.stable.url
assert_equal "https://downloads.sf.net/project/machomebrew/Bottles/spectestball-0.1.#{MacOS.cat}.bottle.tar.gz",
f.bottle.url
assert_equal 'file:///foo.com/testball-0.2.tbz', f.devel.url
assert_equal 'https://github.com/mxcl/homebrew.git', f.head.url
assert_nil f.stable.specs
assert_nil f.bottle.specs
assert_nil f.devel.specs
assert_equal({ :tag => 'foo' }, f.head.specs)
assert_equal CurlDownloadStrategy, f.stable.download_strategy
assert_equal CurlBottleDownloadStrategy, f.bottle.download_strategy
assert_equal CurlDownloadStrategy, f.devel.download_strategy
assert_equal GitDownloadStrategy, f.head.download_strategy
assert_instance_of Checksum, f.stable.checksum
assert_instance_of Checksum, f.bottle.checksum
assert_instance_of Checksum, f.devel.checksum
assert !f.stable.checksum.empty?
assert !f.bottle.checksum.empty?
assert !f.devel.checksum.empty?
assert_nil f.head.checksum
assert_equal :sha1, f.stable.checksum.hash_type
assert_equal :sha1, f.bottle.checksum.hash_type
assert_equal :sha256, f.devel.checksum.hash_type
2012-04-05 21:09:24 -05:00
assert_equal case MacOS.cat
when :snowleopard then 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'
when :lion then 'baadf00dbaadf00dbaadf00dbaadf00dbaadf00d'
when :mountainlion then '8badf00d8badf00d8badf00d8badf00d8badf00d'
end, f.bottle.checksum.hexdigest
assert_match /[0-9a-fA-F]{40}/, f.stable.checksum.hexdigest
assert_match /[0-9a-fA-F]{64}/, f.devel.checksum.hexdigest
2012-04-05 21:09:24 -05:00
assert_nil f.stable.md5
assert_nil f.stable.sha256
assert_nil f.bottle.md5
assert_nil f.bottle.sha256
assert_nil f.devel.md5
assert_nil f.devel.sha1
assert_equal 1, f.stable.mirrors.length
assert f.bottle.mirrors.empty?
2012-04-05 21:09:24 -05:00
assert_equal 1, f.devel.mirrors.length
assert f.head.mirrors.empty?
2012-04-05 21:09:24 -05:00
2012-07-10 16:10:16 -05:00
assert f.stable.version.detected_from_url?
assert f.bottle.version.detected_from_url?
assert f.devel.version.detected_from_url?
assert_version_equal '0.1', f.stable.version
assert_version_equal '0.1', f.bottle.version
assert_version_equal '0.2', f.devel.version
assert_version_equal 'HEAD', f.head.version
2012-04-05 21:09:24 -05:00
assert_equal 0, f.bottle.revision
end
def test_devel_active_spec
ARGV.push '--devel'
f = SpecTestBall.new
assert_equal f.devel, f.active_spec
assert_version_equal '0.2', f.version
2012-04-05 21:09:24 -05:00
assert_equal 'file:///foo.com/testball-0.2.tbz', f.url
assert_equal CurlDownloadStrategy, f.download_strategy
assert_instance_of CurlDownloadStrategy, f.downloader
ARGV.delete '--devel'
end
def test_head_active_spec
ARGV.push '--HEAD'
f = SpecTestBall.new
assert_equal f.head, f.active_spec
assert_version_equal 'HEAD', f.version
2012-04-05 21:09:24 -05:00
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
assert_instance_of GitDownloadStrategy, f.downloader
ARGV.delete '--HEAD'
end
def test_explicit_version_spec
f = ExplicitVersionSpecTestBall.new
assert_version_equal '0.3', f.version
assert_version_equal '0.3', f.stable.version
assert_version_equal '0.4', f.devel.version
2012-07-10 16:10:16 -05:00
assert !f.stable.version.detected_from_url?
assert !f.devel.version.detected_from_url?
2012-04-05 21:09:24 -05:00
end
def test_old_bottle_specs
f = OldBottleSpecTestBall.new
case MacOS.cat
when :lion
assert_instance_of Bottle, f.bottle
assert_equal CurlBottleDownloadStrategy, f.bottle.download_strategy
assert_nil f.bottle.specs
assert f.bottle.mirrors.empty?
2012-04-05 21:09:24 -05:00
assert_equal 'file:///foo.com/testball-0.1-bottle.tar.gz', f.bottle.url
assert_instance_of Checksum, f.bottle.checksum
assert_equal :sha1, f.bottle.checksum.hash_type
assert !f.bottle.checksum.empty?
assert_equal 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef', f.bottle.sha1.hexdigest
2012-04-05 21:09:24 -05:00
assert_nil f.bottle.md5
assert_nil f.bottle.sha256
2012-07-10 16:10:16 -05:00
assert f.bottle.version.detected_from_url?
2012-04-05 21:09:24 -05:00
assert_equal 0, f.bottle.revision
assert_version_equal '0.1', f.bottle.version
2012-04-05 21:09:24 -05:00
else
assert_nil f.bottle
end
end
def test_ancient_bottle_specs
f = AncientBottleSpecTestBall.new
assert_nil f.bottle
end
def test_head_only_specs
f = HeadOnlySpecTestBall.new
assert_not_nil f.head
assert_nil f.stable
assert_nil f.bottle
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
2012-04-05 21:09:24 -05:00
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
assert_instance_of GitDownloadStrategy, f.downloader
assert_instance_of HeadSoftwareSpec, f.head
end
def test_incomplete_stable_specs
f = IncompleteStableSpecTestBall.new
assert_not_nil f.head
assert_nil f.stable
assert_nil f.bottle
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
2012-04-05 21:09:24 -05:00
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
assert_instance_of GitDownloadStrategy, f.downloader
assert_instance_of HeadSoftwareSpec, f.head
end
def test_head_only_with_version_specs
f = IncompleteStableSpecTestBall.new
assert_not_nil f.head
assert_nil f.stable
assert_nil f.bottle
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
2012-04-05 21:09:24 -05:00
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
assert_instance_of GitDownloadStrategy, f.downloader
assert_instance_of HeadSoftwareSpec, f.head
end
def test_explicit_strategy_specs
f = ExplicitStrategySpecTestBall.new
assert_not_nil f.stable
assert_not_nil f.devel
assert_not_nil f.head
assert_equal f.stable, f.active_spec
assert_nil f.stable.checksum
assert_nil f.devel.checksum
assert_nil f.head.checksum
2012-04-05 21:09:24 -05:00
assert_equal MercurialDownloadStrategy, f.stable.download_strategy
assert_equal BazaarDownloadStrategy, f.devel.download_strategy
assert_equal SubversionDownloadStrategy, f.head.download_strategy
assert_equal({ :tag => '0.2' }, f.stable.specs)
assert_equal({ :tag => '0.3' }, f.devel.specs)
assert f.head.specs.empty?
end
def test_revised_bottle_specs
f = RevisedBottleSpecTestBall.new
assert_equal 1, f.bottle.revision
assert_equal case MacOS.cat
when :snowleopard then 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'
when :lion then 'baadf00dbaadf00dbaadf00dbaadf00dbaadf00d'
when :mountainlion then '8badf00d8badf00d8badf00d8badf00d8badf00d'
end, f.bottle.checksum.hexdigest
end
def test_custom_version_scheme
f = CustomVersionSchemeTestBall.new
assert_version_equal '1.0', f.version
assert_instance_of CustomVersionScheme, f.version
end
2010-03-16 22:33:13 -07:00
end