diff options
| author | Mike McQuaid | 2016-09-05 21:37:02 +0100 | 
|---|---|---|
| committer | Mike McQuaid | 2016-09-08 20:46:37 +0100 | 
| commit | af8605ea4ba1d9856c055c8c76b447e030540e3f (patch) | |
| tree | d093b11340406c21a4b873a80effe3b068fd07d4 /Library/Homebrew/dev-cmd/test.rb | |
| parent | 4f6bae46f9c0f7b713cdbb999318460135f423de (diff) | |
| download | brew-af8605ea4ba1d9856c055c8c76b447e030540e3f.tar.bz2 | |
Move developer-focused commands to dev-cmd.
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  | 
