import { describe, it, expect, beforeEach, afterEach } from 'vitest' import type { Handle } from '@remix-run/component' import { dom } from '@remix-run/events' import { hydrated } from '../hydration/hydrated.ts' import { renderToStream } from '../ssr/stream.ts' import { run } from '../run.ts' import { flushRenderQueue as flush } from '../reconcile.ts' import { drain } from './utils.ts' import { Frame } from '../frame/frame.tsx' describe('hydration e2e with new renderToStream', () => { let container: HTMLDivElement beforeEach(() => { container = document.createElement('div') document.body.appendChild(container) }) afterEach(() => { document.body.removeChild(container) }) it('hydrates a simple counter component', async () => { function Counter(this: Handle, { initialCount }: { initialCount: number }) { let count = initialCount return ({ label: currentLabel }: { label: string }) => ( ) } let HydratedCounter = hydrated('/js/counter.js#Counter', Counter) let stream = renderToStream(

Counter Demo

, ) let html = await drain(stream) // Verify server-rendered content includes hydration script expect(html).toContain('

Counter Demo

') expect(html).toContain('') expect(html).toContain('