fix: case/when array equality, #673

This commit is contained in:
Yang Jun
2024-04-28 23:17:01 +08:00
committed by Jun Yang
parent 8c7cef9f95
commit 2b630353c4
2 changed files with 15 additions and 1 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
import { ValueToken, Liquid, toValue, evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, Tag, ParseStream } from '..'
import { equals } from '../render'
export default class extends Tag {
value: Value
@@ -58,7 +59,7 @@ export default class extends Tag {
for (const branch of this.branches) {
for (const valueToken of branch.values) {
const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf)
if (target === value) {
if (equals(target, value)) {
yield r.renderTemplates(branch.templates, ctx, emitter)
branchHit = true
break
+13
View File
@@ -119,4 +119,17 @@ describe('tags/case', function () {
'{%- endcase %}', {})
expect(result).toEqual('show this')
})
it('should apply value equal for arrays', () => {
const engine = new Liquid()
const result = engine.parseAndRenderSync(`
{%- assign x = "a,b,c" | split: "," %}
{%- assign y = "a,b,c" | split: "," %}
{% case x %}{% when y %}TRUE{% else %}FALSE{% endcase %}
{% if x == y %}TRUE{% else %}FALSE{% endif %}
`)
expect(result).toEqual(`
TRUE
TRUE
`)
})
})