import { expect } from 'chai' import { Context } from '../../../src/context/context' import { HTMLToken } from '../../../src/tokens/html-token' import { Render } from '../../../src/render/render' import { HTML } from '../../../src/template/html' import { SimpleEmitter } from '../../../src/emitters/simple-emitter' import { toPromise } from '../../../src/util/async' import { Tag } from '../../../src/template/tag/tag' import { TagToken } from '../../../src/types' describe('render', function () { let render: Render before(function () { render = new Render() }) describe('.renderTemplates()', function () { it('should render html', async function () { const scope = new Context() const token = { getContent: () => '

' } as HTMLToken const html = await toPromise(render.renderTemplates([new HTML(token)], scope, new SimpleEmitter())) return expect(html).to.equal('

') }) }) describe('.renderTemplatesToNodeStream()', function () { it('should render to html stream', function (done) { const scope = new Context() const tpls = [ new HTML({ getContent: () => '

' } as HTMLToken), new HTML({ getContent: () => '

' } as HTMLToken) ] const stream = render.renderTemplatesToNodeStream(tpls, scope) let result = '' stream.on('data', (data) => { result += data }) stream.on('end', () => { expect(result).to.equal('

') done() }) }) it('should render to html stream asyncly', function (done) { const scope = new Context() const tpls = [ new HTML({ getContent: () => '

' } as HTMLToken), new Tag({ content: 'foo', args: '', name: 'foo' } as TagToken, [], { tags: { get: () => ({ render: () => new Promise( resolve => setTimeout(() => resolve('async tag'), 10) ) }) } } as any), new HTML({ getContent: () => '

' } as HTMLToken) ] const stream = render.renderTemplatesToNodeStream(tpls, scope) let result = '' stream.on('data', (data) => { result += data }) stream.on('end', () => { expect(result).to.equal('

async tag

') done() }) }) }) })