80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
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`
|
|
<dees-pdf-viewer
|
|
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
|
|
initialZoom="page-fit"
|
|
style="height: 600px; width: 100%;"
|
|
></dees-pdf-viewer>
|
|
`
|
|
) 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`
|
|
<dees-pdf-viewer
|
|
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
|
|
initialZoom="page-fit"
|
|
style="height: 600px; width: 100%;"
|
|
></dees-pdf-viewer>
|
|
`
|
|
) 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`
|
|
<dees-pdf-viewer
|
|
pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
|
|
initialZoom="page-fit"
|
|
style="height: 600px; width: 100%;"
|
|
></dees-pdf-viewer>
|
|
`
|
|
) 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();
|