intern
Version:
Intern. A next-generation code testing stack for JavaScript.
105 lines • 3.77 kB
JavaScript
(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