fix: use drop valueOf when evaluated as condition (#705)

This commit is contained in:
Adam Tanner
2024-06-05 08:28:21 +08:00
committed by GitHub
parent 513940dfa7
commit a7da93ff0f
3 changed files with 27 additions and 2 deletions
+13 -1
View File
@@ -1,4 +1,4 @@
import { Liquid } from '../../../src/liquid'
import { Liquid, Drop } from '../../../src'
describe('tags/if', function () {
const liquid = new Liquid()
@@ -9,6 +9,12 @@ describe('tags/if', function () {
emptyArray: []
}
class BooleanDrop extends Drop {
public valueOf () {
return false
}
}
it('should throw if not closed', function () {
const src = '{% if false%}yes'
return expect(liquid.parseAndRender(src, scope))
@@ -143,6 +149,12 @@ describe('tags/if', function () {
const html = await liquid.parseAndRender(src, scope)
return expect(html).toBe('success')
})
it('should support drop as condition variable', async () => {
const src = `{% if drop %}yes{% else %}no{% endif %}`
const scope = { drop: new BooleanDrop() }
const html = await liquid.parseAndRender(src, scope)
return expect(html).toBe('no')
})
it('should not render anything after an else branch even when first else branch is empty', () => {
const engine = new Liquid()
const result = engine.parseAndRenderSync('{% if false %}don\'t show' +