Skip to content
Snippets Groups Projects
Select Git revision
  • d15bc28a48e304fb3f7047620159e43a713644f3
  • main default protected
2 results

os-index.md

Blame
  • 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)`);
                }
            });
        });
    }