import { html } from 'dhtml' import { renderToReadableStream, renderToString } from 'dhtml/server' import { assert, assert_eq, test } from '../../../scripts/test/test.ts' test('basic html renders correctly', () => { assert_eq(renderToString(html`

Hello, world!

`), '

Hello, world!

') }) test('basic html renders correctly via stream', async () => { const stream = renderToReadableStream(html`

Hello, world!

`) assert_eq(await new Response(stream).text(), '

Hello, world!

') }) test('inner content renders correctly', () => { assert_eq(renderToString(html`

${html`Inner content!`}

`), '

Inner content!

') }) test('template with number renders correctly', () => { const template = (n: number) => html`

Hello, ${n}!

` assert_eq(renderToString(template(1)), '

Hello, 1!

') assert_eq(renderToString(template(2)), '

Hello, 2!

') }) test('lists of items', () => { assert_eq(renderToString([1, 'a', html`thing`]), '1athing') }) test('basic children render correctly', () => { assert_eq( renderToString(html`${'This is a'} ${html`test`} ${html`test`} ${html`test`}`), 'This is a test test test', ) }) if (__DEV__) { test('invalid part placement raises error', () => { try { renderToString(html`<${'div'}>${'text'}`) assert(false, 'Expected error to be thrown') } catch (error) { assert(error instanceof Error) } }) } test('parts in comments do not throw', () => { renderToString(html``) }) if (__DEV__) { test('manually specifying internal template syntax throws', () => { try { // why is prettier deleting null bytes? // prettier-ignore renderToString(html`${1} \0`) assert(false, 'Expected error to be thrown') } catch (error) { assert(error instanceof Error) } }) } test('directives', () => { let calls = 0 const directive = () => { calls++ } assert_eq(renderToString(html`

`), '

') assert_eq(calls, 0) // TODO: what should these look like on the server? }) test('unquoted attributes', () => { assert_eq(renderToString(html``), '') assert_eq(renderToString(html``), '
') assert_eq(renderToString(html``), '') }) test('quoted attributes', () => { assert_eq(renderToString(html``), '') assert_eq(renderToString(html``), '
') // prettier-ignore assert_eq(renderToString(html``), '') }) test('collapses whitespace', () => { // prettier-ignore assert_eq(renderToString(html`

`), '

') // prettier-ignore assert_eq(renderToString(html`

x

`), '

x

') }) test('lexer edge cases', () => { // prettier-ignore assert_eq(renderToString(html`
`), '
') assert_eq(renderToString(html``), '') assert_eq(renderToString(html`
`), '
') })