123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- exports.default = exports.createMatcher = void 0;
- var _jestMatcherUtils = require('jest-matcher-utils');
- var _jestMessageUtil = require('jest-message-util');
- var _print = require('./print');
- var _utils = require('./utils');
- /**
- * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- */
- /* eslint-disable local/ban-types-eventually */
- const DID_NOT_THROW = 'Received function did not throw';
- const getThrown = e => {
- const hasMessage =
- e !== null && e !== undefined && typeof e.message === 'string';
- if (hasMessage && typeof e.name === 'string' && typeof e.stack === 'string') {
- return {
- hasMessage,
- isError: true,
- message: e.message,
- value: e
- };
- }
- return {
- hasMessage,
- isError: false,
- message: hasMessage ? e.message : String(e),
- value: e
- };
- };
- const createMatcher = (matcherName, fromPromise) =>
- function (received, expected) {
- const options = {
- isNot: this.isNot,
- promise: this.promise
- };
- let thrown = null;
- if (fromPromise && (0, _utils.isError)(received)) {
- thrown = getThrown(received);
- } else {
- if (typeof received !== 'function') {
- if (!fromPromise) {
- const placeholder = expected === undefined ? '' : 'expected';
- throw new Error(
- (0, _jestMatcherUtils.matcherErrorMessage)(
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- placeholder,
- options
- ),
- `${(0, _jestMatcherUtils.RECEIVED_COLOR)(
- 'received'
- )} value must be a function`,
- (0, _jestMatcherUtils.printWithType)(
- 'Received',
- received,
- _jestMatcherUtils.printReceived
- )
- )
- );
- }
- } else {
- try {
- received();
- } catch (e) {
- thrown = getThrown(e);
- }
- }
- }
- if (expected === undefined) {
- return toThrow(matcherName, options, thrown);
- } else if (typeof expected === 'function') {
- return toThrowExpectedClass(matcherName, options, thrown, expected);
- } else if (typeof expected === 'string') {
- return toThrowExpectedString(matcherName, options, thrown, expected);
- } else if (expected !== null && typeof expected.test === 'function') {
- return toThrowExpectedRegExp(matcherName, options, thrown, expected);
- } else if (
- expected !== null &&
- typeof expected.asymmetricMatch === 'function'
- ) {
- return toThrowExpectedAsymmetric(matcherName, options, thrown, expected);
- } else if (expected !== null && typeof expected === 'object') {
- return toThrowExpectedObject(matcherName, options, thrown, expected);
- } else {
- throw new Error(
- (0, _jestMatcherUtils.matcherErrorMessage)(
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ),
- `${(0, _jestMatcherUtils.EXPECTED_COLOR)(
- 'expected'
- )} value must be a string or regular expression or class or error`,
- (0, _jestMatcherUtils.printWithType)(
- 'Expected',
- expected,
- _jestMatcherUtils.printExpected
- )
- )
- );
- }
- };
- exports.createMatcher = createMatcher;
- const matchers = {
- toThrow: createMatcher('toThrow'),
- toThrowError: createMatcher('toThrowError')
- };
- const toThrowExpectedRegExp = (matcherName, options, thrown, expected) => {
- const pass = thrown !== null && expected.test(thrown.message);
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected pattern: not ', expected) +
- (thrown !== null && thrown.hasMessage
- ? formatReceived(
- 'Received message: ',
- thrown,
- 'message',
- expected
- ) + formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected pattern: ', expected) +
- (thrown === null
- ? '\n' + DID_NOT_THROW
- : thrown.hasMessage
- ? formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'));
- return {
- message,
- pass
- };
- };
- const toThrowExpectedAsymmetric = (matcherName, options, thrown, expected) => {
- const pass = thrown !== null && expected.asymmetricMatch(thrown.value);
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected asymmetric matcher: not ', expected) +
- '\n' +
- (thrown !== null && thrown.hasMessage
- ? formatReceived('Received name: ', thrown, 'name') +
- formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Thrown value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected asymmetric matcher: ', expected) +
- '\n' +
- (thrown === null
- ? DID_NOT_THROW
- : thrown.hasMessage
- ? formatReceived('Received name: ', thrown, 'name') +
- formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Thrown value: ', thrown, 'value'));
- return {
- message,
- pass
- };
- };
- const toThrowExpectedObject = (matcherName, options, thrown, expected) => {
- const pass = thrown !== null && thrown.message === expected.message;
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected message: not ', expected.message) +
- (thrown !== null && thrown.hasMessage
- ? formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- (thrown === null
- ? formatExpected('Expected message: ', expected.message) +
- '\n' +
- DID_NOT_THROW
- : thrown.hasMessage
- ? (0, _jestMatcherUtils.printDiffOrStringify)(
- expected.message,
- thrown.message,
- 'Expected message',
- 'Received message',
- true
- ) +
- '\n' +
- formatStack(thrown)
- : formatExpected('Expected message: ', expected.message) +
- formatReceived('Received value: ', thrown, 'value'));
- return {
- message,
- pass
- };
- };
- const toThrowExpectedClass = (matcherName, options, thrown, expected) => {
- const pass = thrown !== null && thrown.value instanceof expected;
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- (0, _print.printExpectedConstructorNameNot)(
- 'Expected constructor',
- expected
- ) +
- (thrown !== null &&
- thrown.value != null &&
- typeof thrown.value.constructor === 'function' &&
- thrown.value.constructor !== expected
- ? (0, _print.printReceivedConstructorNameNot)(
- 'Received constructor',
- thrown.value.constructor,
- expected
- )
- : '') +
- '\n' +
- (thrown !== null && thrown.hasMessage
- ? formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- (0, _print.printExpectedConstructorName)(
- 'Expected constructor',
- expected
- ) +
- (thrown === null
- ? '\n' + DID_NOT_THROW
- : (thrown.value != null &&
- typeof thrown.value.constructor === 'function'
- ? (0, _print.printReceivedConstructorName)(
- 'Received constructor',
- thrown.value.constructor
- )
- : '') +
- '\n' +
- (thrown.hasMessage
- ? formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value')));
- return {
- message,
- pass
- };
- };
- const toThrowExpectedString = (matcherName, options, thrown, expected) => {
- const pass = thrown !== null && thrown.message.includes(expected);
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected substring: not ', expected) +
- (thrown !== null && thrown.hasMessage
- ? formatReceived(
- 'Received message: ',
- thrown,
- 'message',
- expected
- ) + formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- undefined,
- options
- ) +
- '\n\n' +
- formatExpected('Expected substring: ', expected) +
- (thrown === null
- ? '\n' + DID_NOT_THROW
- : thrown.hasMessage
- ? formatReceived('Received message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Received value: ', thrown, 'value'));
- return {
- message,
- pass
- };
- };
- const toThrow = (matcherName, options, thrown) => {
- const pass = thrown !== null;
- const message = pass
- ? () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- '',
- options
- ) +
- '\n\n' +
- (thrown !== null && thrown.hasMessage
- ? formatReceived('Error name: ', thrown, 'name') +
- formatReceived('Error message: ', thrown, 'message') +
- formatStack(thrown)
- : formatReceived('Thrown value: ', thrown, 'value'))
- : () =>
- (0, _jestMatcherUtils.matcherHint)(
- matcherName,
- undefined,
- '',
- options
- ) +
- '\n\n' +
- DID_NOT_THROW;
- return {
- message,
- pass
- };
- };
- const formatExpected = (label, expected) =>
- label + (0, _jestMatcherUtils.printExpected)(expected) + '\n';
- const formatReceived = (label, thrown, key, expected) => {
- if (thrown === null) {
- return '';
- }
- if (key === 'message') {
- const message = thrown.message;
- if (typeof expected === 'string') {
- const index = message.indexOf(expected);
- if (index !== -1) {
- return (
- label +
- (0, _print.printReceivedStringContainExpectedSubstring)(
- message,
- index,
- expected.length
- ) +
- '\n'
- );
- }
- } else if (expected instanceof RegExp) {
- return (
- label +
- (0, _print.printReceivedStringContainExpectedResult)(
- message,
- typeof expected.exec === 'function' ? expected.exec(message) : null
- ) +
- '\n'
- );
- }
- return label + (0, _jestMatcherUtils.printReceived)(message) + '\n';
- }
- if (key === 'name') {
- return thrown.isError
- ? label + (0, _jestMatcherUtils.printReceived)(thrown.value.name) + '\n'
- : '';
- }
- if (key === 'value') {
- return thrown.isError
- ? ''
- : label + (0, _jestMatcherUtils.printReceived)(thrown.value) + '\n';
- }
- return '';
- };
- const formatStack = thrown =>
- thrown === null || !thrown.isError
- ? ''
- : (0, _jestMessageUtil.formatStackTrace)(
- (0, _jestMessageUtil.separateMessageFromStack)(thrown.value.stack)
- .stack,
- {
- rootDir: process.cwd(),
- testMatch: []
- },
- {
- noStackTrace: false
- }
- );
- var _default = matchers;
- exports.default = _default;
|