You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.1 KiB
79 lines
2.1 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.default = bind; |
|
|
|
function _jestUtil() { |
|
const data = require('jest-util'); |
|
|
|
_jestUtil = function () { |
|
return data; |
|
}; |
|
|
|
return data; |
|
} |
|
|
|
var _array = _interopRequireDefault(require('./table/array')); |
|
|
|
var _template = _interopRequireDefault(require('./table/template')); |
|
|
|
var _validation = require('./validation'); |
|
|
|
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. |
|
* |
|
*/ |
|
function bind(cb, supportsDone = true) { |
|
return (table, ...taggedTemplateData) => |
|
function eachBind(title, test, timeout) { |
|
try { |
|
const tests = isArrayTable(taggedTemplateData) |
|
? buildArrayTests(title, table) |
|
: buildTemplateTests(title, table, taggedTemplateData); |
|
return tests.forEach(row => |
|
cb( |
|
row.title, |
|
applyArguments(supportsDone, row.arguments, test), |
|
timeout |
|
) |
|
); |
|
} catch (e) { |
|
const error = new (_jestUtil().ErrorWithStack)(e.message, eachBind); |
|
return cb(title, () => { |
|
throw error; |
|
}); |
|
} |
|
}; |
|
} |
|
|
|
const isArrayTable = data => data.length === 0; |
|
|
|
const buildArrayTests = (title, table) => { |
|
(0, _validation.validateArrayTable)(table); |
|
return (0, _array.default)(title, table); |
|
}; |
|
|
|
const buildTemplateTests = (title, table, taggedTemplateData) => { |
|
const headings = getHeadingKeys(table[0]); |
|
(0, _validation.validateTemplateTableArguments)(headings, taggedTemplateData); |
|
return (0, _template.default)(title, headings, taggedTemplateData); |
|
}; |
|
|
|
const getHeadingKeys = headings => |
|
(0, _validation.extractValidTemplateHeadings)(headings) |
|
.replace(/\s/g, '') |
|
.split('|'); |
|
|
|
const applyArguments = (supportsDone, params, test) => |
|
supportsDone && params.length < test.length |
|
? done => test(...params, done) |
|
: () => test(...params);
|
|
|