import { describe, it, expect } from 'vitest' import { createRoot } from '../lib/vdom.ts' import { invariant } from '../lib/invariant.ts' import { on } from '../index.ts' describe('vnode rendering', () => { describe('events integration', () => { it('attaches events via on() mixin', () => { let container = document.createElement('div') let root = createRoot(container) let clicked = false root.render( , ) expect(container.innerHTML).toBe('') root.flush() let button = container.querySelector('button') invariant(button) button.click() expect(clicked).toBe(true) }) it('updates on() mixin listeners across rerenders', () => { let container = document.createElement('div') let root = createRoot(container) let clickCount = 0 function App() { return () => ( ) } root.render() root.flush() let button = container.querySelector('button') invariant(button) button.click() expect(clickCount).toBe(1) root.render() root.flush() button.click() expect(clickCount).toBe(2) }) it('cleans up mixin listeners when removed', () => { let container = document.createElement('div') let root = createRoot(container) let clickCount = 0 root.render( , ) root.flush() let button = container.querySelector('button') invariant(button) button.click() expect(clickCount).toBe(1) // remove event mixin root.render() root.flush() button.click() expect(clickCount).toBe(1) }) }) })