Files
ST-Bionic-Memory-Ecology/tests/message-render-limit.mjs

200 lines
5.5 KiB
JavaScript

import assert from "node:assert/strict";
import {
applyMessageRenderLimit,
getMessageRenderLimitSettings,
getRenderLimitedHistoryRecoveryGuard,
} from "../ui/message-render-limit.js";
// Builds a fake host adapter mirroring index.js getMessageRenderLimitHostAdapter,
// so we test the real extracted module by import (no index.js slicing).
function createHostHarness() {
const state = {
powerUser: { chat_truncation: 0 },
reloadCount: 0,
inputValue: "",
counterValue: "",
triggeredEvents: [],
};
function makeInput(kind) {
return {
length: 1,
val(value) {
if (arguments.length > 0) {
if (kind === "counter") state.counterValue = value;
else state.inputValue = value;
return this;
}
return kind === "counter" ? state.counterValue : state.inputValue;
},
trigger(eventName) {
state.triggeredEvents.push(eventName);
return this;
},
};
}
const host = {
getPowerUser() {
return state.powerUser;
},
jq(selector) {
if (selector === "#chat_truncation") return makeInput("input");
if (selector === "#chat_truncation_counter") return makeInput("counter");
return { length: 0 };
},
reloadCurrentChat() {
state.reloadCount += 1;
},
console,
};
return { host, state };
}
function getState(state) {
return {
counterValue: state.counterValue,
inputValue: state.inputValue,
powerUserChatTruncation: state.powerUser.chat_truncation,
reloadCount: state.reloadCount,
triggeredEvents: [...state.triggeredEvents],
};
}
// ── normalization ────────────────────────────────────────────────
assert.deepEqual(
getMessageRenderLimitSettings({
enabled: true,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: "24",
}),
{ enabled: true, render_last_n: 24 },
);
assert.deepEqual(
getMessageRenderLimitSettings({
enabled: false,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: 24,
}),
{ enabled: false, render_last_n: 24 },
);
// ── apply (active) ───────────────────────────────────────────────
{
const { host, state } = createHostHarness();
const applied = applyMessageRenderLimit(
{
enabled: true,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: 24,
},
{ reloadCurrentChat: true },
host,
);
assert.deepEqual(applied, {
active: true,
renderLimit: 24,
applied: true,
skipped: false,
});
assert.deepEqual(getState(state), {
counterValue: "24",
inputValue: "24",
powerUserChatTruncation: 24,
reloadCount: 1,
triggeredEvents: ["change"],
});
}
// ── history recovery guard ───────────────────────────────────────
{
const guarded = getRenderLimitedHistoryRecoveryGuard(
new Array(10).fill({ mes: "visible" }),
{
settings: {
enabled: true,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: 10,
},
historyState: {
lastProcessedAssistantFloor: 30,
processedMessageHashes: { 0: "a", 30: "b" },
},
},
);
assert.equal(guarded.blocked, true);
assert.equal(guarded.renderLimit, 10);
assert.equal(guarded.highestProcessedFloor, 30);
const notGuardedWhenFullerThanRenderWindow =
getRenderLimitedHistoryRecoveryGuard(new Array(20).fill({}), {
settings: {
enabled: true,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: 10,
},
historyState: {
lastProcessedAssistantFloor: 30,
processedMessageHashes: { 30: "b" },
},
});
assert.equal(notGuardedWhenFullerThanRenderWindow.blocked, false);
const notGuardedWhenHistoryFitsVisibleChat =
getRenderLimitedHistoryRecoveryGuard(new Array(10).fill({}), {
settings: {
enabled: true,
hideOldMessagesRenderLimitEnabled: true,
hideOldMessagesRenderLimit: 10,
},
historyState: {
lastProcessedAssistantFloor: 5,
processedMessageHashes: { 5: "b" },
},
});
assert.equal(notGuardedWhenHistoryFitsVisibleChat.blocked, false);
}
// ── apply (skipped vs cleared) ───────────────────────────────────
{
const { host, state } = createHostHarness();
state.powerUser.chat_truncation = 24;
const skipped = applyMessageRenderLimit(
{
enabled: true,
hideOldMessagesRenderLimitEnabled: false,
hideOldMessagesRenderLimit: 24,
},
{},
host,
);
assert.equal(skipped.skipped, true);
assert.equal(getState(state).powerUserChatTruncation, 24);
const cleared = applyMessageRenderLimit(
{
enabled: true,
hideOldMessagesRenderLimitEnabled: false,
hideOldMessagesRenderLimit: 24,
},
{ clearWhenDisabled: true, reloadCurrentChat: true },
host,
);
assert.deepEqual(cleared, {
active: false,
renderLimit: 0,
applied: true,
skipped: false,
});
assert.deepEqual(getState(state), {
counterValue: "0",
inputValue: "0",
powerUserChatTruncation: 0,
reloadCount: 1,
triggeredEvents: ["change"],
});
}
console.log("message-render-limit tests passed");