224 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			224 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, '__esModule', { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = void 0; | ||
|  | 
 | ||
|  | var _jestMatcherUtils = require('jest-matcher-utils'); | ||
|  | 
 | ||
|  | var _chalk = _interopRequireDefault(require('chalk')); | ||
|  | 
 | ||
|  | var _prettyFormat = _interopRequireDefault(require('pretty-format')); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { | ||
|  |   return obj && obj.__esModule ? obj : {default: obj}; | ||
|  | } | ||
|  | 
 | ||
|  | var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol; | ||
|  | 
 | ||
|  | function _slicedToArray(arr, i) { | ||
|  |   return ( | ||
|  |     _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest() | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | function _nonIterableRest() { | ||
|  |   throw new TypeError('Invalid attempt to destructure non-iterable instance'); | ||
|  | } | ||
|  | 
 | ||
|  | function _iterableToArrayLimit(arr, i) { | ||
|  |   var _arr = []; | ||
|  |   var _n = true; | ||
|  |   var _d = false; | ||
|  |   var _e = undefined; | ||
|  |   try { | ||
|  |     for ( | ||
|  |       var _i = arr[Symbol.iterator](), _s; | ||
|  |       !(_n = (_s = _i.next()).done); | ||
|  |       _n = true | ||
|  |     ) { | ||
|  |       _arr.push(_s.value); | ||
|  |       if (i && _arr.length === i) break; | ||
|  |     } | ||
|  |   } catch (err) { | ||
|  |     _d = true; | ||
|  |     _e = err; | ||
|  |   } finally { | ||
|  |     try { | ||
|  |       if (!_n && _i['return'] != null) _i['return'](); | ||
|  |     } finally { | ||
|  |       if (_d) throw _e; | ||
|  |     } | ||
|  |   } | ||
|  |   return _arr; | ||
|  | } | ||
|  | 
 | ||
|  | function _arrayWithHoles(arr) { | ||
|  |   if (Array.isArray(arr)) return arr; | ||
|  | } | ||
|  | 
 | ||
|  | const assertOperatorsMap = { | ||
|  |   '!=': 'notEqual', | ||
|  |   '!==': 'notStrictEqual', | ||
|  |   '==': 'equal', | ||
|  |   '===': 'strictEqual' | ||
|  | }; | ||
|  | const humanReadableOperators = { | ||
|  |   deepEqual: 'to deeply equal', | ||
|  |   deepStrictEqual: 'to deeply and strictly equal', | ||
|  |   equal: 'to be equal', | ||
|  |   notDeepEqual: 'not to deeply equal', | ||
|  |   notDeepStrictEqual: 'not to deeply and strictly equal', | ||
|  |   notEqual: 'to not be equal', | ||
|  |   notStrictEqual: 'not be strictly equal', | ||
|  |   strictEqual: 'to strictly be equal' | ||
|  | }; | ||
|  | 
 | ||
|  | const formatNodeAssertErrors = (event, state) => { | ||
|  |   switch (event.name) { | ||
|  |     case 'test_done': { | ||
|  |       event.test.errors = event.test.errors.map(errors => { | ||
|  |         let error; | ||
|  | 
 | ||
|  |         if (Array.isArray(errors)) { | ||
|  |           const _errors = _slicedToArray(errors, 2), | ||
|  |             originalError = _errors[0], | ||
|  |             asyncError = _errors[1]; | ||
|  | 
 | ||
|  |           if (originalError == null) { | ||
|  |             error = asyncError; | ||
|  |           } else if (!originalError.stack) { | ||
|  |             error = asyncError; | ||
|  |             error.message = originalError.message | ||
|  |               ? originalError.message | ||
|  |               : `thrown: ${(0, _prettyFormat.default)(originalError, { | ||
|  |                   maxDepth: 3 | ||
|  |                 })}`;
 | ||
|  |           } else { | ||
|  |             error = originalError; | ||
|  |           } | ||
|  |         } else { | ||
|  |           error = errors; | ||
|  |         } | ||
|  | 
 | ||
|  |         return error.code === 'ERR_ASSERTION' | ||
|  |           ? { | ||
|  |               message: assertionErrorMessage(error, { | ||
|  |                 expand: state.expand | ||
|  |               }) | ||
|  |             } | ||
|  |           : errors; | ||
|  |       }); | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const getOperatorName = (operator, stack) => { | ||
|  |   if (typeof operator === 'string') { | ||
|  |     return assertOperatorsMap[operator] || operator; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (stack.match('.doesNotThrow')) { | ||
|  |     return 'doesNotThrow'; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (stack.match('.throws')) { | ||
|  |     return 'throws'; | ||
|  |   } | ||
|  | 
 | ||
|  |   return ''; | ||
|  | }; | ||
|  | 
 | ||
|  | const operatorMessage = operator => { | ||
|  |   const niceOperatorName = getOperatorName(operator, ''); | ||
|  |   const humanReadableOperator = humanReadableOperators[niceOperatorName]; | ||
|  |   return typeof operator === 'string' | ||
|  |     ? `${humanReadableOperator || niceOperatorName} to:\n` | ||
|  |     : ''; | ||
|  | }; | ||
|  | 
 | ||
|  | const assertThrowingMatcherHint = operatorName => | ||
|  |   _chalk.default.dim('assert') + | ||
|  |   _chalk.default.dim('.' + operatorName + '(') + | ||
|  |   _chalk.default.red('function') + | ||
|  |   _chalk.default.dim(')'); | ||
|  | 
 | ||
|  | const assertMatcherHint = (operator, operatorName) => { | ||
|  |   let message = | ||
|  |     _chalk.default.dim('assert') + | ||
|  |     _chalk.default.dim('.' + operatorName + '(') + | ||
|  |     _chalk.default.red('received') + | ||
|  |     _chalk.default.dim(', ') + | ||
|  |     _chalk.default.green('expected') + | ||
|  |     _chalk.default.dim(')'); | ||
|  | 
 | ||
|  |   if (operator === '==') { | ||
|  |     message += | ||
|  |       ' or ' + | ||
|  |       _chalk.default.dim('assert') + | ||
|  |       _chalk.default.dim('(') + | ||
|  |       _chalk.default.red('received') + | ||
|  |       _chalk.default.dim(') '); | ||
|  |   } | ||
|  | 
 | ||
|  |   return message; | ||
|  | }; | ||
|  | 
 | ||
|  | function assertionErrorMessage(error, options) { | ||
|  |   const expected = error.expected, | ||
|  |     actual = error.actual, | ||
|  |     generatedMessage = error.generatedMessage, | ||
|  |     message = error.message, | ||
|  |     operator = error.operator, | ||
|  |     stack = error.stack; | ||
|  |   const diffString = (0, _jestMatcherUtils.diff)(expected, actual, options); | ||
|  |   const hasCustomMessage = !generatedMessage; | ||
|  |   const operatorName = getOperatorName(operator, stack); | ||
|  |   const trimmedStack = stack | ||
|  |     .replace(message, '') | ||
|  |     .replace(/AssertionError(.*)/g, ''); | ||
|  | 
 | ||
|  |   if (operatorName === 'doesNotThrow') { | ||
|  |     return ( | ||
|  |       assertThrowingMatcherHint(operatorName) + | ||
|  |       '\n\n' + | ||
|  |       _chalk.default.reset(`Expected the function not to throw an error.\n`) + | ||
|  |       _chalk.default.reset(`Instead, it threw:\n`) + | ||
|  |       `  ${(0, _jestMatcherUtils.printReceived)(actual)}` + | ||
|  |       _chalk.default.reset( | ||
|  |         hasCustomMessage ? '\n\nMessage:\n  ' + message : '' | ||
|  |       ) + | ||
|  |       trimmedStack | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (operatorName === 'throws') { | ||
|  |     return ( | ||
|  |       assertThrowingMatcherHint(operatorName) + | ||
|  |       '\n\n' + | ||
|  |       _chalk.default.reset(`Expected the function to throw an error.\n`) + | ||
|  |       _chalk.default.reset(`But it didn't throw anything.`) + | ||
|  |       _chalk.default.reset( | ||
|  |         hasCustomMessage ? '\n\nMessage:\n  ' + message : '' | ||
|  |       ) + | ||
|  |       trimmedStack | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   return ( | ||
|  |     assertMatcherHint(operator, operatorName) + | ||
|  |     '\n\n' + | ||
|  |     _chalk.default.reset(`Expected value ${operatorMessage(operator)}`) + | ||
|  |     `  ${(0, _jestMatcherUtils.printExpected)(expected)}\n` + | ||
|  |     _chalk.default.reset(`Received:\n`) + | ||
|  |     `  ${(0, _jestMatcherUtils.printReceived)(actual)}` + | ||
|  |     _chalk.default.reset(hasCustomMessage ? '\n\nMessage:\n  ' + message : '') + | ||
|  |     (diffString ? `\n\nDifference:\n\n${diffString}` : '') + | ||
|  |     trimmedStack | ||
|  |   ); | ||
|  | } | ||
|  | 
 | ||
|  | var _default = formatNodeAssertErrors; | ||
|  | exports.default = _default; |