Top Level Namespace

Defined Under Namespace

Modules: Erubis, Gem, Kernel, Language, Merb, ObjectSpace Classes: Class, Dictionary, Hash, Mash, Object, REXMLUtilityNode, String, ToHashParser

Instance Method Summary collapse

Instance Method Details

#run_specs(globs, spec_cmd = 'spec') ⇒ Object

Runs specs in all files matching the file pattern.

Parameters

globs<String, Array>

File patterns to look for.

spec_cmd<~to_s>

The spec command. Defaults to “spec”.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/merb-core/test/run_specs.rb', line 8

def run_specs(globs, spec_cmd='spec')
  require "optparse"
  require "spec"
  globs = globs.is_a?(Array) ? globs : [globs]
  examples, failures, errors, pending = 0, 0, 0, 0
  globs.each do |glob|
    Dir[glob].each do |spec|
      response = Open3.popen3("#{spec_cmd} #{File.expand_path(spec)} -f s -c") do |i,o,e|
        while out = o.gets
          STDOUT.puts out
          STDOUT.flush
          if out =~ /\d+ example/
            e, f, p = out.match(/(\d+) examples?, (\d+) failures?(?:, (\d+) pending?)?/)[1..-1]
            examples += e.to_i; failures += f.to_i; pending += p.to_i          
          end
        end
        errors += 1 if e.is_a?(IO)
        STDOUT.puts e.read if e.is_a?(IO)
      end
    end
  end
  puts
  puts "*** TOTALS ***"
  if failures == 0
    print "\e[32m"
  else
    print "\e[31m"
  end
  puts "#{examples} examples, #{failures} failures, #{errors} errors, #{pending} pending"
  print "\e[0m"  
end