Select Git revision
utils.ts 2.53 KiB
/**
* Copyright (c) 2020-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author Panagiotis Tourlas <panangiot_tourlov@hotmail.com>
* @author Koya Sakuma <koya.sakuma.work@gmail.com>
*/
import { Transpiler } from '../transpiler';
import { KeywordDict, PropertyDict, OperatorList } from '../types';
/* FAULTY IMPORTS */
// import compile from '../../reference-implementation/molql/compiler';
export function testKeywords(keywords: KeywordDict, transpiler: Transpiler) {
for (const name in keywords) {
it(name, () => {
const k = keywords[name];
if (k.map) {
const expr = transpiler(name);
// compile(expr);
expect(expr).toEqual(k.map());
} else {
const transpile = () => transpiler(name);
expect(transpile).toThrow();
expect(transpile).not.toThrowError(RangeError);
}
});
}
}
export function testProperties(properties: PropertyDict, transpiler: Transpiler) {
for (const name in properties) {
const p = properties[name];
p['@examples'].forEach(example => {
it(name, () => {
if (!p.isUnsupported) {
transpiler(example);
// compile(expr);
} else {
const transpile = () => transpiler(example);
expect(transpile).toThrow();
expect(transpile).not.toThrowError(RangeError);
}
});
});
it(name, () => {
if (!p['@examples'].length) {
throw Error(`'${name}' property has no example(s)`);
}
});
}
}
export function testOperators(operators: OperatorList, transpiler: Transpiler) {
operators.forEach(o => {
o['@examples'].forEach(example => {
it(o.name, () => {
if (!o.isUnsupported) {
transpiler(example);
// compile(expr);
} else {
const transpile = () => transpiler(example);
expect(transpile).toThrow();
expect(transpile).not.toThrowError(RangeError);
}
});
});
it(o.name, () => {
if (!o['@examples'].length) {
throw Error(`'${o.name}' operator has no example(s)`);
}
});
});
}