@glimmer/application-test-helpers
Version:
Test helpers for developing @glimmer/component and @glimmer/application
44 lines • 6.45 kB
JavaScript
import { buildApp } from './app-builder';
import { DEBUG } from '@glimmer/env';
export 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 = buildApp({ loader });
QUnit.test(`[${loader}] ${prop}`, assert => test.call({ app }, assert));
});
}
}
}
function shouldRun(testFunc) {
if (testFunc['debug'] && !DEBUG) {
return false;
}
return true;
}
function isTestFunction(value) {
return typeof value === 'function' && value.isTest;
}
export class RenderTest {
}
function setTestingDescriptor(descriptor) {
let testFunction = descriptor.value;
descriptor.enumerable = true;
testFunction['isTest'] = true;
}
export 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;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9hcHBsaWNhdGlvbi10ZXN0LWhlbHBlcnMvc3JjL3JlbmRlci10ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFNckMsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZLEVBQUUsVUFBbUM7SUFDNUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuQixLQUFLLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7UUFDckMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0MsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2hELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUMsQ0FBQztTQUNKO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsUUFBYTtJQUM5QixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLEtBQVU7SUFFVixPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLE9BQU8sVUFBVTtDQUV0QjtBQUVELFNBQVMsb0JBQW9CLENBQUMsVUFBOEI7SUFDMUQsSUFBSSxZQUFZLEdBQWlCLFVBQVUsQ0FBQyxLQUFxQixDQUFDO0lBQ2xFLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQzdCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsQ0FBQztBQWlCRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEdBQUcsSUFBVztJQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLElBQUksSUFBSSxHQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsT0FBZSxFQUFFLEtBQWEsRUFBRSxVQUE4QixFQUFFLEVBQUU7WUFDeEUsSUFBSSxZQUFZLEdBQWlCLFVBQVUsQ0FBQyxLQUFxQixDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7S0FDSDtJQUVELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRBcHAsIFRlc3RBcHBsaWNhdGlvbiwgQXBwQnVpbGRlciB9IGZyb20gJy4vYXBwLWJ1aWxkZXInO1xuaW1wb3J0IHsgREVCVUcgfSBmcm9tICdAZ2xpbW1lci9lbnYnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdG9yPFQ+IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb2R1bGUobmFtZTogc3RyaW5nLCByZW5kZXJUZXN0OiBDb25zdHJ1Y3RvcjxSZW5kZXJUZXN0Pikge1xuICBRVW5pdC5tb2R1bGUobmFtZSk7XG5cbiAgZm9yIChsZXQgcHJvcCBpbiByZW5kZXJUZXN0LnByb3RvdHlwZSkge1xuICAgIGNvbnN0IHRlc3QgPSByZW5kZXJUZXN0LnByb3RvdHlwZVtwcm9wXTtcblxuICAgIGlmIChpc1Rlc3RGdW5jdGlvbih0ZXN0KSAmJiBzaG91bGRSdW4odGVzdCkpIHtcbiAgICAgIFsncnVudGltZS1jb21waWxlcicsICdieXRlY29kZSddLmZvckVhY2gobG9hZGVyID0+IHtcbiAgICAgICAgbGV0IGFwcCA9IGJ1aWxkQXBwKHsgbG9hZGVyIH0pO1xuICAgICAgICBRVW5pdC50ZXN0KGBbJHtsb2FkZXJ9XSAke3Byb3B9YCwgYXNzZXJ0ID0+IHRlc3QuY2FsbCh7IGFwcCB9LCBhc3NlcnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRSdW4odGVzdEZ1bmM6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodGVzdEZ1bmNbJ2RlYnVnJ10gJiYgIURFQlVHKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1Rlc3RGdW5jdGlvbihcbiAgdmFsdWU6IGFueVxuKTogdmFsdWUgaXMgKHRoaXM6IFJlbmRlclRlc3QsIGFzc2VydDogdHlwZW9mIFFVbml0LmFzc2VydCkgPT4gdm9pZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuaXNUZXN0O1xufVxuXG5leHBvcnQgY2xhc3MgUmVuZGVyVGVzdCB7XG4gIGFwcDogQXBwQnVpbGRlcjxUZXN0QXBwbGljYXRpb24+O1xufVxuXG5mdW5jdGlvbiBzZXRUZXN0aW5nRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkIHtcbiAgbGV0IHRlc3RGdW5jdGlvbjogVGVzdEZ1bmN0aW9uID0gZGVzY3JpcHRvci52YWx1ZSBhcyBUZXN0RnVuY3Rpb247XG4gIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIHRlc3RGdW5jdGlvblsnaXNUZXN0J10gPSB0cnVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RNZXRhIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdEZ1bmN0aW9uIHtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobWV0YTogVGVzdE1ldGEpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gdGVzdChcbiAgX3RhcmdldDogT2JqZWN0IHwgVGVzdE1ldGEsXG4gIF9uYW1lPzogc3RyaW5nLFxuICBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yXG4pOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoLi4uYXJnczogYW55W10pIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgbGV0IG1ldGE6IFRlc3RNZXRhID0gYXJnc1swXTtcbiAgICByZXR1cm4gKF90YXJnZXQ6IE9iamVjdCwgX25hbWU6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICBsZXQgdGVzdEZ1bmN0aW9uOiBUZXN0RnVuY3Rpb24gPSBkZXNjcmlwdG9yLnZhbHVlIGFzIFRlc3RGdW5jdGlvbjtcbiAgICAgIE9iamVjdC5rZXlzKG1ldGEpLmZvckVhY2goa2V5ID0+ICh0ZXN0RnVuY3Rpb25ba2V5XSA9IG1ldGFba2V5XSkpO1xuICAgICAgc2V0VGVzdGluZ0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgfTtcbiAgfVxuXG4gIGxldCBkZXNjcmlwdG9yID0gYXJnc1syXTtcbiAgc2V0VGVzdGluZ0Rlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuIl19