mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

The changes to error ouput and logging require a few more things to be visible during installation tests. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
289 lines
9.0 KiB
Ruby
289 lines
9.0 KiB
Ruby
require 'testing_env'
|
|
require 'test/testball'
|
|
|
|
class AbstractDownloadStrategy
|
|
attr_reader :url
|
|
end
|
|
|
|
class MostlyAbstractFormula < Formula
|
|
url ''
|
|
end
|
|
|
|
class FormulaTests < Test::Unit::TestCase
|
|
include VersionAssertions
|
|
|
|
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
|
|
|
|
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
|
|
end
|
|
|
|
def test_abstract_formula
|
|
f=MostlyAbstractFormula.new
|
|
assert_equal '__UNKNOWN__', f.name
|
|
assert_raises(RuntimeError) { f.prefix }
|
|
nostdout { assert_raises(RuntimeError) { f.brew } }
|
|
end
|
|
|
|
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
|
|
end
|
|
|
|
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
|
|
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
|
|
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
|
|
|
|
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?
|
|
assert_equal 1, f.devel.mirrors.length
|
|
assert f.head.mirrors.empty?
|
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
assert !f.stable.version.detected_from_url?
|
|
assert !f.devel.version.detected_from_url?
|
|
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?
|
|
|
|
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
|
|
assert_nil f.bottle.md5
|
|
assert_nil f.bottle.sha256
|
|
|
|
assert f.bottle.version.detected_from_url?
|
|
assert_equal 0, f.bottle.revision
|
|
assert_version_equal '0.1', f.bottle.version
|
|
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
|
|
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
|
|
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
|
|
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
|
|
|
|
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
|
|
end
|