#!/usr/bin/env node /* -*- Mode: js; js-indent-level: 2; -*- */ /*

* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
*/

var assert = require('assert'); var fs = require('fs'); var path = require('path'); var util = require('./source-map/util');

function run(tests) {

var total = 0;
var passed = 0;

for (var i = 0; i < tests.length; i++) {
  for (var k in tests[i].testCase) {
    if (/^test/.test(k)) {
      total++;
      try {
        tests[i].testCase[k](assert, util);
        passed++;
      }
      catch (e) {
        console.log('FAILED ' + tests[i].name + ': ' + k + '!');
        console.log(e.stack);
      }
    }
  }
}

console.log('');
console.log(passed + ' / ' + total + ' tests passed.');
console.log('');

return total - passed;

}

function isTestFile(f) {

var testToRun = process.argv[2];
return testToRun
  ? path.basename(testToRun) === f
  : /^test\-.*?\.js/.test(f);

}

function toModule(f) {

return './source-map/' + f.replace(/\.js$/, '');

}

var requires = fs.readdirSync(path.join(__dirname, 'source-map'))

.filter(isTestFile)
.map(toModule);

var code = run(requires.map(require).map(function (mod, i) {

return {
  name: requires[i],
  testCase: mod
};

}));

process.exit(code);