"use strict";
/**
* Runs tests.
*
* - executes `runner.js` file, which is entry point to load and execute
* files with tests
* - connects custom reporter to `mochajs`.
*
* @function
* @name run
* @arg {function} cb - Callback.
*/
var fs = require("fs");
var path = require("path");
var fse = require("fs-extra");
var Mocha = require("mocha");
const cluster = require("./cluster");
var CONF = require("./config");
var hacking = require("./hacking");
var tools = require("./tools");
const utils = require("./utils");
var run = cb => {
resetReport();
if (CONF.session.uncaughtException !== "mocha") hacking.suppressMochaUncaught();
var mocha = new Mocha({ grep: CONF.filter.grep,
timeout: CONF.chunk.timeout,
retries: CONF.chunk.retries,
reporter: path.resolve(__dirname, "reporter") });
mocha.addFile(path.resolve(__dirname, "loader.js"));
if (cb) {
_run(mocha, cb);
} else {
return new Promise(resolve => _run(mocha, resolve));
}
};
/**
* Runs mocha.
*
* @ignore
*/
var _run = (mocha, fin) => {
mocha.run(code => {
var clampedCode = Math.min(code, 255);
if (CONF.session.isPassed) clampedCode = 0;
if (!CONF.session.isPassed && clampedCode === 0) clampedCode = 1;
fin(clampedCode);
});
};
/**
* Resets report folder.
*
* @ignore
*/
var resetReport = () => {
if (CONF.report.clear && fs.existsSync(CONF.report.dir)) {
fse.removeSync(CONF.report.dir);
}
fse.mkdirsSync(CONF.report.dir);
};
/**
* Runs glace framework.
*
* @arg {function} cb - Callback.
*/
var glaceRun = cb => {
utils.setLog();
if (CONF.tools.stepsList) {
tools.printSteps(CONF.tools.stepsFilter);
return cb();
} else if (CONF.tools.fixturesList) {
tools.printFixtures(CONF.tools.fixturesFilter);
return cb();
} else if (CONF.tools.testsList) {
tools.printTests(CONF.tools.testsFilter);
return cb();
} else if (CONF.tools.checkTestrail) {
return tools.checkTestrail(cb);
} else if (CONF.tools.pluginsList) {
return tools.printPlugins(cb);
} else if (CONF.cluster.isMaster) {
return cluster.launch(cb);
} else {
return run(cb);
}
};
module.exports = glaceRun;