import { h, render, mount, ref, nextTick } from '@/index'; const parentIncrementRef = ref void)>(null); const childIncrementRef = ref void)>(null); const Child = mount<{ parentValue: number }>(renew => { let childCount = 0; childIncrementRef.value = () => { childCount += 1; renew(); }; return props => (
Parent value: {props.parentValue} Child count: {childCount}
); }); const Parent = mount(renew => { let parentCount = 0; const increaseParent = () => { parentCount += 1; renew(); }; parentIncrementRef.value = increaseParent; return () => ; }); if (import.meta.vitest) { const { it, expect } = import.meta.vitest; it('maintains direct parent-child nesting with repeated renews', async () => { const container = document.createElement('div'); render(, container); await nextTick(); expect(container.children.length).toBe(1); expect(container.firstElementChild?.classList.contains('child')).toBe(true); expect(container.querySelector('.child-parent')?.textContent).toBe( 'Parent value: 0' ); expect(container.querySelector('.child-count')?.textContent).toBe( 'Child count: 0' ); parentIncrementRef.value?.(); await nextTick(); parentIncrementRef.value?.(); await nextTick(); expect(container.querySelector('.child-parent')?.textContent).toBe( 'Parent value: 2' ); expect(container.querySelector('.child-count')?.textContent).toBe( 'Child count: 0' ); childIncrementRef.value?.(); await nextTick(); childIncrementRef.value?.(); await nextTick(); childIncrementRef.value?.(); await nextTick(); expect(container.querySelector('.child-parent')?.textContent).toBe( 'Parent value: 2' ); expect(container.querySelector('.child-count')?.textContent).toBe( 'Child count: 3' ); parentIncrementRef.value?.(); await nextTick(); parentIncrementRef.value?.(); await nextTick(); expect(container.querySelector('.child-parent')?.textContent).toBe( 'Parent value: 4' ); expect(container.querySelector('.child-count')?.textContent).toBe( 'Child count: 3' ); expect(container.children.length).toBe(1); expect(container.firstElementChild?.classList.contains('child')).toBe(true); childIncrementRef.value?.(); await nextTick(); expect(container.querySelector('.child-parent')?.textContent).toBe( 'Parent value: 4' ); expect(container.querySelector('.child-count')?.textContent).toBe( 'Child count: 4' ); }); }