67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFile } from 'node:fs/promises';
|
|
import test from 'node:test';
|
|
|
|
import { ImageReferenceManager } from '../js/persistence/image_reference_manager.js';
|
|
|
|
const source = await readFile(
|
|
new URL('../src/persistence/image_reference_manager.ts', import.meta.url),
|
|
'utf8'
|
|
);
|
|
|
|
test('garbage collection reuses the used image ids from reference rebuilding', async () => {
|
|
const canvas = {
|
|
layers: [],
|
|
canvasState: {
|
|
layersUndoStack: [],
|
|
layersRedoStack: [],
|
|
},
|
|
imageCache: {
|
|
has: () => false,
|
|
delete: () => false,
|
|
},
|
|
};
|
|
const manager = new ImageReferenceManager(canvas);
|
|
let rebuildReferencesCalls = 0;
|
|
let collectAllUsedImageIdsCalls = 0;
|
|
let receivedUsedImageIds;
|
|
|
|
const originalRebuildReferences = manager.rebuildReferences.bind(manager);
|
|
manager.rebuildReferences = () => {
|
|
rebuildReferencesCalls += 1;
|
|
return originalRebuildReferences();
|
|
};
|
|
manager.collectAllUsedImageIds = () => {
|
|
collectAllUsedImageIdsCalls += 1;
|
|
return new Set(['used-image']);
|
|
};
|
|
manager.findUnusedImages = async usedImageIds => {
|
|
receivedUsedImageIds = usedImageIds;
|
|
return [];
|
|
};
|
|
|
|
await manager.performGarbageCollection();
|
|
|
|
assert.equal(rebuildReferencesCalls, 1);
|
|
assert.equal(collectAllUsedImageIdsCalls, 1);
|
|
assert.deepEqual([...receivedUsedImageIds], ['used-image']);
|
|
});
|
|
|
|
test('public reference update delegates to the shared rebuild implementation', () => {
|
|
const rebuildReferencesMethod = source.match(
|
|
/private rebuildReferences\(\): Set<string> \{[\s\S]*?\n \}/
|
|
)?.[0];
|
|
const updateReferencesMethod = source.match(
|
|
/updateReferences\(\): void \{[\s\S]*?\n \}/
|
|
)?.[0];
|
|
|
|
assert.ok(rebuildReferencesMethod);
|
|
assert.ok(updateReferencesMethod);
|
|
assert.match(rebuildReferencesMethod, /this\.imageReferences\.clear\(\)/);
|
|
assert.match(rebuildReferencesMethod, /this\.collectAllUsedImageIds\(\)/);
|
|
assert.match(updateReferencesMethod, /this\.rebuildReferences\(\)/);
|
|
assert.match(source, /private rebuildReferences\(\): Set<string>/);
|
|
assert.match(source, /const usedImageIds = this\.rebuildReferences\(\);/);
|
|
assert.doesNotMatch(source, /this\.updateReferences\(\);[\s\S]*?this\.collectAllUsedImageIds\(\);/);
|
|
});
|