import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; import { expect, test } from 'bun:test'; import { Window } from 'happy-dom'; import React from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import type { ScrollView as ScrollViewComponent } from '../../../layout/adapters/inbound/ScrollView'; import type { ZoraProvider as ZoraProviderComponent } from '../../../theme/adapters/inbound/ZoraProvider'; import type { Tab as TabComponent } from './Tab'; import type { TabList as TabListComponent } from './TabList'; import type { TabPanel as TabPanelComponent } from './TabPanel'; import type { Tabs as TabsComponent } from './Tabs'; const webDistRoot = join(import.meta.dir, '../../../../../web-dist'); const load = (path: string) => import(pathToFileURL(join(webDistRoot, path)).href); test('renders a bounded generated Tabs panel containing the canonical ScrollView', async () => { const { ZoraProvider } = (await load('runtime/ZoraProvider.js')) as { ZoraProvider: typeof ZoraProviderComponent; }; const { Tabs, TabPanel } = (await load('components/tabs/index.js')) as { Tabs: typeof TabsComponent; TabPanel: typeof TabPanelComponent; }; const { ScrollView } = (await load('components/scroll-view/index.js')) as { ScrollView: typeof ScrollViewComponent; }; const markup = renderToStaticMarkup( Deep tree Hidden rules , ); const browserWindow = new Window(); browserWindow.document.body.innerHTML = markup; const shell = browserWindow.document.querySelector('[data-testid="sidebar"]'); const panel = browserWindow.document.querySelector('[data-testid="tree-panel"]'); const scroll = browserWindow.document.querySelector('[data-testid="tree-scroll"]'); expect(shell?.getAttribute('style')).toContain('flex:1'); expect(shell?.getAttribute('style')).toContain('min-height:0px'); expect(shell?.getAttribute('style')).toContain('overflow-y:hidden'); expect(panel?.getAttribute('style')).toContain('flex:1'); expect(panel?.getAttribute('style')).toContain('min-height:0px'); expect(panel?.getAttribute('role')).toBe('tabpanel'); expect(scroll?.parentElement).toBe(panel); expect(browserWindow.document.body.textContent).not.toContain('Hidden rules'); browserWindow.close(); }); test('forwards filled tab distribution and trailing tab content through the generated artifact', async () => { const { ZoraProvider } = (await load('runtime/ZoraProvider.js')) as { ZoraProvider: typeof ZoraProviderComponent; }; const { Tab, TabList, Tabs } = (await load('components/tabs/index.js')) as { Tab: typeof TabComponent; TabList: typeof TabListComponent; Tabs: typeof TabsComponent; }; const markup = renderToStaticMarkup( 2} value="tree" /> , ); const browserWindow = new Window(); browserWindow.document.body.innerHTML = markup; const tabList = browserWindow.document.querySelector('[data-testid="tools"]'); const wrappers = Array.from(tabList?.children ?? []); expect(tabList?.getAttribute('role')).toBe('tablist'); expect(wrappers).toHaveLength(2); expect(wrappers.every((wrapper) => wrapper.getAttribute('style')?.includes('flex:1'))).toBe(true); expect(browserWindow.document.querySelector('[data-testid="tree-count"]')?.textContent).toBe('2'); browserWindow.close(); });