"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; exports.__esModule = true; var TestRunner_1 = __importDefault(require("./runner/TestRunner")); var testRunnerReporter_1 = __importDefault(require("./runner/testRunnerReporter")); var MochaWebpack = /** @class */ (function () { function MochaWebpack() { /** * Files to run test against * * @private */ this.entries = []; /** * Files to include into the bundle * * @private */ this.includes = []; /** * Options * * @private */ this.options = { cwd: process.cwd(), webpackConfig: {}, bail: false, reporter: 'spec', reporterOptions: {}, ui: 'bdd', invert: false, ignoreLeaks: true, fullStackTrace: false, useInlineDiffs: false, timeout: 2000, slow: 75, asyncOnly: false, delay: false, interactive: !!process.stdout.isTTY, clearTerminal: false, quiet: false, forbidOnly: false }; } /** * Add file run test against * * @public * @param {string} file file or glob * @return {MochaWebpack} */ MochaWebpack.prototype.addEntry = function (file) { this.entries = __spreadArrays(this.entries, [file]); return this; }; /** * Add file to include into the test bundle * * @public * @param {string} file absolute path to module * @return {MochaWebpack} */ MochaWebpack.prototype.addInclude = function (file) { this.includes = __spreadArrays(this.includes, [file]); return this; }; /** * Sets the current working directory * * @public * @param {string} cwd absolute working directory path * @return {MochaWebpack} */ MochaWebpack.prototype.cwd = function (cwd) { this.options = __assign(__assign({}, this.options), { cwd: cwd }); return this; }; /** * Sets the webpack config * * @public * @param {Object} config webpack config * @return {MochaWebpack} */ MochaWebpack.prototype.webpackConfig = function (config) { if (config === void 0) { config = {}; } this.options = __assign(__assign({}, this.options), { webpackConfig: config }); return this; }; /** * Enable or disable bailing on the first failure. * * @public * @param {boolean} [bail] * @return {MochaWebpack} */ MochaWebpack.prototype.bail = function (bail) { if (bail === void 0) { bail = false; } this.options = __assign(__assign({}, this.options), { bail: bail }); return this; }; /** * Set reporter to `reporter`, defaults to "spec". * * @param {string|Function} reporter name or constructor * @param {Object} reporterOptions optional options * @return {MochaWebpack} */ MochaWebpack.prototype.reporter = function (reporter, reporterOptions) { this.options = __assign(__assign({}, this.options), { reporter: reporter, reporterOptions: reporterOptions }); return this; }; /** * Set test UI, defaults to "bdd". * * @public * @param {string} ui bdd/tdd * @return {MochaWebpack} */ MochaWebpack.prototype.ui = function (ui) { this.options = __assign(__assign({}, this.options), { ui: ui }); return this; }; /** * Only run tests containing * * @public * @param {string} str * @return {MochaWebpack} */ MochaWebpack.prototype.fgrep = function (str) { this.options = __assign(__assign({}, this.options), { fgrep: str }); return this; }; /** * Only run tests matching * * @public * @param {string|RegExp} pattern * @return {MochaWebpack} */ MochaWebpack.prototype.grep = function (pattern) { this.options = __assign(__assign({}, this.options), { grep: pattern }); return this; }; /** * Invert `.grep()` matches. * * @public * @return {MochaWebpack} */ MochaWebpack.prototype.invert = function () { this.options = __assign(__assign({}, this.options), { invert: true }); return this; }; /** * Ignore global leaks. * * @public * @param {boolean} ignore * @return {MochaWebpack} */ MochaWebpack.prototype.ignoreLeaks = function (ignore) { this.options = __assign(__assign({}, this.options), { ignoreLeaks: ignore }); return this; }; /** * Display long stack-trace on failing * * @public * @return {MochaWebpack} */ MochaWebpack.prototype.fullStackTrace = function () { this.options = __assign(__assign({}, this.options), { fullStackTrace: true }); return this; }; /** * Emit color output. * * @public * @param {boolean} colors * @return {MochaWebpack} */ MochaWebpack.prototype.useColors = function (colors) { this.options = __assign(__assign({}, this.options), { colors: colors }); return this; }; /** * Quiet informational messages. * * @public * @return {MochaWebpack} */ MochaWebpack.prototype.quiet = function () { this.options = __assign(__assign({}, this.options), { quiet: true }); return this; }; /** * Use inline diffs rather than +/-. * * @public * @param {boolean} inlineDiffs * @return {MochaWebpack} */ MochaWebpack.prototype.useInlineDiffs = function (inlineDiffs) { this.options = __assign(__assign({}, this.options), { useInlineDiffs: inlineDiffs }); return this; }; /** * Set the timeout in milliseconds. Value of 0 disables timeouts * * @public * @param {number} timeout time in ms * @return {MochaWebpack} */ MochaWebpack.prototype.timeout = function (timeout) { this.options = __assign(__assign({}, this.options), { timeout: timeout }); return this; }; /** * Set the number of times to retry failed tests. * * @public * @param {number} count retry times * @return {MochaWebpack} */ MochaWebpack.prototype.retries = function (count) { this.options = __assign(__assign({}, this.options), { retries: count }); return this; }; /** * Set slowness threshold in milliseconds. * * @public * @param {number} threshold time in ms * @return {MochaWebpack} */ MochaWebpack.prototype.slow = function (threshold) { this.options = __assign(__assign({}, this.options), { slow: threshold }); return this; }; /** * Makes all tests async (accepting a callback) * * @public * @return {MochaWebpack} */ MochaWebpack.prototype.asyncOnly = function () { this.options = __assign(__assign({}, this.options), { asyncOnly: true }); return this; }; /** * Delay root suite execution. * * @public * @return {MochaWebpack} */ MochaWebpack.prototype.delay = function () { this.options = __assign(__assign({}, this.options), { delay: true }); return this; }; /** * Force interactive mode (default enabled in terminal) * * @public * @param {boolean} interactive * @return {MochaWebpack} */ MochaWebpack.prototype.interactive = function (interactive) { this.options = __assign(__assign({}, this.options), { interactive: interactive }); return this; }; /** * Clear terminal on startup * * @public * @param {boolean} clearTerminal * @return {MochaWebpack} */ MochaWebpack.prototype.clearTerminal = function (clearTerminal) { this.options = __assign(__assign({}, this.options), { clearTerminal: clearTerminal }); return this; }; /** * Enable growl notification support * * @public * @param {boolean} growl * @return {MochaWebpack} */ MochaWebpack.prototype.growl = function () { this.options = __assign(__assign({}, this.options), { growl: true }); return this; }; /** * Disallow .only in tests * * @public * @param {boolean} forbidOnly * @return {MochaWebpack} */ MochaWebpack.prototype.forbidOnly = function () { this.options = __assign(__assign({}, this.options), { forbidOnly: true }); return this; }; /** * Run tests * * @public * @return {Promise} a Promise that gets resolved with the number of failed tests or rejected with build error */ MochaWebpack.prototype.run = function () { return __awaiter(this, void 0, void 0, function () { var runner; return __generator(this, function (_a) { runner = new TestRunner_1["default"](this.entries, this.includes, this.options); testRunnerReporter_1["default"]({ eventEmitter: runner, interactive: this.options.interactive, quiet: this.options.quiet, cwd: this.options.cwd, clearTerminal: this.options.clearTerminal }); return [2 /*return*/, runner.run()]; }); }); }; /** * Run tests and rerun them on changes * @public */ MochaWebpack.prototype.watch = function () { return __awaiter(this, void 0, void 0, function () { var runner; return __generator(this, function (_a) { switch (_a.label) { case 0: runner = new TestRunner_1["default"](this.entries, this.includes, this.options); testRunnerReporter_1["default"]({ eventEmitter: runner, interactive: this.options.interactive, quiet: this.options.quiet, cwd: this.options.cwd, clearTerminal: this.options.clearTerminal }); return [4 /*yield*/, runner.watch()]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; return MochaWebpack; }()); exports["default"] = MochaWebpack; //# sourceMappingURL=MochaWebpack.js.map