test: use inline Tag classes in register-tags spec

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Yang Jun
2026-07-08 00:16:01 +08:00
co-authored by Cursor
parent 19722a2739
commit d83239723d
+22 -26
View File
@@ -3,24 +3,43 @@ import { Tag } from '../../../src/template/tag'
import type { Context } from '../../../src/context' import type { Context } from '../../../src/context'
import type { TagToken, TopLevelToken } from '../../../src/tokens' import type { TagToken, TopLevelToken } from '../../../src/tokens'
describe('liquid#registerTag()', function () {
it('should support render to simple string', async () => {
class SimpleStringTag extends Tag { class SimpleStringTag extends Tag {
render () { render () {
return 'B' return 'B'
} }
} }
const liquid = new Liquid()
liquid.registerTag('simple-string', SimpleStringTag)
const html = await liquid.parseAndRender(`A{% simple-string %}C`)
return expect(html).toBe('ABC')
})
it('should support async tag render', async () => {
class AsyncStringTag extends Tag { class AsyncStringTag extends Tag {
async render () { async render () {
return 'B' return 'B'
} }
} }
const liquid = new Liquid()
liquid.registerTag('async-string', AsyncStringTag)
const html = await liquid.parseAndRender(`A{% async-string %}C`)
return expect(html).toBe('ABC')
})
it('should have access to ctx in render()', async () => {
class DynamicStringTag extends Tag { class DynamicStringTag extends Tag {
async render (ctx: Context) { async render (ctx: Context) {
return ctx.get(['c']) return ctx.get(['c'])
} }
} }
const liquid = new Liquid()
liquid.registerTag('dynamic-string', DynamicStringTag)
const html = await liquid.parseAndRender(`A{% dynamic-string %}C`, {
c: 'B'
})
return expect(html).toBe('ABC')
})
it('should have access to tag arguments', async () => {
class ArgumentReflectorTag extends Tag { class ArgumentReflectorTag extends Tag {
variable: string variable: string
constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) { constructor (token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid) {
@@ -31,29 +50,6 @@ class ArgumentReflectorTag extends Tag {
return ctx.get([this.variable]) return ctx.get([this.variable])
} }
} }
describe('liquid#registerTag()', function () {
it('should support render to simple string', async () => {
const liquid = new Liquid()
liquid.registerTag('simple-string', SimpleStringTag)
const html = await liquid.parseAndRender(`A{% simple-string %}C`)
return expect(html).toBe('ABC')
})
it('should support async tag render', async () => {
const liquid = new Liquid()
liquid.registerTag('async-string', AsyncStringTag)
const html = await liquid.parseAndRender(`A{% async-string %}C`)
return expect(html).toBe('ABC')
})
it('should have access to ctx in render()', async () => {
const liquid = new Liquid()
liquid.registerTag('dynamic-string', DynamicStringTag)
const html = await liquid.parseAndRender(`A{% dynamic-string %}C`, {
c: 'B'
})
return expect(html).toBe('ABC')
})
it('should have access to tag arguments', async () => {
const liquid = new Liquid() const liquid = new Liquid()
liquid.registerTag('argument-reflector', ArgumentReflectorTag) liquid.registerTag('argument-reflector', ArgumentReflectorTag)
const html = await liquid.parseAndRender(`A{% argument-reflector variable=c %}C`, { const html = await liquid.parseAndRender(`A{% argument-reflector variable=c %}C`, {