require 'rake/testtask'
require 'rake/rdoctask'

def rake_in_dir(directory, task)
  cd directory do
    sh "rake #{task}"
  end
end

desc "Genetate the parser using racc"
task :generate_parser do
  rake_in_dir "compiler", :generate_parser
end

namespace :test do
  namespace :unit do
    desc "Run the unit tests coverage analysis using \"rcov\""
    task :rcov do
      rake_in_dir "compiler", "test:unit:rcov"
      rake_in_dir "tools/test_tool", "test:unit:rcov"
    end

    desc "Clean the directory with results of the unit tests coverage analysis"
    task :rcov_clean do
      rake_in_dir "compiler", "test:unit:rcov_clean"
      rake_in_dir "tools/test_tool", "test:unit:rcov_clean"
    end
  end

  desc "Run tests for unit"
  task :unit do |t|
    rake_in_dir "compiler", "test:unit"
    rake_in_dir "tools/test_tool", "test:unit"
  end

  desc "Run the functional tests"
  task :functional do
    rake_in_dir "runtime", "test:functional"
  end

  desc "Run the command-line handling tests"
  task :command_line do
    rake_in_dir "compiler", "test:command_line"
  end
end

desc "Run the unit, functional and command-line handling tests"
task :test => ["test:unit", "test:functional", "test:command_line"]

desc "Build the rdoc HTML Files"
task :rdoc do
  rake_in_dir "compiler", :rdoc
end

desc "Force a rebuild of the RDOC files"
task :rerdoc do
  rake_in_dir "compiler", :rerdoc
end

desc "Remove rdoc products"
task :clobber_rdoc do
  rake_in_dir "compiler", :clobber_rdoc
end

task :default  => :test
