UNPKG

expression-language

Version:

Javascript implementation of symfony/expression-language

43 lines (42 loc) 2.63 kB
"use strict"; var _NullCoalesceNode = _interopRequireDefault(require("../NullCoalesceNode")); var _ConstantNode = _interopRequireDefault(require("../ConstantNode")); var _NameNode = _interopRequireDefault(require("../NameNode")); var _GetAttrNode = _interopRequireDefault(require("../GetAttrNode")); var _ArgumentsNode = _interopRequireDefault(require("../ArgumentsNode")); var _Compiler = _interopRequireDefault(require("../../Compiler")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } test('evaluate returns the left side when it is not null/undefined', () => { let node = new _NullCoalesceNode.default(new _ConstantNode.default('left'), new _ConstantNode.default('right')); expect(node.evaluate({}, {})).toBe('left'); }); test('evaluate falls back to the right side when the left side is null', () => { let node = new _NullCoalesceNode.default(new _ConstantNode.default(null), new _ConstantNode.default('right')); expect(node.evaluate({}, {})).toBe('right'); }); test('compile produces a JS nullish-coalescing expression', () => { let node = new _NullCoalesceNode.default(new _ConstantNode.default('left'), new _ConstantNode.default('right')); let compiler = new _Compiler.default({}); node.compile(compiler); expect(compiler.getSource()).toBe('(("left") ?? ("right"))'); }); test('toArray/dump renders as a nullish-coalescing expression', () => { let node = new _NullCoalesceNode.default(new _ConstantNode.default('left'), new _ConstantNode.default('right')); expect(node.dump()).toBe('("left") ?? ("right")'); }); test('evaluate marks a GetAttrNode left side (and its GetAttrNode descendants) as null-coalesced', () => { let inner = new _GetAttrNode.default(new _NameNode.default('a'), new _ConstantNode.default('b', true), new _ArgumentsNode.default(), _GetAttrNode.default.PROPERTY_CALL); let outer = new _GetAttrNode.default(inner, new _ConstantNode.default('c', true), new _ArgumentsNode.default(), _GetAttrNode.default.PROPERTY_CALL); let node = new _NullCoalesceNode.default(outer, new _ConstantNode.default('default')); expect(outer.attributes.is_null_coalesce).toBe(false); expect(inner.attributes.is_null_coalesce).toBe(false); node.evaluate({}, { a: {} }); expect(outer.attributes.is_null_coalesce).toBe(true); expect(inner.attributes.is_null_coalesce).toBe(true); }); test('evaluate leaves a non-GetAttrNode left side untouched (no recursive marking)', () => { let node = new _NullCoalesceNode.default(new _ConstantNode.default(null), new _ConstantNode.default('right')); expect(() => node.evaluate({}, {})).not.toThrow(); });