import { Evaluator, Expression, Scope, VmFunction } from '../dist/index.js'; const e = new Evaluator({ logger: { warn: () => void 0, error: () => void 0, info: () => void 0, debug: () => void 0, }, }); const s = new Scope({}, false); const st = new Scope(null, true); describe('Evaluator.evaluate should work correctly', () => { it('should eval const', () => { const result = e.evaluate(Expression('12'), s); expect(result).toBe(12); }); it('should eval exp', () => { const result = e.evaluate(Expression('exp(2)'), s); expect(result).toBe(Math.exp(2)); }); it('should eval error', () => { const result = e.evaluate(Expression('exp+++'), s); expect(result).toBe(null); }); it('should eval null', () => { const result = e.evaluate(null, s); expect(result).toBe(null); }); it('should eval undefined', () => { const result = e.evaluate(undefined, s); expect(result).toBe(null); }); it('should eval value', () => { { const result = e.evaluate(1, s); expect(result).toBe(1); } { const result = e.evaluate('', s); expect(result).toBe(''); } { const result = e.evaluate(false, s); expect(result).toBe(false); } }); it('should eval vm function', () => { const f = VmFunction(() => 1); const result = e.evaluate(f, s); expect(result).toBe(f); }); }); describe('Evaluator.evaluate should convert result', () => { it('should eval const', () => { const result = e.evaluate(Expression('12', 'string'), s); expect(result).toBe('12'); }); it('should eval exp', () => { const result = e.evaluate(Expression('exp(2)', 's'), s); expect(result).toBe(Math.exp(2).toString()); }); it('should not convert defaults', () => { { const result = e.evaluate(Expression('nil', 's'), s, 1); expect(result).toBe(1); } { // syntax error expect(() => e.evaluate(Expression('exp+++', 's'), undefined, 1)).toThrow(); } { // syntax error cached expect(() => e.evaluate(Expression('exp+++', 's'), st)).toThrow(); } { // runtime error const result = e.evaluate(Expression('x() + 1', 's'), s, 1); expect(result).toBe(1); } }); });