
Rationale: some software (e.g. GNU Coreutils, GnuTLS 3.x), have started distributing _only_ xz-compressed tarballs. There is no system XZ utility provided by OS X, but it is necessary so that we can continue to provide formulae for this software. If XZUtils isn't installed, we abort and prompt the user to `brew install xz`. The `xz` command itself doesn't do any untarring, so we write the decompressed archive to stdout and pipe it to tar.
197 lines
4.6 KiB
Ruby
197 lines
4.6 KiB
Ruby
require 'testing_env'
|
|
|
|
require 'extend/ARGV' # needs to be after test/unit to avoid conflict with OptionsParser
|
|
ARGV.extend(HomebrewArgvExtension)
|
|
|
|
require 'test/testball'
|
|
require 'utils'
|
|
|
|
class MockFormula <Formula
|
|
def initialize url
|
|
@url=url
|
|
@homepage = 'http://example.com/'
|
|
super 'test'
|
|
end
|
|
end
|
|
|
|
class TestZip <Formula
|
|
def initialize
|
|
zip=HOMEBREW_CACHE.parent+'test-0.1.zip'
|
|
Kernel.system '/usr/bin/zip', '-0', zip, ABS__FILE__
|
|
@url="file://#{zip}"
|
|
@homepage = 'http://example.com/'
|
|
super 'testzip'
|
|
end
|
|
end
|
|
|
|
# All other tests so far -- feel free to break them out into
|
|
# separate TestCase classes.
|
|
|
|
class BeerTasting < Test::Unit::TestCase
|
|
def test_supported_compressed_types
|
|
assert_nothing_raised do
|
|
MockFormula.new 'test-0.1.tar.gz'
|
|
MockFormula.new 'test-0.1.tar.bz2'
|
|
MockFormula.new 'test-0.1.tar.xz'
|
|
MockFormula.new 'test-0.1.tgz'
|
|
MockFormula.new 'test-0.1.bgz'
|
|
MockFormula.new 'test-0.1.txz'
|
|
MockFormula.new 'test-0.1.zip'
|
|
end
|
|
end
|
|
|
|
FOOBAR='foo-bar'
|
|
def test_formula_funcs
|
|
classname=Formula.class_s(FOOBAR)
|
|
path=Formula.path(FOOBAR)
|
|
|
|
assert_equal "FooBar", classname
|
|
assert_match Regexp.new("^#{HOMEBREW_PREFIX}/Library/Formula"), path.to_s
|
|
|
|
path=HOMEBREW_PREFIX+"Library/Formula/#{FOOBAR}.rb"
|
|
path.dirname.mkpath
|
|
File.open(path, 'w') do |f|
|
|
f << %{
|
|
require 'formula'
|
|
class #{classname} < Formula
|
|
@url=''
|
|
def initialize(*args)
|
|
@homepage = 'http://example.com/'
|
|
super
|
|
end
|
|
end
|
|
}
|
|
end
|
|
|
|
assert_not_nil Formula.factory(FOOBAR)
|
|
end
|
|
|
|
def test_zip
|
|
nostdout { assert_nothing_raised { TestZip.new.brew {} } }
|
|
end
|
|
|
|
# needs resurrecting
|
|
# def test_no_ARGV_dupes
|
|
# ARGV.reset
|
|
# ARGV << 'foo' << 'foo'
|
|
# n=0
|
|
# ARGV.named.each{|f| n+=1 if f == 'foo'}
|
|
# assert_equal 1, n
|
|
# end
|
|
|
|
def test_brew_h
|
|
require 'cmd/info'
|
|
require 'cmd/prune'
|
|
require 'cleaner'
|
|
|
|
nostdout do
|
|
assert_nothing_raised do
|
|
f=TestBall.new
|
|
Homebrew.info_formula f
|
|
Cleaner.new f
|
|
Homebrew.prune
|
|
#TODO test diy function too
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_brew_cleanup
|
|
require 'cmd/cleanup'
|
|
|
|
f1=TestBall.new
|
|
f1.instance_eval { @version = "0.1" }
|
|
f2=TestBall.new
|
|
f2.instance_eval { @version = "0.2" }
|
|
f3=TestBall.new
|
|
f3.instance_eval { @version = "0.3" }
|
|
|
|
nostdout do
|
|
f1.brew { f1.install }
|
|
f2.brew { f2.install }
|
|
f3.brew { f3.install }
|
|
end
|
|
|
|
assert f1.installed?
|
|
assert f2.installed?
|
|
assert f3.installed?
|
|
|
|
nostdout do
|
|
Homebrew.cleanup_formula f3
|
|
end
|
|
|
|
assert !f1.installed?
|
|
assert !f2.installed?
|
|
assert f3.installed?
|
|
end
|
|
|
|
def test_my_float_assumptions
|
|
# this may look ridiculous but honestly there's code in brewit that depends on
|
|
# this behaviour so I wanted to be certain Ruby floating points are behaving
|
|
f='10.6'.to_f
|
|
assert_equal 10.6, f
|
|
assert f >= 10.6
|
|
assert f <= 10.6
|
|
assert_equal 10.5, f-0.1
|
|
assert_equal 10.7, f+0.1
|
|
end
|
|
|
|
def test_pathname_version
|
|
d=HOMEBREW_CELLAR+'foo-0.1.9'
|
|
d.mkpath
|
|
assert_equal '0.1.9', d.version
|
|
end
|
|
|
|
def test_pathname_plus_yeast
|
|
nostdout do
|
|
assert_nothing_raised do
|
|
assert !Pathname.getwd.rmdir_if_possible
|
|
assert !Pathname.getwd.abv.empty?
|
|
|
|
abcd=orig_abcd=HOMEBREW_CACHE+'abcd'
|
|
FileUtils.cp ABS__FILE__, abcd
|
|
abcd=HOMEBREW_PREFIX.install abcd
|
|
assert (HOMEBREW_PREFIX+orig_abcd.basename).exist?
|
|
assert abcd.exist?
|
|
assert_equal HOMEBREW_PREFIX+'abcd', abcd
|
|
|
|
assert_raises(RuntimeError) {abcd.write 'CONTENT'}
|
|
abcd.unlink
|
|
abcd.write 'HELLOWORLD'
|
|
assert_equal 'HELLOWORLD', File.read(abcd)
|
|
|
|
assert !orig_abcd.exist?
|
|
rv=abcd.cp orig_abcd
|
|
assert orig_abcd.exist?
|
|
assert_equal rv, orig_abcd
|
|
|
|
orig_abcd.unlink
|
|
assert !orig_abcd.exist?
|
|
abcd.cp HOMEBREW_CACHE
|
|
assert orig_abcd.exist?
|
|
|
|
HOMEBREW_CACHE.chmod_R 0777
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_pathname_properties
|
|
foo1 = HOMEBREW_CACHE/'foo-0.1.tar.gz'
|
|
|
|
assert_equal '.tar.gz', foo1.extname
|
|
assert_equal 'foo-0.1', foo1.stem
|
|
assert_equal '0.1', foo1.version
|
|
end
|
|
|
|
class MockMockFormula < Struct.new(:name); end
|
|
|
|
def test_formula_equality
|
|
f = MockFormula.new('http://example.com/test-0.1.tgz')
|
|
g = MockMockFormula.new('test')
|
|
|
|
assert f == f
|
|
assert f == g
|
|
assert f.eql? f
|
|
assert (not (f.eql? g))
|
|
end
|
|
end
|