UNPKG

2.66 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6exports.default = bind;
7function _jestUtil() {
8 const data = require('jest-util');
9 _jestUtil = function () {
10 return data;
11 };
12 return data;
13}
14var _array = _interopRequireDefault(require('./table/array'));
15var _template = _interopRequireDefault(require('./table/template'));
16var _validation = require('./validation');
17function _interopRequireDefault(obj) {
18 return obj && obj.__esModule ? obj : {default: obj};
19}
20/**
21 * Copyright (c) Meta Platforms, Inc. and affiliates.
22 *
23 * This source code is licensed under the MIT license found in the
24 * LICENSE file in the root directory of this source tree.
25 *
26 */
27
28// type TestFn = (done?: Global.DoneFn) => Promise<any> | void | undefined;
29
30function bind(cb, supportsDone = true, needsEachError = false) {
31 const bindWrap = (table, ...taggedTemplateData) => {
32 const error = new (_jestUtil().ErrorWithStack)(undefined, bindWrap);
33 return function eachBind(title, test, timeout) {
34 title = (0, _jestUtil().convertDescriptorToString)(title);
35 try {
36 const tests = isArrayTable(taggedTemplateData)
37 ? buildArrayTests(title, table)
38 : buildTemplateTests(title, table, taggedTemplateData);
39 return tests.forEach(row =>
40 needsEachError
41 ? cb(
42 row.title,
43 applyArguments(supportsDone, row.arguments, test),
44 timeout,
45 error
46 )
47 : cb(
48 row.title,
49 applyArguments(supportsDone, row.arguments, test),
50 timeout
51 )
52 );
53 } catch (e) {
54 const err = new Error(e.message);
55 err.stack = error.stack?.replace(/^Error: /s, `Error: ${e.message}`);
56 return cb(title, () => {
57 throw err;
58 });
59 }
60 };
61 };
62 return bindWrap;
63}
64const isArrayTable = data => data.length === 0;
65const buildArrayTests = (title, table) => {
66 (0, _validation.validateArrayTable)(table);
67 return (0, _array.default)(title, table);
68};
69const buildTemplateTests = (title, table, taggedTemplateData) => {
70 const headings = getHeadingKeys(table[0]);
71 (0, _validation.validateTemplateTableArguments)(headings, taggedTemplateData);
72 return (0, _template.default)(title, headings, taggedTemplateData);
73};
74const getHeadingKeys = headings =>
75 (0, _validation.extractValidTemplateHeadings)(headings)
76 .replace(/\s/g, '')
77 .split('|');
78const applyArguments = (supportsDone, params, test) =>
79 supportsDone && params.length < test.length
80 ? done => test(...params, done)
81 : () => test(...params);