import { test } from 'node:test' import assert from 'node:assert/strict' import { DEFAULT_TABLE_PAGE_SIZE, clampPage, paginateSlice } from '../src/shared/composables/useTablePaging.ts' const items = (n) => Array.from({ length: n }, (_, i) => i + 1) test('切片返回当前页窗口', () => { assert.deepEqual(paginateSlice(items(250), 1, 100), items(100)) assert.deepEqual(paginateSlice(items(250), 3, 100), items(250).slice(200, 250), '末页只到最后一行为止') assert.deepEqual(paginateSlice(items(5), 2, 100), items(5), '只有一页时任何页码都落在首页') }) test('越界页码自动收敛到有效范围', () => { assert.deepEqual(paginateSlice(items(250), 99, 100), items(250).slice(200, 250), '超出末页回到末页') assert.deepEqual(paginateSlice(items(250), 0, 100), items(100), '小于 1 回到首页') assert.deepEqual(paginateSlice(items(250), -3, 100), items(100)) }) test('非法分页参数安全降级', () => { assert.deepEqual(paginateSlice(null, 1, 100), []) assert.deepEqual(paginateSlice(undefined, 1, 100), []) assert.equal(paginateSlice(items(10), 1, 0).length, 10, '非法 pageSize 回退默认值') assert.equal(paginateSlice(items(DEFAULT_TABLE_PAGE_SIZE + 1), 1, Number.NaN).length, DEFAULT_TABLE_PAGE_SIZE) }) test('clampPage 与切片口径一致', () => { assert.equal(clampPage(1, 250, 100), 1) assert.equal(clampPage(3, 250, 100), 3) assert.equal(clampPage(9, 250, 100), 3) assert.equal(clampPage(0, 0, 100), 1, '空列表仍有 1 页') assert.equal(clampPage(5, 0, 100), 1) }) test('恰好整除时不多出空页', () => { assert.equal(clampPage(2, 200, 100), 2) assert.equal(clampPage(3, 200, 100), 2) assert.deepEqual(paginateSlice(items(200), 2, 100).length, 100) })