expression-language
Version:
Javascript implementation of symfony/expression-language
43 lines (42 loc) • 2.63 kB
JavaScript
"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();
});