52 lines
2.1 KiB
JavaScript
52 lines
2.1 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { createFixedRowVirtualizerOptions, getRootFontSizePx } from './virtualizerOptions.js';
|
|
|
|
const throwingElement = new Proxy(
|
|
{},
|
|
{
|
|
get(_target, prop) {
|
|
throw new Error(`Чтение свойства элемента запрещено: ${String(prop)}`);
|
|
},
|
|
},
|
|
);
|
|
|
|
test('measureElement не обращается к элементу и возвращает фиксированную высоту', () => {
|
|
const { measureElement } = createFixedRowVirtualizerOptions({ rowHeight: 40, overscan: 3 });
|
|
assert.equal(measureElement(throwingElement), 40);
|
|
assert.equal(measureElement(null), 40);
|
|
});
|
|
|
|
test('estimateSize возвращает высоту для любого индекса, overscan пробрасывается', () => {
|
|
const options = createFixedRowVirtualizerOptions({ rowHeight: 40, overscan: 3 });
|
|
assert.equal(options.estimateSize(0), 40);
|
|
assert.equal(options.estimateSize(999), 40);
|
|
assert.equal(options.overscan, 3);
|
|
});
|
|
|
|
test('rowHeight-функция вычисляется при каждом вызове (rem зависит от ширины окна)', () => {
|
|
let height = 40;
|
|
const options = createFixedRowVirtualizerOptions({ rowHeight: () => height, overscan: 5 });
|
|
assert.equal(options.estimateSize(0), 40);
|
|
height = 48;
|
|
assert.equal(options.estimateSize(0), 48);
|
|
assert.equal(options.measureElement(throwingElement), 48);
|
|
});
|
|
|
|
test('дополнительные опции добавляются и не перекрывают основные', () => {
|
|
const options = createFixedRowVirtualizerOptions({
|
|
rowHeight: 40,
|
|
overscan: 5,
|
|
extra: { scrollPaddingStart: 0, estimateSize: () => 1 },
|
|
});
|
|
assert.equal(options.scrollPaddingStart, 0);
|
|
assert.equal(options.estimateSize(0), 40);
|
|
});
|
|
|
|
test('getRootFontSizePx повторяет правило App.css', () => {
|
|
assert.equal(getRootFontSizePx(2560), 16);
|
|
assert.equal(getRootFontSizePx(1920), 1920 * 0.0083);
|
|
assert.ok(Math.abs(getRootFontSizePx(1600) * 3 - 39.84) < 0.01);
|
|
assert.equal(getRootFontSizePx(undefined), 16);
|
|
});
|