From d87a2fe2f9c7ea1e59821aab9d51cd7b5504a492 Mon Sep 17 00:00:00 2001 From: Yourz Date: Thu, 22 Jan 2026 17:53:09 +0800 Subject: [PATCH] fix: unit tests --- .../{__tests__ => }/virtualListUtils.test.ts | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) rename src/utils/{__tests__ => }/virtualListUtils.test.ts (81%) diff --git a/src/utils/__tests__/virtualListUtils.test.ts b/src/utils/virtualListUtils.test.ts similarity index 81% rename from src/utils/__tests__/virtualListUtils.test.ts rename to src/utils/virtualListUtils.test.ts index 2d0a5c9af..ef3af7189 100644 --- a/src/utils/__tests__/virtualListUtils.test.ts +++ b/src/utils/virtualListUtils.test.ts @@ -2,14 +2,14 @@ import { describe, expect, it } from 'vitest' import type { RenderedTreeExplorerNode } from '@/types/treeExplorerTypes' -import type { WindowRange } from '../virtualListUtils' +import type { WindowRange } from './virtualListUtils' import { applyWindow, calculateSpacerHeightsVariable, calculateWindowRangeByHeights, createInitialWindowRange, mergeWindowRange -} from '../virtualListUtils' +} from './virtualListUtils' describe('virtualListUtils', () => { describe('createInitialWindowRange', () => { @@ -131,8 +131,47 @@ describe('virtualListUtils', () => { { bufferRows: 2, windowSize: 10, totalChildren: 100 } ) expect(result.changed).toBe(true) + // maxWindowSize defaults to windowSize * 2 = 20, so end is capped at start + 20 = 25 + expect(result.range).toEqual({ start: 5, end: 25 }) + }) + + it('respects maxWindowSize when provided', () => { + const result = mergeWindowRange( + { start: 10, end: 30 }, + { start: 5, end: 40 }, + { + bufferRows: 2, + windowSize: 10, + totalChildren: 100, + maxWindowSize: 50 + } + ) + expect(result.changed).toBe(true) expect(result.range).toEqual({ start: 5, end: 40 }) }) + + it('shrinks when calculated is smaller and outside buffer', () => { + const result = mergeWindowRange( + { start: 10, end: 30 }, + { start: 15, end: 25 }, + { bufferRows: 2, windowSize: 10, totalChildren: 100 } + ) + expect(result.changed).toBe(true) + expect(result.range).toEqual({ start: 15, end: 25 }) + }) + + it('caps window size when exceeding maxWindowSize on end update', () => { + const result = mergeWindowRange( + { start: 10, end: 30 }, + { start: 10, end: 50 }, + { bufferRows: 2, windowSize: 10, totalChildren: 100 } + ) + expect(result.changed).toBe(true) + // maxWindowSize = 20, so start is adjusted: end (30) - 20 = 10, but we keep start at 10 + // Actually, since updateStart is false, we adjust start: end (50) - 20 = 30 + expect(result.range.start).toBe(30) + expect(result.range.end).toBe(50) + }) }) describe('calculateSpacerHeightsVariable', () => {