openpencil/packages/op-web-sdk/test/viewer.test.ts
Kayshen-X 20971e04b4 feat(sdk): add @zseven-w/op-web-sdk TS core (read-only web viewer)
Plan 2 of the web embedding SDK: a self-contained, framework-agnostic
TypeScript core wrapping the Plan-1 wasm Viewer. createViewer -> OpViewer with
load, read-only snapshots (document/pages/pageCount/activePage), pan/zoom
navigation (+ wheel), SVG export, load/viewportchange events, and destroy.

Read-only: no .op editing/mutation. Self-contained: zero @zseven-w/pen-* deps
(types vendored from jian-ops-schema ts-rs), tsup build, vitest+jsdom tests
that mock the wasm seam. 10/10 tests; tsc clean; post-destroy use-after-free
guarded. React+Vue adapters follow in Plan 3.
2026-06-19 19:01:14 +08:00

23 lines
872 B
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { MockViewer } from './mock-wasm.js';
let current: MockViewer;
vi.mock('../src/wasm.js', () => ({
ensureWasm: vi.fn(async () => {}),
WasmViewer: vi.fn(() => { current = new MockViewer(); return current; }),
_export: vi.fn(),
}));
import { createViewer } from '../src/index.js';
function makeCanvas() { return document.createElement('canvas'); }
describe('createViewer + snapshots', () => {
beforeEach(() => vi.clearAllMocks());
it('loads the doc and exposes page count', async () => {
const v = await createViewer({ canvas: makeCanvas(), doc: '{"version":"1.0","pages":[{"id":"p","name":"P","children":[]}]}' });
expect(current.load_str).toHaveBeenCalled();
expect(v.pageCount).toBe(1);
expect(v.activePage).toBe(0);
expect(Array.isArray(v.pages)).toBe(true);
});
});