diff options
| author | Mike McQuaid | 2016-09-09 08:30:26 +0100 |
|---|---|---|
| committer | GitHub | 2016-09-09 08:30:26 +0100 |
| commit | 930bcb7c52523a1e03a1de132192ad4cdd74ce7a (patch) | |
| tree | c91de0dfb23f75507005deccbc1cd51458aad66d /Library/Homebrew/dev-cmd/test.rb | |
| parent | 1d66cdd3ade841c6b7cd8a71d4b71d5426d00a58 (diff) | |
| parent | 027086d67386a58b06f3df92b9168dcb0319ef0e (diff) | |
| download | brew-930bcb7c52523a1e03a1de132192ad4cdd74ce7a.tar.bz2 | |
Merge pull request #881 from MikeMcQuaid/dev-cmd-sticky-homebrew-developer
Set HOMEBREW_DEVELOPER automatically
Diffstat (limited to 'Library/Homebrew/dev-cmd/test.rb')
| -rw-r--r-- | Library/Homebrew/dev-cmd/test.rb | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Library/Homebrew/dev-cmd/test.rb b/Library/Homebrew/dev-cmd/test.rb new file mode 100644 index 000000000..a80fa5e4f --- /dev/null +++ b/Library/Homebrew/dev-cmd/test.rb @@ -0,0 +1,89 @@ +#: * `test` [`--devel`|`--HEAD`] [`--debug`] [`--keep-tmp`] <formula>: +#: A few formulae provide a test method. `brew test` <formula> runs this +#: test method. There is no standard output or return code, but it should +#: generally indicate to the user if something is wrong with the installed +#: formula. +#: +#: To test the development or head version of a formula, use `--devel` or +#: `--HEAD`. +#: +#: If `--debug` is passed and the test fails, an interactive debugger will be +#: launched with access to IRB or a shell inside the temporary test directory. +#: +#: If `--keep-tmp` is passed, the temporary files created for the test are +#: not deleted. +#: +#: Example: `brew install jruby && brew test jruby` + +require "extend/ENV" +require "formula_assertions" +require "sandbox" +require "timeout" + +module Homebrew + def test + raise FormulaUnspecifiedError if ARGV.named.empty? + + ARGV.resolved_formulae.each do |f| + # Cannot test uninstalled formulae + unless f.installed? + ofail "Testing requires the latest version of #{f.full_name}" + next + end + + # Cannot test formulae without a test method + unless f.test_defined? + ofail "#{f.full_name} defines no test" + next + end + + puts "Testing #{f.full_name}" + + env = ENV.to_hash + + begin + args = %W[ + #{RUBY_PATH} + -W0 + -I #{HOMEBREW_LOAD_PATH} + -- + #{HOMEBREW_LIBRARY_PATH}/test.rb + #{f.path} + ].concat(ARGV.options_only) + + if f.head? + args << "--HEAD" + elsif f.devel? + args << "--devel" + end + + Sandbox.print_sandbox_message if Sandbox.test? + + Utils.safe_fork do + if Sandbox.test? + sandbox = Sandbox.new + f.logs.mkpath + sandbox.record_log(f.logs/"test.sandbox.log") + sandbox.allow_write_temp_and_cache + sandbox.allow_write_log(f) + sandbox.allow_write_xcode + sandbox.allow_write_path(HOMEBREW_PREFIX/"var/cache") + sandbox.allow_write_path(HOMEBREW_PREFIX/"var/log") + sandbox.allow_write_path(HOMEBREW_PREFIX/"var/run") + sandbox.exec(*args) + else + exec(*args) + end + end + rescue Assertions::FailedAssertion => e + ofail "#{f.full_name}: failed" + puts e.message + rescue Exception => e + ofail "#{f.full_name}: failed" + puts e, e.backtrace + ensure + ENV.replace(env) + end + end + end +end |
