#!/usr/bin/env dart
library hop_runner;

import 'dart:async';
import 'dart:io';

import 'package:hop/hop.dart';
import 'package:hop/hop_tasks.dart';
import 'package:hop_unittest/hop_unittest.dart';

import 'package:path/path.dart' as path;

import '../test/benchmark_harness_test.dart' as benchmark_harness_test;
import '../test/result_emitter_test.dart' as result_emitter_test;

void main(List<String> args) {
  addTask('analyze_libs', createAnalyzerTask(_getDartFiles('lib')));
  addTask('analyze_examples', createAnalyzerTask(_getDartFiles('example')));
  addTask('analyze_tests', createAnalyzerTask(_getDartFiles('test')));

  addChainedTask('analyze_all',
      ['analyze_libs', 'analyze_examples', 'analyze_tests']);

  addTask('test', createUnitTestTask((){
    benchmark_harness_test.main();
    result_emitter_test.main();
  }));

  runHop(args);
}

Future<List<String>> _getDartFiles(String directory) =>
  new Directory(directory)
    .list()
    .where((FileSystemEntity fse) => fse is File)
    .map((File file) => file.path)
    .where((String filePath) => path.extension(filePath) == '.dart')
    .toList();
