import { describe, it, expect, beforeEach, afterEach } from 'vitest' import { createRoot } from '../lib/vdom.ts' import { renderToString } from '../lib/stream.ts' import { invariant } from '../lib/invariant.ts' describe('hydration', () => { let container: HTMLDivElement beforeEach(() => { container = document.createElement('div') document.body.appendChild(container) }) afterEach(() => { document.body.innerHTML = '' for (let node of Array.from(document.head.childNodes)) { document.head.removeChild(node) } }) describe('self-closing/void elements', () => { it('hydrates input element', async () => { let html = await renderToString() container.innerHTML = html let existingInput = container.querySelector('input') invariant(existingInput) let root = createRoot(container) root.render() root.flush() expect(container.querySelector('input')).toBe(existingInput) expect(existingInput.placeholder).toBe('Enter text') }) it('hydrates br element', async () => { let html = await renderToString(
)
container.innerHTML = html
let existingImg = container.querySelector('img')
invariant(existingImg)
let root = createRoot(container)
root.render(
)
root.flush()
expect(container.querySelector('img')).toBe(existingImg)
expect(existingImg.getAttribute('src')).toBe('/image.png')
expect(existingImg.getAttribute('alt')).toBe('Test image')
})
it('hydrates hr element', async () => {
let html = await renderToString(
Above
Below
Above
Below