@glimmer/application-test-helpers
Version:
Test helpers for developing @glimmer/component and @glimmer/application
69 lines (55 loc) • 6.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RenderTest = undefined;
exports.renderModule = renderModule;
exports.test = test;
var _appBuilder = require("./app-builder");
var _env = require("@glimmer/env");
function renderModule(name, renderTest) {
QUnit.module(name);
for (let prop in renderTest.prototype) {
const test = renderTest.prototype[prop];
if (isTestFunction(test) && shouldRun(test)) {
['runtime-compiler', 'bytecode'].forEach(loader => {
let app = (0, _appBuilder.buildApp)({
loader
});
QUnit.test(`[${loader}] ${prop}`, assert => test.call({
app
}, assert));
});
}
}
}
function shouldRun(testFunc) {
if (testFunc['debug'] && !_env.DEBUG) {
return false;
}
return true;
}
function isTestFunction(value) {
return typeof value === 'function' && value.isTest;
}
class RenderTest {}
exports.RenderTest = RenderTest;
function setTestingDescriptor(descriptor) {
let testFunction = descriptor.value;
descriptor.enumerable = true;
testFunction['isTest'] = true;
}
function test(...args) {
if (args.length === 1) {
let meta = args[0];
return (_target, _name, descriptor) => {
let testFunction = descriptor.value;
Object.keys(meta).forEach(key => testFunction[key] = meta[key]);
setTestingDescriptor(descriptor);
};
}
let descriptor = args[2];
setTestingDescriptor(descriptor);
return descriptor;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2FwcGxpY2F0aW9uLXRlc3QtaGVscGVycy9zcmMvcmVuZGVyLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBT2dCLFksR0FBQSxZO1FBcURBLEksR0FBQSxJOztBQTVEaEI7O0FBQ0E7O0FBTU0sU0FBVSxZQUFWLENBQXVCLElBQXZCLEVBQXFDLFVBQXJDLEVBQXdFO0FBQzVFLEVBQUEsS0FBSyxDQUFDLE1BQU4sQ0FBYSxJQUFiOztBQUVBLE9BQUssSUFBSSxJQUFULElBQWlCLFVBQVUsQ0FBQyxTQUE1QixFQUF1QztBQUNyQyxVQUFNLElBQUksR0FBRyxVQUFVLENBQUMsU0FBWCxDQUFxQixJQUFyQixDQUFiOztBQUVBLFFBQUksY0FBYyxDQUFDLElBQUQsQ0FBZCxJQUF3QixTQUFTLENBQUMsSUFBRCxDQUFyQyxFQUE2QztBQUMzQyxPQUFDLGtCQUFELEVBQXFCLFVBQXJCLEVBQWlDLE9BQWpDLENBQXlDLE1BQU0sSUFBRztBQUNoRCxZQUFJLEdBQUcsR0FBRywwQkFBUztBQUFFLFVBQUE7QUFBRixTQUFULENBQVY7QUFDQSxRQUFBLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUE5QixFQUFrQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUwsQ0FBVTtBQUFFLFVBQUE7QUFBRixTQUFWLEVBQW1CLE1BQW5CLENBQTVDO0FBQ0QsT0FIRDtBQUlEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTLFNBQVQsQ0FBbUIsUUFBbkIsRUFBZ0M7QUFDOUIsTUFBSSxRQUFRLENBQUMsT0FBRCxDQUFSLElBQXFCLENBQUMsVUFBMUIsRUFBaUM7QUFDL0IsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBUyxjQUFULENBQ0UsS0FERixFQUNZO0FBRVYsU0FBTyxPQUFPLEtBQVAsS0FBaUIsVUFBakIsSUFBK0IsS0FBSyxDQUFDLE1BQTVDO0FBQ0Q7O0FBRUssTUFBTyxVQUFQLENBQWlCOztRQUFWLFUsR0FBQSxVOztBQUliLFNBQVMsb0JBQVQsQ0FBOEIsVUFBOUIsRUFBNEQ7QUFDMUQsTUFBSSxZQUFZLEdBQWlCLFVBQVUsQ0FBQyxLQUE1QztBQUNBLEVBQUEsVUFBVSxDQUFDLFVBQVgsR0FBd0IsSUFBeEI7QUFDQSxFQUFBLFlBQVksQ0FBQyxRQUFELENBQVosR0FBeUIsSUFBekI7QUFDRDs7QUFpQkssU0FBVSxJQUFWLENBQWUsR0FBRyxJQUFsQixFQUE2QjtBQUNqQyxNQUFJLElBQUksQ0FBQyxNQUFMLEtBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLFFBQUksSUFBSSxHQUFhLElBQUksQ0FBQyxDQUFELENBQXpCO0FBQ0EsV0FBTyxDQUFDLE9BQUQsRUFBa0IsS0FBbEIsRUFBaUMsVUFBakMsS0FBbUU7QUFDeEUsVUFBSSxZQUFZLEdBQWlCLFVBQVUsQ0FBQyxLQUE1QztBQUNBLE1BQUEsTUFBTSxDQUFDLElBQVAsQ0FBWSxJQUFaLEVBQWtCLE9BQWxCLENBQTBCLEdBQUcsSUFBSyxZQUFZLENBQUMsR0FBRCxDQUFaLEdBQW9CLElBQUksQ0FBQyxHQUFELENBQTFEO0FBQ0EsTUFBQSxvQkFBb0IsQ0FBQyxVQUFELENBQXBCO0FBQ0QsS0FKRDtBQUtEOztBQUVELE1BQUksVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFELENBQXJCO0FBQ0EsRUFBQSxvQkFBb0IsQ0FBQyxVQUFELENBQXBCO0FBQ0EsU0FBTyxVQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZEFwcCwgVGVzdEFwcGxpY2F0aW9uLCBBcHBCdWlsZGVyIH0gZnJvbSAnLi9hcHAtYnVpbGRlcic7XG5pbXBvcnQgeyBERUJVRyB9IGZyb20gJ0BnbGltbWVyL2Vudic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0b3I8VD4ge1xuICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vZHVsZShuYW1lOiBzdHJpbmcsIHJlbmRlclRlc3Q6IENvbnN0cnVjdG9yPFJlbmRlclRlc3Q+KSB7XG4gIFFVbml0Lm1vZHVsZShuYW1lKTtcblxuICBmb3IgKGxldCBwcm9wIGluIHJlbmRlclRlc3QucHJvdG90eXBlKSB7XG4gICAgY29uc3QgdGVzdCA9IHJlbmRlclRlc3QucHJvdG90eXBlW3Byb3BdO1xuXG4gICAgaWYgKGlzVGVzdEZ1bmN0aW9uKHRlc3QpICYmIHNob3VsZFJ1bih0ZXN0KSkge1xuICAgICAgWydydW50aW1lLWNvbXBpbGVyJywgJ2J5dGVjb2RlJ10uZm9yRWFjaChsb2FkZXIgPT4ge1xuICAgICAgICBsZXQgYXBwID0gYnVpbGRBcHAoeyBsb2FkZXIgfSk7XG4gICAgICAgIFFVbml0LnRlc3QoYFske2xvYWRlcn1dICR7cHJvcH1gLCBhc3NlcnQgPT4gdGVzdC5jYWxsKHsgYXBwIH0sIGFzc2VydCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZFJ1bih0ZXN0RnVuYzogYW55KTogYm9vbGVhbiB7XG4gIGlmICh0ZXN0RnVuY1snZGVidWcnXSAmJiAhREVCVUcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzVGVzdEZ1bmN0aW9uKFxuICB2YWx1ZTogYW55XG4pOiB2YWx1ZSBpcyAodGhpczogUmVuZGVyVGVzdCwgYXNzZXJ0OiB0eXBlb2YgUVVuaXQuYXNzZXJ0KSA9PiB2b2lkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS5pc1Rlc3Q7XG59XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJUZXN0IHtcbiAgYXBwOiBBcHBCdWlsZGVyPFRlc3RBcHBsaWNhdGlvbj47XG59XG5cbmZ1bmN0aW9uIHNldFRlc3RpbmdEZXNjcmlwdG9yKGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IHZvaWQge1xuICBsZXQgdGVzdEZ1bmN0aW9uOiBUZXN0RnVuY3Rpb24gPSBkZXNjcmlwdG9yLnZhbHVlIGFzIFRlc3RGdW5jdGlvbjtcbiAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgdGVzdEZ1bmN0aW9uWydpc1Rlc3QnXSA9IHRydWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE1ldGEge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0RnVuY3Rpb24ge1xuICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChtZXRhOiBUZXN0TWV0YSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KFxuICBfdGFyZ2V0OiBPYmplY3QgfCBUZXN0TWV0YSxcbiAgX25hbWU/OiBzdHJpbmcsXG4gIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3Jcbik6IFByb3BlcnR5RGVzY3JpcHRvciB8IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gdGVzdCguLi5hcmdzOiBhbnlbXSkge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgbWV0YTogVGVzdE1ldGEgPSBhcmdzWzBdO1xuICAgIHJldHVybiAoX3RhcmdldDogT2JqZWN0LCBfbmFtZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgIGxldCB0ZXN0RnVuY3Rpb246IFRlc3RGdW5jdGlvbiA9IGRlc2NyaXB0b3IudmFsdWUgYXMgVGVzdEZ1bmN0aW9uO1xuICAgICAgT2JqZWN0LmtleXMobWV0YSkuZm9yRWFjaChrZXkgPT4gKHRlc3RGdW5jdGlvbltrZXldID0gbWV0YVtrZXldKSk7XG4gICAgICBzZXRUZXN0aW5nRGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICB9O1xuICB9XG5cbiAgbGV0IGRlc2NyaXB0b3IgPSBhcmdzWzJdO1xuICBzZXRUZXN0aW5nRGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9