require 'fileutils' require 'rake'

TEST_DIR=“tests”

def ansi_colors(color)

case color
when :green then ["\033[32m", "\033[0m"]
when :red   then ["\033[31m", "\033[0m"]
else ['','']
end

end

def cp_if_not_already_there(source, destination)

destination_expanded = File.join(Tuev.cwd, destination)
source_expanded = File.join(Tuev.gem_path, source)
print "%-60s" % destination

if File.exists?(destination_expanded)
  prefix, suffix = ansi_colors(:red)
  puts "#{prefix} ... already exists ... skipping#{suffix}"
else
  FileUtils.cp(source_expanded, destination_expanded)
  prefix, suffix = ansi_colors(:green)
  puts "#{prefix} ... copied#{suffix}"
end

end

def mkdir_if_not_already_there(dir)

dir_expanded = File.join(Tuev.cwd, dir)
print "%-60s" % "#{dir}"

if File.exists?(dir_expanded)
  prefix, suffix = ansi_colors(:red)
  puts "#{prefix} ... directory already exists#{suffix}"
else
  FileUtils.mkdir_p(dir_expanded)
  prefix, suffix = ansi_colors(:green)
  puts "#{prefix} ... directory created#{suffix}"
end

end

namespace :tuev do

desc "prepare this project for tuev tests (create sample files, download qunit & friends)"
task :prepare do
  mkdir_if_not_already_there("config")
  cp_if_not_already_there("contrib/tuev.yml", "config/tuev.yml")

  mkdir_if_not_already_there("#{TEST_DIR}/tuev/test_files")
  cp_if_not_already_there("contrib/tuev_helper.rb", "#{TEST_DIR}/tuev_helper.rb")

  mkdir_if_not_already_there("#{TEST_DIR}/tuev/contrib")
  cp_if_not_already_there("contrib/qunit/qunit/qunit.css",
                          File.join(Tuev.contrib_dir, "qunit.css"))
  cp_if_not_already_there("contrib/qunit/qunit/qunit.js",
                          File.join(Tuev.contrib_dir, "qunit.js"))
  cp_if_not_already_there("contrib/jquery-1.5.1.js",
                          File.join(Tuev.contrib_dir, "jquery-1.5.1.js"))
  cp_if_not_already_there("contrib/mockjax/jquery.mockjax.js",
                          File.join(Tuev.contrib_dir, "jquery.mockjax.js"))
  cp_if_not_already_there("contrib/test_default.html", 
                          File.join(Tuev.contrib_dir, "test_default.html"))
  cp_if_not_already_there("contrib/tuev_qunit.js", 
                          File.join(Tuev.contrib_dir, "tuev_qunit.js"))
end

desc "run tests"
task :run do
  failures = 0
  Tuev.test_suites.each do |test_suite|
    test_suite.create_test_files.each do |file|
      failures += QunitRunner.new(file, Tuev.selenium_conf).run
    end
  end

  puts

  case failures
  when 0
    puts "woohoo: all tests pass -- you rock !!!"
  when 1
    puts "1 test failing -- this is very close to 0 failing actually!"
  when 2..5
    puts "mmm ... #{failures} failing tests! Can't you do better?"
  when 6..15
    puts "ufff ... get to work: #{failures} tests are still failing"
  when 100..1_000_000
    puts "I hope you don't get paid for this code! #{failures} errors!"
  else
    puts "#{failures} failing tests! You gotta be kidding me!"
  end

  puts

  exit(failures)
end

desc "create static testfiles for qunit tests"
task :create_testfiles do
  files = []
  Tuev.test_suites.each do |test_suite|
    files << test_suite.create_test_files
  end

  puts "Created the following test files:\n\t#{files.join("\n\t")}"
end

end