Files
papercrate/frontend/tests/workspaceEngine.test.js
T
2025-11-13 01:07:55 +01:00

73 lines
1.9 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
require('./ts-register');
const {
WorkspaceEngine,
DESK_CANVAS_PADDING,
} = require('../src/desktop/workspaceEngine.ts');
const makeEngine = () => {
const engine = new WorkspaceEngine();
engine.setEnsureDocumentSize(() => ({ width: 200, height: 200 }));
engine.setCanvasSize({ width: 1200, height: 800 });
return engine;
};
test('syncLayoutSnapshot clones from layout map', () => {
const engine = makeEngine();
engine.setItems([{ id: 'doc-1' }]);
engine.ensureLayoutForItems();
engine.syncLayoutSnapshot();
const firstSnapshot = engine.getSnapshot();
assert(firstSnapshot.layout instanceof Map);
assert(firstSnapshot.layout.get('doc-1'));
engine.layout.set('doc-1', {
centerX: DESK_CANVAS_PADDING + 150,
centerY: DESK_CANVAS_PADDING + 150,
rotation: 0,
width: 200,
height: 200,
});
engine.syncLayoutSnapshot();
const secondSnapshot = engine.getSnapshot();
assert.notStrictEqual(secondSnapshot.layout, engine.layout);
assert.equal(secondSnapshot.layout.get('doc-1').centerX, engine.layout.get('doc-1').centerX);
});
test('recalcVisibleDocIds respects viewport bounds', () => {
const engine = makeEngine();
engine.items = [{ id: 'visible' }, { id: 'hidden' }];
engine.setDocumentLookup(new Map([
['visible', { id: 'visible' }],
['hidden', { id: 'hidden' }],
]));
engine.layout = new Map([
['visible', {
centerX: DESK_CANVAS_PADDING + 150,
centerY: DESK_CANVAS_PADDING + 150,
rotation: 0,
width: 200,
height: 200,
}],
['hidden', {
centerX: -500,
centerY: -500,
rotation: 0,
width: 200,
height: 200,
}],
]);
engine.layoutSnapshot = new Map(engine.layout);
engine.recalcVisibleDocIds();
const snapshot = engine.getSnapshot();
assert(snapshot.visibleDocIds.has('visible'));
assert(!snapshot.visibleDocIds.has('hidden'));
});