48 lines
1.9 KiB
JavaScript
48 lines
1.9 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFile } from 'node:fs/promises';
|
|
import test from 'node:test';
|
|
|
|
import { ImageCache } from '../js/media/image_cache.js';
|
|
|
|
const sourceFiles = await Promise.all([
|
|
readFile(new URL('../src/media/image_cache.ts', import.meta.url), 'utf8'),
|
|
readFile(new URL('../src/canvas/canvas.ts', import.meta.url), 'utf8'),
|
|
readFile(new URL('../src/canvas/canvas_layers.ts', import.meta.url), 'utf8'),
|
|
readFile(new URL('../src/canvas/canvas_state.ts', import.meta.url), 'utf8'),
|
|
readFile(new URL('../src/app/canvas_view.ts', import.meta.url), 'utf8'),
|
|
]);
|
|
|
|
test('image cache preserves key/value storage and clearing behavior', () => {
|
|
const cache = new ImageCache();
|
|
const imageSource = 'data:image/png;base64,encoded-image';
|
|
|
|
cache.set('image-1', imageSource);
|
|
|
|
assert.equal(cache.has('image-1'), true);
|
|
assert.equal(cache.get('image-1'), imageSource);
|
|
assert.equal(cache.delete('image-1'), true);
|
|
assert.equal(cache.has('image-1'), false);
|
|
|
|
cache.set('image-1', imageSource);
|
|
|
|
cache.clear();
|
|
|
|
assert.equal(cache.has('image-1'), false);
|
|
assert.equal(cache.get('image-1'), undefined);
|
|
});
|
|
|
|
test('layer persistence uses one image cache contract', () => {
|
|
const [cacheSource, canvasSource, layersSource, stateSource, viewSource] = sourceFiles;
|
|
|
|
assert.match(cacheSource, /private cache: Map<string, CachedImage>/);
|
|
assert.match(cacheSource, /export class ImageCache/);
|
|
assert.match(canvasSource, /imageCache: ImageCache/);
|
|
assert.match(canvasSource, /from "\.\.\/media\/image_cache\.js"/);
|
|
assert.doesNotMatch(canvasSource, /persistence\/ImageCache/);
|
|
assert.match(canvasSource, /this\.imageCache = new ImageCache\(\)/);
|
|
assert.match(layersSource, /imageCache\.set\(imageId, image\.src\)/);
|
|
assert.match(stateSource, /const imageSrc = this\.canvas\.imageCache\.get\(layerData\.imageId\)/);
|
|
assert.doesNotMatch(stateSource, /imageData\.data/);
|
|
assert.doesNotMatch(viewSource, /new ImageCache\(\)/);
|
|
});
|