Skip to content

Commit

Permalink
fix: throw ParseError instead of RenderError for invalid assign expre…
Browse files Browse the repository at this point in the history
…ssion, closes #519
  • Loading branch information
harttle committed Jul 14, 2022
1 parent 0aca2dd commit c41a5d5
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
6 changes: 3 additions & 3 deletions src/builtin/tags/assign.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Tokenizer, assert, TagImplOptions, TagToken, Context } from '../../types'
import { Value, Tokenizer, assert, TagImplOptions, TagToken, Context } from '../../types'

export default {
parse: function (token: TagToken) {
Expand All @@ -7,9 +7,9 @@ export default {
tokenizer.skipBlank()
assert(tokenizer.peek() === '=', () => `illegal token ${token.getText()}`)
tokenizer.advance()
this.value = tokenizer.remaining()
this.value = new Value(tokenizer.remaining(), this.liquid)
},
render: function * (ctx: Context): Generator<unknown, void, unknown> {
ctx.bottom()[this.key] = yield this.liquid._evalValue(this.value, ctx)
ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf)
}
} as TagImplOptions
4 changes: 4 additions & 0 deletions test/e2e/issues.ts
Original file line number Diff line number Diff line change
Expand Up @@ -256,4 +256,8 @@ describe('Issues', function () {
const html = engine.parseAndRenderSync(`{% for i in (1..10000) %}{{ i }}{% endfor %}`)
expect(html).to.have.lengthOf(38894)
})
it('#519 should throw parse error for invalid assign expression', () => {
const engine = new Liquid()
expect(() => engine.parse('{% assign headshot = https://testurl.com/not_enclosed_in_quotes.jpg %}')).to.throw(/unexpected token at ":/)
})
})
7 changes: 4 additions & 3 deletions test/integration/builtin/tags/assign.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Liquid } from '../../../../src/liquid'
import { ParseError, Liquid } from '../../../../src/liquid'
import { expect, use } from 'chai'
import * as chaiAsPromised from 'chai-as-promised'

Expand All @@ -16,9 +16,10 @@ describe('tags/assign', function () {
const html = await liquid.parseAndRender(src)
return expect(html).to.equal('bar')
})
it('should throw when variable value illegal', async function () {
it('should throw when variable value illegal', function () {
const src = '{% assign foo = “bar” %}'
return expect(liquid.parseAndRender(src)).to.be.rejectedWith(/unexpected token at "“bar”"/)
expect(() => liquid.parse(src)).to.throw(/unexpected token at "“bar”"/)
expect(() => liquid.parse(src)).to.throw(ParseError)
})
it('should support assign to a number', async function () {
const src = '{% assign foo=10086 %}{{foo}}'
Expand Down

0 comments on commit c41a5d5

Please sign in to comment.