2022-03-23 15:20:13 +03:00
|
|
|
import {expect} from 'chai'
|
|
|
|
import {html, render} from '../lib/index.js'
|
|
|
|
import type {TemplateResult} from '../lib/index.js'
|
2022-03-23 13:19:16 +03:00
|
|
|
|
|
|
|
describe('render', () => {
|
2022-03-23 15:20:13 +03:00
|
|
|
let surface: HTMLElement
|
2022-03-23 13:19:16 +03:00
|
|
|
beforeEach(() => {
|
|
|
|
surface = document.createElement('section')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('memoizes by TemplateResult#template, updating old templates with new values', () => {
|
2022-03-23 15:20:13 +03:00
|
|
|
const main = (x: string | null = null) => html`<div class="${x}"></div>`
|
2022-03-23 13:19:16 +03:00
|
|
|
render(main('foo'), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<div class="foo"></div>')
|
|
|
|
render(main('bar'), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<div class="bar"></div>')
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('nesting', () => {
|
|
|
|
it('supports nested html calls', () => {
|
2022-03-23 15:20:13 +03:00
|
|
|
const main = (child: TemplateResult) => html`<div>${child}</div>`
|
|
|
|
const child = (message: string) => html`<span>${message}</span>`
|
2022-03-23 13:19:16 +03:00
|
|
|
render(main(child('Hello')), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<div><span>Hello</span></div>')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('updates nodes from repeat calls', () => {
|
2022-03-23 15:20:13 +03:00
|
|
|
const main = (child: TemplateResult) => html`<div>${child}</div>`
|
|
|
|
const child = (message: string) => html`<span>${message}</span>`
|
2022-03-23 13:19:16 +03:00
|
|
|
render(main(child('Hello')), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<div><span>Hello</span></div>')
|
|
|
|
render(main(child('Goodbye')), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<div><span>Goodbye</span></div>')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('can nest document fragments and text nodes', () => {
|
2022-03-23 15:20:13 +03:00
|
|
|
const main = (frag: DocumentFragment) => html`<span>${frag}</span>`
|
2022-03-23 13:19:16 +03:00
|
|
|
const fragment = document.createDocumentFragment()
|
|
|
|
fragment.append(new Text('Hello World'))
|
|
|
|
render(main(fragment), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<span>Hello World</span>')
|
|
|
|
fragment.append(document.createTextNode('Hello Universe!'))
|
|
|
|
render(main(fragment), surface)
|
|
|
|
expect(surface.innerHTML).to.equal('<span>Hello Universe!</span>')
|
|
|
|
})
|
|
|
|
|
|
|
|
it('renders DocumentFragments nested in sub templates nested in arrays', () => {
|
|
|
|
const sub = () => {
|
|
|
|
const frag = document.createDocumentFragment()
|
|
|
|
frag.appendChild(document.createElement('div'))
|
|
|
|
return html`<span>${frag}</span>`
|
|
|
|
}
|
|
|
|
const main = () => html`<div>${[sub(), sub()]}</div>`
|
|
|
|
render(main(), surface)
|
|
|
|
expect(surface.innerHTML).to.contain('<div><span><div></div></span><span><div></div></span></div>')
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|