'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.default = void 0; function path() { const data = _interopRequireWildcard(require('path')); path = function () { return data; }; return data; } function util() { const data = _interopRequireWildcard(require('util')); util = function () { return data; }; return data; } function _exit() { const data = _interopRequireDefault(require('exit')); _exit = function () { return data; }; return data; } function _jestUtil() { const data = require('jest-util'); _jestUtil = function () { return data; }; return data; } var _base_reporter = _interopRequireDefault(require('./base_reporter')); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : {default: obj}; } function _getRequireWildcardCache() { if (typeof WeakMap !== 'function') return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) { return {default: obj}; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const isDarwin = process.platform === 'darwin'; const icon = path().resolve(__dirname, '../assets/jest_logo.png'); class NotifyReporter extends _base_reporter.default { constructor(globalConfig, startRun, context) { super(); _defineProperty(this, '_notifier', loadNotifier()); _defineProperty(this, '_startRun', void 0); _defineProperty(this, '_globalConfig', void 0); _defineProperty(this, '_context', void 0); this._globalConfig = globalConfig; this._startRun = startRun; this._context = context; } onRunComplete(contexts, result) { const success = result.numFailedTests === 0 && result.numRuntimeErrorTestSuites === 0; const firstContext = contexts.values().next(); const hasteFS = firstContext && firstContext.value && firstContext.value.hasteFS; let packageName; if (hasteFS != null) { // assuming root package.json is the first one const [filePath] = hasteFS.matchFiles('package.json'); packageName = filePath != null ? hasteFS.getModuleName(filePath) : this._globalConfig.rootDir; } else { packageName = this._globalConfig.rootDir; } packageName = packageName != null ? `${packageName} - ` : ''; const notifyMode = this._globalConfig.notifyMode; const statusChanged = this._context.previousSuccess !== success || this._context.firstRun; const testsHaveRun = result.numTotalTests !== 0; if ( testsHaveRun && success && (notifyMode === 'always' || notifyMode === 'success' || notifyMode === 'success-change' || (notifyMode === 'change' && statusChanged) || (notifyMode === 'failure-change' && statusChanged)) ) { const title = util().format('%s%d%% Passed', packageName, 100); const message = `${isDarwin ? '\u2705 ' : ''}${(0, _jestUtil().pluralize)( 'test', result.numPassedTests )} passed`; // @ts-ignore: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/42303 this._notifier.notify({ icon, message, timeout: false, title }); } else if ( testsHaveRun && !success && (notifyMode === 'always' || notifyMode === 'failure' || notifyMode === 'failure-change' || (notifyMode === 'change' && statusChanged) || (notifyMode === 'success-change' && statusChanged)) ) { const failed = result.numFailedTests / result.numTotalTests; const title = util().format( '%s%d%% Failed', packageName, Math.ceil(Number.isNaN(failed) ? 0 : failed * 100) ); const message = util().format( (isDarwin ? '\u26D4\uFE0F ' : '') + '%d of %d tests failed', result.numFailedTests, result.numTotalTests ); const watchMode = this._globalConfig.watch || this._globalConfig.watchAll; const restartAnswer = 'Run again'; const quitAnswer = 'Exit tests'; if (!watchMode) { // @ts-ignore: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/42303 this._notifier.notify({ icon, message, timeout: false, title }); } else { this._notifier.notify( { actions: [restartAnswer, quitAnswer], closeLabel: 'Close', icon, message, timeout: false, title // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/42303 }, (err, _, metadata) => { if (err || !metadata) { return; } if (metadata.activationValue === quitAnswer) { (0, _exit().default)(0); return; } if (metadata.activationValue === restartAnswer) { this._startRun(this._globalConfig); } } ); } } this._context.previousSuccess = success; this._context.firstRun = false; } } exports.default = NotifyReporter; function loadNotifier() { try { return require('node-notifier'); } catch (err) { if (err.code !== 'MODULE_NOT_FOUND') { throw err; } else { throw Error( 'notify reporter requires optional dependeny node-notifier but it was not found' ); } } }