#! /usr/bin/env node

'use strict';

var async = require('async');
var spawn = require('child_process').spawn;
var fs = require('fs');
var path = require('path');

var base = process.cwd();
var dirs = fs.readdirSync(base);

var tasks = [];
dirs.forEach(function(dir) {
  var fulldir = path.join(base, dir);

  // a plugin contains package.json in root
  var pkg = path.join(fulldir, 'package.json');
  if (!fs.existsSync(pkg)) return;
  var pstat = fs.statSync(pkg);
  if (!pstat.isFile()) return;

  // a plugin contains index.js in root
  var index = path.join(fulldir, 'index.js');
  if (!fs.existsSync(index)) return;
  var istat = fs.statSync(index);
  if (!istat.isFile()) return;

  // skip plugins without tests
  var test = path.join(fulldir, 'test');
  if (!fs.existsSync(test)) return;
  var tstat = fs.statSync(test);
  if (!tstat.isDirectory()) return;

  tasks.push(function(cb) {
    console.log('\nrunning "mocha" in', fulldir, '...');
    var cmd = process.platform === 'win32' ? 'cmd' : 'mocha';
    var args = process.platform === 'win32' ? ['/c', 'mocha'] : [];
    args.push(path.join(dir, 'test', '**.test.js'));
    var child = spawn(cmd, args, {
      stdio: 'inherit'
    });
    child.on('close', function(code) {
      console.error('  ->', code === 0 ? 'OK' : 'failed: ' + code);
      cb(code);
    });
  });
});

async.series(tasks, function(err, results) {
  if (err) {
    console.error('tests failed: ', err);
  } else {
    console.error('tests OK');
  }
  process.exit(err ? 1 : 0);
});
