diff options
Diffstat (limited to 'node_modules/jest-each/build/validation.js')
-rw-r--r-- | node_modules/jest-each/build/validation.js | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/node_modules/jest-each/build/validation.js b/node_modules/jest-each/build/validation.js new file mode 100644 index 0000000..4007adf --- /dev/null +++ b/node_modules/jest-each/build/validation.js @@ -0,0 +1,133 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.validateTemplateTableArguments = + exports.validateArrayTable = + exports.extractValidTemplateHeadings = + void 0; + +function _chalk() { + const data = _interopRequireDefault(require('chalk')); + + _chalk = function () { + return data; + }; + + return data; +} + +function _prettyFormat() { + const data = require('pretty-format'); + + _prettyFormat = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} + +/** + * 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. + * + */ +const EXPECTED_COLOR = _chalk().default.green; + +const RECEIVED_COLOR = _chalk().default.red; + +const validateArrayTable = table => { + if (!Array.isArray(table)) { + throw new Error( + '`.each` must be called with an Array or Tagged Template Literal.\n\n' + + `Instead was called with: ${(0, _prettyFormat().format)(table, { + maxDepth: 1, + min: true + })}\n` + ); + } + + if (isTaggedTemplateLiteral(table)) { + if (isEmptyString(table[0])) { + throw new Error( + 'Error: `.each` called with an empty Tagged Template Literal of table data.\n' + ); + } + + throw new Error( + 'Error: `.each` called with a Tagged Template Literal with no data, remember to interpolate with ${expression} syntax.\n' + ); + } + + if (isEmptyTable(table)) { + throw new Error( + 'Error: `.each` called with an empty Array of table data.\n' + ); + } +}; + +exports.validateArrayTable = validateArrayTable; + +const isTaggedTemplateLiteral = array => array.raw !== undefined; + +const isEmptyTable = table => table.length === 0; + +const isEmptyString = str => typeof str === 'string' && str.trim() === ''; + +const validateTemplateTableArguments = (headings, data) => { + const missingData = data.length % headings.length; + + if (missingData > 0) { + throw new Error( + 'Not enough arguments supplied for given headings:\n' + + EXPECTED_COLOR(headings.join(' | ')) + + '\n\n' + + 'Received:\n' + + RECEIVED_COLOR((0, _prettyFormat().format)(data)) + + '\n\n' + + `Missing ${RECEIVED_COLOR(missingData.toString())} ${pluralize( + 'argument', + missingData + )}` + ); + } +}; + +exports.validateTemplateTableArguments = validateTemplateTableArguments; + +const pluralize = (word, count) => word + (count === 1 ? '' : 's'); + +const START_OF_LINE = '^'; +const NEWLINE = '\\n'; +const HEADING = '\\s*[^\\s]+\\s*'; +const PIPE = '\\|'; +const REPEATABLE_HEADING = `(${PIPE}${HEADING})*`; +const HEADINGS_FORMAT = new RegExp( + START_OF_LINE + NEWLINE + HEADING + REPEATABLE_HEADING + NEWLINE, + 'g' +); + +const extractValidTemplateHeadings = headings => { + const matches = headings.match(HEADINGS_FORMAT); + + if (matches === null) { + throw new Error( + 'Table headings do not conform to expected format:\n\n' + + EXPECTED_COLOR('heading1 | headingN') + + '\n\n' + + 'Received:\n\n' + + RECEIVED_COLOR((0, _prettyFormat().format)(headings)) + ); + } + + return matches[0]; +}; + +exports.extractValidTemplateHeadings = extractValidTemplateHeadings; |