import { Evaluator, type ExpressionSource, Scope } from '../dist/index.js'; const e = new Evaluator({ logger: undefined, }); const en = new Evaluator({ logger: { warn: () => void 0, error: () => void 0, info: () => void 0, debug: () => void 0, }, }); const s = new Scope(undefined, false); describe('Evaluate conditions', () => { it('can evaluate boolean literals', () => { expect(e.evaluateCondition(true, s)).toBe(true); expect(e.evaluateCondition(false, s)).toBe(false); }); it('can evaluate empty literals', () => { expect(e.evaluateCondition(null, s)).toBe(true); expect(e.evaluateCondition(undefined, s)).toBe(true); }); it('can evaluate well known strings', () => { expect(e.evaluateCondition('' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('true' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('false' as ExpressionSource, s)).toBe(false); }); it('can evaluate to boolean', () => { expect(e.evaluateCondition('(false)' as ExpressionSource, s)).toBe(false); expect(e.evaluateCondition('(true)' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('(false)' as ExpressionSource, s, false)).toBe(false); expect(e.evaluateCondition('(true)' as ExpressionSource, s, false)).toBe(true); }); it('can evaluate to nil', () => { expect(e.evaluateCondition('{}' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('{}' as ExpressionSource, s, false)).toBe(false); }); it('do not convert to boolean', () => { expect(en.evaluateCondition('""' as ExpressionSource, s)).toBe(true); expect(en.evaluateCondition('nil' as ExpressionSource, s)).toBe(true); expect(en.evaluateCondition('undefined' as ExpressionSource, s)).toBe(true); expect(en.evaluateCondition('0' as ExpressionSource, s)).toBe(true); expect(en.evaluateCondition('nan' as ExpressionSource, s)).toBe(true); expect(en.evaluateCondition('""' as ExpressionSource, s, false)).toBe(false); expect(en.evaluateCondition('nil' as ExpressionSource, s, false)).toBe(false); expect(en.evaluateCondition('undefined' as ExpressionSource, s, false)).toBe(false); expect(en.evaluateCondition('0' as ExpressionSource, s, false)).toBe(false); expect(en.evaluateCondition('nan' as ExpressionSource, s, false)).toBe(false); }); it('can evaluate complex', () => { expect(e.evaluateCondition('12>3' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('12<3' as ExpressionSource, s)).toBe(false); expect(e.evaluateCondition('12==3' as ExpressionSource, s)).toBe(false); expect(e.evaluateCondition('12!=3' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('12>=3' as ExpressionSource, s)).toBe(true); expect(e.evaluateCondition('12<=3' as ExpressionSource, s)).toBe(false); }); it('can return default on error', () => { expect(en.evaluateCondition('12>>3' as ExpressionSource, undefined, true)).toBe(true); expect(en.evaluateCondition('12>>3' as ExpressionSource, null, false)).toBe(false); }); });