def run_specs(globs, spec_cmd='spec', run_opts = "-c -f s")
require "optparse"
require "spec"
globs = globs.is_a?(Array) ? globs : [globs]
examples, failures, errors, pending = 0, 0, 0, 0
time = Benchmark.measure do
globs.each do |glob|
Dir[glob].each do |spec|
response = Open3.popen3("#{spec_cmd} #{File.expand_path(spec)} #{run_opts}") 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
end
puts
puts "*** TOTALS ***"
if failures == 0
print "\e[32m"
else
print "\e[31m"
end
puts "#{examples} examples, #{failures} failures, #{errors} errors, #{pending} pending, #{sprintf("suite run in %3.3f seconds", time.real)}"
print "\e[0m"
end