/** 求值结果不应包含 PROXY */ import type { VmRecord } from '@mirascript/mirascript'; import { Evaluator, Expression, Scope } from '../dist/index.js'; const o = { a: { b: { ɵexp: '', source: 'dd' }, }, bb: { c: '111', e: { ɵexp: '', source: 'dd' } }, dd: { ɵexp: 'f', source: 'bb.c' }, ea: { ɵexp: '', source: 'a' }, comp: { ɵexp: '', source: 'acos(a.b)' }, }; const e = new Evaluator(); const s = new Scope(o, false); describe('Evaluator should unwrap correctly', () => { it('should unwrap object', () => { const result = e.evaluate(Expression('a'), s); expect(result).not.toBeProxy(); expect(result).toBe(o.a); }); it('should unwrap record', () => { const result = e.evaluate(Expression('(:a)'), s)!; expect(result).not.toBeProxy(); expect(result['a']).not.toBeProxy(); expect(result['a']).toBe(o.a); }); it('should unwrap recursively', () => { const result = e.evaluate(Expression('ea'), s); expect(result).not.toBeProxy(); expect(result).toBe(o.a); }); it('should unwrap primitive', () => { expect(e.evaluate(Expression('a.b'), s)).toBe(111); expect(e.evaluate(Expression('( value: a.b )'), s)?.['value']).toBe(111); }); it('should unwrap complex', () => { const result = e.evaluate(Expression('comp'), s); expect(result).not.toBeProxy(); expect(result).toEqual(Math.acos(111)); }); });