import { describe, it, expect } from 'vitest' import type { Handle } from '@remix-run/component' import { render } from '../render.ts' import { Frame } from '../../index.ts' describe('Frame skeleton', () => { it('returns a managed region and preserves content across rerenders', () => { let container = document.createElement('div') let src = '/x' function App(this: Handle) { let count = 0 return () => (
) } render(, container) // Insert static content between region boundaries let start = findBoundary(container, '0-0-1', 'start') let end = findBoundary(container, '0-0-1', 'end') expect(start && end).toBeTruthy() if (start && end) { let span = document.createElement('span') span.setAttribute('data-static', 'true') span.textContent = 'STATIC' start.parentNode!.insertBefore(span, end) } // Trigger rerender container.querySelector('button')!.click() // Static content remains expect(container.querySelector('[data-static="true"]')?.textContent).toBe('STATIC') }) }) function findBoundary(container: HTMLElement, id: string, suffix: 'start' | 'end'): Comment | null { let walker = document.createTreeWalker(container, NodeFilter.SHOW_COMMENT) let node: Comment | null let target = `RMX:${id}:${suffix}` while ((node = walker.nextNode() as Comment | null)) { if (node && node.nodeType === 8 && node.data === target) return node } return null }