import { VmFunction } from '@mirascript/mirascript'; import { Evaluator, Expression, Scope } from '../dist/index.js'; import { convert, lib } from '@mirascript/mirascript/subtle'; const e = new Evaluator({ logger: { warn: () => void 0, error: () => void 0, info: () => void 0, debug: () => void 0, }, }); const e2 = new Evaluator({ logger: { warn: () => void 0, error: () => void 0, info: () => void 0, debug: () => void 0, }, }); const s = new Scope(undefined, false); describe('Import should work correctly', () => { it('can import modules', () => { e.import({ add: (x: number, y: number) => x + y }); expect(e.evaluate(Expression('add(1,2)'), s)).toBe(3); expect(e.evaluate(Expression('add::type()'), s)).toBe('extern'); expect(e2.evaluate(Expression('add(1,2)'), s)).toBe(null); expect(e2.evaluate(Expression('add::type()'), s)).toBe(null); }); it('can remove modules', () => { e.import({ add: (x: number, y: number) => x + y }); expect(e.evaluate(Expression('add(1,2)'), s)).toBe(3); e.import({ add: undefined }); expect(e.evaluate(Expression('add(1,2)'), s)).toBe(null); }); it('can replace modules', () => { e.import({ add: (x: number, y: number) => x + y }); expect(e.evaluate(Expression('add::type()'), s)).toBe('extern'); e.import({ add: VmFunction((x, y) => convert.toNumber(x, 0) + convert.toNumber(y, 0)) }); expect(e.evaluate(Expression('add::type()'), s)).toBe('function'); }); });