- transcription/: TranscriptionBlock, Column, EditView, PanelHeader, ReadView, Section + transcriptionMarkers, blockConflictMerge, saveBlockWithConflictRetry + useBlockAutoSave, useBlockDragDrop hooks - annotation/: AnnotationLayer, AnnotationShape, AnnotationEditOverlay - viewer/: PdfViewer, PdfControls + useFileLoader, usePdfRenderer hooks Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { createPdfRenderer } from './usePdfRenderer.svelte';
|
|
|
|
// Note: init() and loadDocument() require pdfjsLib (browser module).
|
|
// These tests cover pure state logic only — bounds clamping and zoom limits.
|
|
|
|
describe('createPdfRenderer', () => {
|
|
it('starts at page 1 with scale 1.5 and no error', () => {
|
|
const r = createPdfRenderer();
|
|
expect(r.currentPage).toBe(1);
|
|
expect(r.scale).toBe(1.5);
|
|
expect(r.totalPages).toBe(0);
|
|
expect(r.loading).toBe(false);
|
|
expect(r.error).toBeNull();
|
|
expect(r.isLoaded).toBe(false);
|
|
expect(r.pdfjsReady).toBe(false);
|
|
});
|
|
|
|
it('prevPage does not go below page 1', () => {
|
|
const r = createPdfRenderer();
|
|
r.prevPage();
|
|
expect(r.currentPage).toBe(1);
|
|
});
|
|
|
|
it('nextPage does not exceed totalPages', () => {
|
|
const r = createPdfRenderer();
|
|
// totalPages = 0, so 1 < 0 is false → stays at 1
|
|
r.nextPage();
|
|
expect(r.currentPage).toBe(1);
|
|
});
|
|
|
|
it('goToPage does not navigate when n > totalPages', () => {
|
|
const r = createPdfRenderer();
|
|
r.goToPage(5);
|
|
expect(r.currentPage).toBe(1);
|
|
});
|
|
|
|
it('goToPage does not navigate when n < 1', () => {
|
|
const r = createPdfRenderer();
|
|
r.goToPage(0);
|
|
expect(r.currentPage).toBe(1);
|
|
});
|
|
|
|
it('zoomIn increases scale by 0.25', () => {
|
|
const r = createPdfRenderer();
|
|
r.zoomIn();
|
|
expect(r.scale).toBeCloseTo(1.75);
|
|
});
|
|
|
|
it('zoomOut decreases scale by 0.25', () => {
|
|
const r = createPdfRenderer();
|
|
r.zoomOut();
|
|
expect(r.scale).toBeCloseTo(1.25);
|
|
});
|
|
|
|
it('zoomOut does not go below 0.5', () => {
|
|
const r = createPdfRenderer();
|
|
for (let i = 0; i < 20; i++) r.zoomOut();
|
|
expect(r.scale).toBeCloseTo(0.5);
|
|
});
|
|
|
|
it('loadDocument is a no-op when pdfjsLib not initialized', async () => {
|
|
const r = createPdfRenderer();
|
|
await r.loadDocument('/some/path');
|
|
// No-op because pdfjsLib is null (init not called)
|
|
expect(r.error).toBeNull();
|
|
expect(r.loading).toBe(false);
|
|
});
|
|
});
|