diff options
Diffstat (limited to 'node_modules/jest-matcher-utils/build/index.js')
-rw-r--r-- | node_modules/jest-matcher-utils/build/index.js | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/node_modules/jest-matcher-utils/build/index.js b/node_modules/jest-matcher-utils/build/index.js new file mode 100644 index 000000000..571c34b93 --- /dev/null +++ b/node_modules/jest-matcher-utils/build/index.js @@ -0,0 +1,219 @@ +/** + * Copyright (c) 2014, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * + */ + +'use strict'; + +const chalk = require('chalk'); +const prettyFormat = require('pretty-format'); +const AsymmetricMatcherPlugin = require('pretty-format/build/plugins/AsymmetricMatcher'); + +const PLUGINS = [AsymmetricMatcherPlugin]; + + + + + + + + + + + + + + + +const EXPECTED_COLOR = chalk.green; +const EXPECTED_BG = chalk.bgGreen; +const RECEIVED_COLOR = chalk.red; +const RECEIVED_BG = chalk.bgRed; + +const NUMBERS = [ +'zero', +'one', +'two', +'three', +'four', +'five', +'six', +'seven', +'eight', +'nine', +'ten', +'eleven', +'twelve', +'thirteen']; + + +// get the type of a value with handling the edge cases like `typeof []` +// and `typeof null` +const getType = value => { + if (typeof value === 'undefined') { + return 'undefined'; + } else if (value === null) { + return 'null'; + } else if (Array.isArray(value)) { + return 'array'; + } else if (typeof value === 'boolean') { + return 'boolean'; + } else if (typeof value === 'function') { + return 'function'; + } else if (typeof value === 'number') { + return 'number'; + } else if (typeof value === 'string') { + return 'string'; + } else if (typeof value === 'object') { + if (value.constructor === RegExp) { + return 'regexp'; + } else if (value.constructor === Map) { + return 'map'; + } else if (value.constructor === Set) { + return 'set'; + } + return 'object'; + // $FlowFixMe https://github.com/facebook/flow/issues/1015 + } else if (typeof value === 'symbol') { + return 'symbol'; + } + + throw new Error(`value of unknown type: ${value}`); +}; + +const stringify = function (object) {let maxDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; + const MAX_LENGTH = 10000; + let result; + + try { + result = prettyFormat(object, { + maxDepth, + min: true, + plugins: PLUGINS }); + + } catch (e) { + result = prettyFormat(object, { + callToJSON: false, + maxDepth, + min: true, + plugins: PLUGINS }); + + } + + return result.length >= MAX_LENGTH && maxDepth > 1 ? + stringify(object, Math.floor(maxDepth / 2)) : + result; +}; + +const highlightTrailingWhitespace = (text, bgColor) => +text.replace(/\s+$/gm, bgColor('$&')); + +const printReceived = object => highlightTrailingWhitespace( +RECEIVED_COLOR(stringify(object)), +RECEIVED_BG); + +const printExpected = value => highlightTrailingWhitespace( +EXPECTED_COLOR(stringify(value)), +EXPECTED_BG); + + +const printWithType = ( +name, +received, +print) => +{ + const type = getType(received); + return ( + name + ':' + ( + type !== 'null' && type !== 'undefined' ? + '\n ' + type + ': ' : + ' ') + + print(received)); + +}; + +const ensureNoExpected = (expected, matcherName) => { + matcherName || (matcherName = 'This'); + if (typeof expected !== 'undefined') { + throw new Error( + matcherHint('[.not]' + matcherName, undefined, '') + '\n\n' + + 'Matcher does not accept any arguments.\n' + + printWithType('Got', expected, printExpected)); + + } +}; + +const ensureActualIsNumber = (actual, matcherName) => { + matcherName || (matcherName = 'This matcher'); + if (typeof actual !== 'number') { + throw new Error( + matcherHint('[.not]' + matcherName) + '\n\n' + + `Actual value must be a number.\n` + + printWithType('Received', actual, printReceived)); + + } +}; + +const ensureExpectedIsNumber = (expected, matcherName) => { + matcherName || (matcherName = 'This matcher'); + if (typeof expected !== 'number') { + throw new Error( + matcherHint('[.not]' + matcherName) + '\n\n' + + `Expected value must be a number.\n` + + printWithType('Got', expected, printExpected)); + + } +}; + +const ensureNumbers = (actual, expected, matcherName) => { + ensureActualIsNumber(actual, matcherName); + ensureExpectedIsNumber(expected, matcherName); +}; + +const pluralize = +(word, count) => +(NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); + +const matcherHint = function ( +matcherName) + + + + + + +{let received = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'received';let expected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'expected';let options = arguments[3]; + const secondArgument = options && options.secondArgument; + const isDirectExpectCall = options && options.isDirectExpectCall; + return ( + chalk.dim('expect' + (isDirectExpectCall ? '' : '(')) + + RECEIVED_COLOR(received) + + chalk.dim((isDirectExpectCall ? '' : ')') + matcherName + '(') + + EXPECTED_COLOR(expected) + ( + secondArgument ? `, ${EXPECTED_COLOR(secondArgument)}` : '') + + chalk.dim(')')); + +}; + +module.exports = { + EXPECTED_BG, + EXPECTED_COLOR, + RECEIVED_BG, + RECEIVED_COLOR, + ensureActualIsNumber, + ensureExpectedIsNumber, + ensureNoExpected, + ensureNumbers, + getType, + highlightTrailingWhitespace, + matcherHint, + pluralize, + printExpected, + printReceived, + printWithType, + stringify };
\ No newline at end of file |