Allow tests to be specified in the DSL

Tests can now be specified as a block in the DSL. A temporary test
directory is set up automatically when calling Formula#test. The
semantics of the test remain the same: the block can either raise an
exception or return false to signal failure.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
Jack Nagel 2012-11-01 14:40:59 -05:00
parent 896f53d78b
commit 1c99c68594

View File

@ -15,9 +15,9 @@ class Formula
attr_reader :name, :path, :homepage, :downloader
attr_reader :stable, :bottle, :devel, :head, :active_spec
# The build folder, usually in /tmp.
# Will only be non-nil during the stage method.
attr_reader :buildpath
# The current working directory during builds and tests.
# Will only be non-nil inside #stage and #test.
attr_reader :buildpath, :testpath
# Homebrew determines the name
def initialize name='__UNKNOWN__', path=nil
@ -586,6 +586,16 @@ public
@active_spec.verify_download_integrity(fn)
end
def test
ret = nil
mktemp do
@testpath = Pathname.pwd
ret = instance_eval(&self.class.test)
@testpath = nil
end
ret
end
private
def stage
@ -777,6 +787,11 @@ private
CompilerFailure.new(compiler)
end
end
def test &block
return @test unless block_given?
@test = block
end
end
end