fix: Allow lenientIf for multiple operands (issue #682) (#683)

* allow `lenientIf` for multiple operands

* update tests
This commit is contained in:
Max Medve
2024-04-21 16:04:38 +08:00
committed by GitHub
parent e09657c52b
commit 490ff4309c
2 changed files with 10 additions and 5 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ export class Expression {
}
operands.push(result)
} else {
operands.push(yield evalToken(token, ctx, lenient && this.postfix.length === 1))
operands.push(yield evalToken(token, ctx, lenient))
}
}
return operands[0]
+9 -4
View File
@@ -55,10 +55,15 @@ describe('LiquidOptions#strict*', function () {
const html = await engine.render(tpl, ctx)
return expect(html).toBe('beforeXafter')
})
it('should still throw with an undefined variable in a compound `if` expression', function () {
const tpl = engine.parse('{% if notdefined == 15 %}a{% endif %}')
const fhtml = engine.render(tpl, ctx)
return expect(fhtml).rejects.toThrow(/undefined variable: notdefined/)
it('should not throw with an undefined variable in a compound `if` expression', async function () {
const tpl = engine.parse('before{% if notdefined == 15 %}X{% else %}Y{% endif %}after')
const html = await engine.render(tpl, ctx)
return expect(html).toBe('beforeYafter')
})
it('should correctly evaluate undefined variable in a compound `if` expression', async function () {
const tpl = engine.parse('before{% if notdefined != "value" %}X{% else %}Y{% endif %}after')
const html = await engine.render(tpl, ctx)
return expect(html).toBe('beforeXafter')
})
it('should allow an undefined variable when before the `default` filter', async function () {
const tpl = engine.parse('{{notdefined | default: "a" | tolower}}')