#!/usr/bin/env ruby
#
# Sometimes massive failure can cause JsTestDriver to hang
# To debug those cases, it's easier to run test cases one by one
# to track which test case is causing trouble.
#
# This script also helps test less capable browsers such as IE6,
# which can get overwhelmed while trying to run too many tests too
# rapidly.
#
def red(msg)
  "\033[31m#{msg}\033[39m"
end

def green(msg)
  "\033[32m#{msg}\033[39m"
end

def ok
  green("OK")
end

problems = []
server = ARGV.length > 0 ? " --server #{ARGV[0]}" : ""

print "Resetting"
`jstestdriver --reset#{server}`
print " - #{ok}\n"

(Dir.glob("test/**/*.js").collect do |test|
  File.read(test).scan(/estCase\("(.+)"/)
end).flatten.each do |testCase|
  print testCase
  `jstestdriver --tests #{testCase}#{server}` =~ /Fails: (\d+); Errors: (\d+)/

  if $1.to_i > 0 || $2.to_i > 0
    problems << testCase
    print " - " + red("#{$1} failures, #{$2} errors") + "\n"
  else
    print " - #{ok}\n"
  end
end

if problems.count > 0
  puts red("Some test cases had failures and/or errors")
  puts problems.join("\n")
else
  puts green("No problems")
end
