import { expect, tap, webhelpers } from '@git.zone/tstest/tapbundle'; import * as deesCatalog from '../ts_web/index.js'; tap.test('PDF viewer should render text layer', async () => { const viewer = await webhelpers.fixture( webhelpers.html` ` ) as deesCatalog.DeesPdfViewer; // Wait for PDF to load and render await new Promise(resolve => setTimeout(resolve, 5000)); await viewer.updateComplete; expect(viewer.totalPages).toBeGreaterThan(0); const textLayer = viewer.shadowRoot?.querySelector('.text-layer[data-page="1"]'); expect(textLayer).toBeTruthy(); const textSpans = textLayer?.querySelectorAll('span'); expect(textSpans?.length).toBeGreaterThan(0); console.log(`Text layer has ${textSpans?.length} spans`); }); tap.test('Text should be selectable', async () => { const viewer = await webhelpers.fixture( webhelpers.html` ` ) as deesCatalog.DeesPdfViewer; // Wait for PDF to load and render await new Promise(resolve => setTimeout(resolve, 5000)); const textLayer = viewer.shadowRoot?.querySelector('.text-layer[data-page="1"]'); const firstSpan = textLayer?.querySelector('span') as HTMLElement; if (firstSpan?.textContent) { const range = document.createRange(); const textNode = firstSpan.firstChild; if (textNode) { range.setStart(textNode, 0); range.setEnd(textNode, Math.min(5, textNode.textContent?.length || 0)); const selection = window.getSelection(); selection?.removeAllRanges(); selection?.addRange(range); expect(selection?.toString().length).toBeGreaterThan(0); console.log('Selected text:', selection?.toString()); } } }); tap.test('endOfContent element exists for selection boundary', async () => { const viewer = await webhelpers.fixture( webhelpers.html` ` ) as deesCatalog.DeesPdfViewer; // Wait for PDF to load and render await new Promise(resolve => setTimeout(resolve, 5000)); const endOfContent = viewer.shadowRoot?.querySelector('.text-layer[data-page="1"] .endOfContent'); expect(endOfContent).toBeTruthy(); }); export default tap.start();