UNPKG

intern

Version:

Intern. A next-generation code testing stack for JavaScript.

105 lines 3.77 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "tslib", "@theintern/common", "../Suite", "../Test"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getInterface = exports.afterEach = exports.beforeEach = exports.after = exports.before = exports.test = exports.suite = void 0; var tslib_1 = require("tslib"); var common_1 = require("@theintern/common"); var Suite_1 = tslib_1.__importDefault(require("../Suite")); var Test_1 = tslib_1.__importDefault(require("../Test")); function suite(name, factory) { return _suite(common_1.global.intern, name, factory); } exports.suite = suite; function test(name, test) { if (!currentSuite) { throw new Error('A test must be declared within a suite'); } currentSuite.add(new Test_1.default({ name: name, test: test })); } exports.test = test; function before(fn) { if (!currentSuite) { throw new Error('A suite lifecycle method must be declared within a suite'); } aspect(currentSuite, 'before', fn); } exports.before = before; function after(fn) { if (!currentSuite) { throw new Error('A suite lifecycle method must be declared within a suite'); } aspect(currentSuite, 'after', fn); } exports.after = after; function beforeEach(fn) { if (!currentSuite) { throw new Error('A suite lifecycle method must be declared within a suite'); } aspect(currentSuite, 'beforeEach', fn); } exports.beforeEach = beforeEach; function afterEach(fn) { if (!currentSuite) { throw new Error('A suite lifecycle method must be declared within a suite'); } aspect(currentSuite, 'afterEach', fn); } exports.afterEach = afterEach; function getInterface(executor) { return { suite: function (name, factory) { return _suite(executor, name, factory); }, test: test, before: before, after: after, beforeEach: beforeEach, afterEach: afterEach }; } exports.getInterface = getInterface; var currentSuite; function registerSuite(name, factory) { var parent = currentSuite; currentSuite = new Suite_1.default({ name: name, parent: parent }); parent.add(currentSuite); factory(currentSuite); currentSuite = parent; } function _suite(executor, name, factory) { if (!currentSuite) { executor.addSuite(function (parent) { currentSuite = parent; registerSuite(name, factory); currentSuite = null; }); } else { registerSuite(name, factory); } } function aspect(suite, method, callback) { var originalMethod = suite[method]; suite[method] = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var originalReturn = originalMethod ? originalMethod.apply(suite, args) : undefined; return Promise.resolve(originalReturn).then(function () { return callback.apply(currentSuite, args); }); }; } }); //# sourceMappingURL=tdd.js.map