Skip to content

Commit a9289d8

Browse files
authored
Merge pull request #10 from alekswebnet/5-add-tests
5 add tests
2 parents d09efc8 + 90bd0d4 commit a9289d8

File tree

9 files changed

+2933
-1153
lines changed

9 files changed

+2933
-1153
lines changed

package-lock.json

Lines changed: 0 additions & 946 deletions
This file was deleted.

package.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,18 @@
3131
],
3232
"scripts": {
3333
"dev": "vite",
34-
"build": "tsc && vite build"
34+
"build": "tsc && vite build",
35+
"test": "vitest",
36+
"coverage": "vitest run --coverage"
3537
},
3638
"devDependencies": {
3739
"@types/node": "^18.7.1",
40+
"@vitest/browser": "^0.34.3",
41+
"jsdom": "^22.1.0",
3842
"perfect-debounce": "^1.0.0",
3943
"typescript": "^4.6.4",
40-
"vite": "^3.2.7"
44+
"vite": "^4.4.9",
45+
"vitest": "^0.34.3",
46+
"webdriverio": "^8.16.4"
4147
}
4248
}

src/pdfjs-viewer-element.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@ const DEFAULTS = {
1414
textLayer: ''
1515
}
1616

17-
const template = document.createElement('template')
18-
template.innerHTML = `
19-
<iframe frameborder="0" width="100%"></iframe>
20-
<style>:host{width:100%;display:block;overflow:hidden}:host iframe{height:100%}</style>
21-
`
22-
2317
export class PdfjsViewerElement extends HTMLElement {
2418
constructor() {
2519
super()
2620
const shadowRoot = this.attachShadow({mode: 'open'})
21+
const template = document.createElement('template')
22+
template.innerHTML = `
23+
<iframe frameborder="0" width="100%"></iframe>
24+
<style>:host{width:100%;display:block;overflow:hidden}:host iframe{height:100%}</style>
25+
`
2726
shadowRoot.appendChild(template.content.cloneNode(true))
2827
}
2928

@@ -64,14 +63,15 @@ export class PdfjsViewerElement extends HTMLElement {
6463
}
6564

6665
private renderViewer(src: string) {
67-
if (!src) return
66+
if (!src || !this.iframe) return
6867
this.shadowRoot!.replaceChild(this.iframe.cloneNode(), this.iframe)
6968
this.iframe = this.shadowRoot!.querySelector('iframe') as PdfjsViewerElementIframe
70-
this.iframe.contentWindow.location.href = src
69+
this.iframe.src = src
7170
}
7271

7372
private setEventListeners() {
7473
document.addEventListener('webviewerloaded', () => {
74+
console.log(this.iframe.contentWindow.PDFViewerApplication)
7575
if (this.getAttribute('src') !== DEFAULTS.src) this.iframe.contentWindow.PDFViewerApplicationOptions?.set('defaultUrl', '')
7676
this.iframe.contentWindow.PDFViewerApplicationOptions?.set('disablePreferences', true);
7777
this.iframe.contentWindow.PDFViewerApplicationOptions?.set('pdfBugEnabled', true);
@@ -91,6 +91,7 @@ declare global {
9191
}
9292

9393
export interface PdfjsViewerElementIframeWindow extends Window {
94+
PDFViewerApplication: any,
9495
PDFViewerApplicationOptions: {
9596
set: (name: string, value: string | boolean) => void
9697
}

tests/basic.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { getViewerContainer, renderViewer } from './test-utils'
3+
import '../src/pdfjs-viewer-element'
4+
5+
describe('Basic render process', async () => {
6+
it('should render the PDF file', async () => {
7+
await renderViewer(`
8+
<pdfjs-viewer-element
9+
src="/sample-pdf-10MB.pdf"
10+
viewer-path="/pdfjs-3.9.179-dist"
11+
></pdfjs-viewer-element>`
12+
)
13+
expect(getViewerContainer()?.querySelector('#numPages')?.textContent).contain('37')
14+
expect(getViewerContainer()?.querySelector('#viewer .page')).exist
15+
})
16+
17+
it('should not render PDF with wrong url', async () => {
18+
await renderViewer(`
19+
<pdfjs-viewer-element
20+
src="/fake-file.pdf"
21+
viewer-path="/pdfjs-3.9.179-dist"
22+
></pdfjs-viewer-element>`
23+
)
24+
expect(getViewerContainer()?.querySelector('#viewer .page')).not.exist
25+
})
26+
27+
it('should not render the viewer with wrong viewer-path attribute', async () => {
28+
await renderViewer(`
29+
<pdfjs-viewer-element
30+
src="/sample-pdf-10MB.pdf"
31+
viewer-path="/fake-dist"
32+
></pdfjs-viewer-element>`
33+
)
34+
expect(getViewerContainer()).not.exist
35+
})
36+
})

tests/test-utils.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { elementReady } from "../src/elementReady"
2+
3+
export const getIframe = (): HTMLIFrameElement | null | undefined => {
4+
return document.body.querySelector('pdfjs-viewer-element')?.shadowRoot?.querySelector('iframe') as HTMLIFrameElement
5+
}
6+
7+
export const getViewerContainer = (): HTMLElement | null | undefined => {
8+
return getIframe()?.contentDocument?.querySelector('#outerContainer')
9+
}
10+
11+
export const renderViewer = async (template: string) => {
12+
document.body.innerHTML = template
13+
await elementReady('iframe', document.querySelector('pdfjs-viewer-element')!.shadowRoot!)
14+
15+
await new Promise<void>((resolve) => {
16+
setTimeout(() => {
17+
resolve()
18+
}, 3000)
19+
})
20+
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"compilerOptions": {
33
"module": "ESNext",
4-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
4+
"lib": ["ES2020", "DOM", "DOM.Iterable", "dom"],
55
"declaration": true,
66
"emitDeclarationOnly": true,
77
"outDir": "./types",

types/pdfjs-viewer-element.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@ export declare class PdfjsViewerElement extends HTMLElement {
1212
}
1313
declare global {
1414
interface Window {
15-
PdfjsViewerElement: typeof PdfjsViewerElement;
15+
'PdfjsViewerElement': typeof PdfjsViewerElement;
1616
}
1717
}
1818
export interface PdfjsViewerElementIframeWindow extends Window {
1919
PDFViewerApplicationOptions: {
2020
set: (name: string, value: string | boolean) => void;
2121
};
22-
PDFViewerApplication: any;
2322
}
2423
export interface PdfjsViewerElementIframe extends HTMLIFrameElement {
2524
contentWindow: PdfjsViewerElementIframeWindow;

vite.config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/// <reference types="vitest" />
12
import { defineConfig } from 'vite'
23

34
// https://vitejs.dev/config/
@@ -9,5 +10,12 @@ export default defineConfig({
910
entry: 'src/pdfjs-viewer-element.ts',
1011
formats: ['es']
1112
}
12-
}
13+
},
14+
test: {
15+
browser: {
16+
enabled: true,
17+
name: 'chrome',
18+
headless: true
19+
},
20+
},
1321
})

0 commit comments

Comments
 (0)