var fs = require(‘fs’); var util = require(‘util’); var path = require(‘path’);

// yes, really keep this here to keep us honest, but only for jasmine’s own runner! [xw] // undefined = “diz be undefined yo”;

var jasmineGlobals = require(‘../lib/jasmine-core/jasmine.js’); for (var k in jasmineGlobals) {

global[k] = jasmineGlobals[k];

} require(‘../src/console/ConsoleReporter.js’);

/*

Pulling in code from jasmine-node.

We can't just depend on jasmine-node because it has its own jasmine that it uses.
*/

global.window = {

setTimeout: setTimeout,
clearTimeout: clearTimeout,
setInterval: setInterval,
clearInterval: clearInterval

};

delete global.window;

function noop() { }

jasmine.executeSpecs = function(specs, done, isVerbose, showColors) {

for (var i = 0, len = specs.length; i < len; ++i) {
  var filename = specs[i];
  require(filename.replace(/\.\w+$/, ""));
}

var jasmineEnv = jasmine.getEnv();
var consoleReporter = new jasmine.ConsoleReporter(util.print, done, showColors);

jasmineEnv.addReporter(consoleReporter);
jasmineEnv.execute();

};

jasmine.getAllSpecFiles = function(dir, matcher) {

var specs = [];

if (fs.statSync(dir).isFile() && dir.match(matcher)) {
  specs.push(dir);
} else {
  var files = fs.readdirSync(dir);
  for (var i = 0, len = files.length; i < len; ++i) {
    var filename = dir + '/' + files[i];
    if (fs.statSync(filename).isFile() && filename.match(matcher)) {
      specs.push(filename);
    } else if (fs.statSync(filename).isDirectory()) {
      var subfiles = this.getAllSpecFiles(filename, matcher);
      subfiles.forEach(function(result) {
        specs.push(result);
      });
    }
  }
}

return specs;

};

function now() {

return new Date().getTime();

}

jasmine.asyncSpecWait = function() {

var wait = jasmine.asyncSpecWait;
wait.start = now();
wait.done = false;
(function innerWait() {
  waits(10);
  runs(function() {
    if (wait.start + wait.timeout < now()) {
      expect('timeout waiting for spec').toBeNull();
    } else if (wait.done) {
      wait.done = false;
    } else {
      innerWait();
    }
  });
})();

}; jasmine.asyncSpecWait.timeout = 4 * 1000; jasmine.asyncSpecDone = function() {

jasmine.asyncSpecWait.done = true;

};

for (var key in jasmine) {

exports[key] = jasmine[key];

}

/*

End jasmine-node runner
*/

var isVerbose = false; var showColors = true; process.argv.forEach(function(arg) {

switch (arg) {
  case '--color': showColors = true; break;
  case '--noColor': showColors = false; break;
  case '--verbose': isVerbose = true; break;
}

});

var specs = jasmine.getAllSpecFiles(__dirname, new RegExp(“.js$”)); var domIndependentSpecs = []; for (var i = 0; i < specs.length; i++) {

if (fs.readFileSync(specs[i], "utf8").indexOf("document.createElement") < 0) {
  domIndependentSpecs.push(specs[i]);
}

}

jasmine.executeSpecs(domIndependentSpecs, function(runner, log) {

if (runner.results().failedCount === 0) {
  process.exit(0);
} else {
  process.exit(1);
}

}, isVerbose, showColors);