Files
duplicati_preview/test/thumbnail-utils.test.js
T

41 lines
1.4 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
analyzeFrameLuma,
buildThumbnailCandidateTimes
} from '../public/modules/thumbnail-utils.js';
test('buildThumbnailCandidateTimes prefers early seconds and appends a bounded fallback', () => {
assert.deepEqual(buildThumbnailCandidateTimes(0), [0.15]);
assert.deepEqual(buildThumbnailCandidateTimes(1.2), [0.15, 0.5, 1, 1.15]);
assert.deepEqual(buildThumbnailCandidateTimes(6), [0.15, 0.5, 1, 2, 3.5, 5, 5.95]);
});
test('analyzeFrameLuma marks near-black frames as black and bright frames as usable', () => {
const blackFrame = new Uint8ClampedArray(64 * 4).fill(0);
for (let index = 3; index < blackFrame.length; index += 4) {
blackFrame[index] = 255;
}
const brightFrame = new Uint8ClampedArray(64 * 4);
for (let index = 0; index < brightFrame.length; index += 4) {
brightFrame[index] = 200;
brightFrame[index + 1] = 180;
brightFrame[index + 2] = 120;
brightFrame[index + 3] = 255;
}
const blackAnalysis = analyzeFrameLuma(blackFrame, {
stride: 1
});
const brightAnalysis = analyzeFrameLuma(brightFrame, {
stride: 1
});
assert.equal(blackAnalysis.isBlackFrame, true);
assert.equal(brightAnalysis.isBlackFrame, false);
assert.ok(blackAnalysis.darkRatio > brightAnalysis.darkRatio);
assert.ok(brightAnalysis.averageLuma > blackAnalysis.averageLuma);
});