feat: integrate Pi backend and Pi Web

This commit is contained in:
luckyyzh
2026-07-30 19:37:53 +08:00
commit 7392ab9dd7
1390 changed files with 337197 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import test from "node:test";
import assert from "node:assert/strict";
async function loadSubject() {
return import("./chat-lazy-load.ts");
}
test("shows only the last visible render items", async () => {
const { getVisibleRenderWindow } = await loadSubject();
assert.deepEqual(getVisibleRenderWindow(200, 50), { startIndex: 150, hasMore: true });
});
test("shows all render items when the visible count reaches the total", async () => {
const { getVisibleRenderWindow } = await loadSubject();
assert.deepEqual(getVisibleRenderWindow(30, 50), { startIndex: 0, hasMore: false });
assert.deepEqual(getVisibleRenderWindow(50, 50), { startIndex: 0, hasMore: false });
assert.deepEqual(getVisibleRenderWindow(0, 50), { startIndex: 0, hasMore: false });
});
test("continues paging when render items outnumber source messages", async () => {
const { getNextVisibleCount, getVisibleRenderWindow } = await loadSubject();
let visibleCount = 50;
visibleCount = getNextVisibleCount(visibleCount);
assert.deepEqual(getVisibleRenderWindow(120, visibleCount), { startIndex: 20, hasMore: true });
visibleCount = getNextVisibleCount(visibleCount);
assert.deepEqual(getVisibleRenderWindow(120, visibleCount), { startIndex: 0, hasMore: false });
});
test("restores the viewport after prepending content", async () => {
const { captureScrollDistance, restoreScrollTop } = await loadSubject();
const savedDistance = captureScrollDistance(2000, 500);
assert.equal(savedDistance, 1500);
assert.equal(restoreScrollTop(2500, savedDistance), 1000);
});
test("restores top and bottom boundary positions", async () => {
const { captureScrollDistance, restoreScrollTop } = await loadSubject();
assert.equal(restoreScrollTop(3000, captureScrollDistance(2000, 0)), 1000);
assert.equal(restoreScrollTop(3000, captureScrollDistance(2000, 2000)), 3000);
});