test/home-chat-scroll.test.js
Rama main · réplica de lectura del repositorio original.
var test = require("node:test");
var assert = require("node:assert/strict");
var path = require("node:path");
var pathToFileURL = require("node:url").pathToFileURL;
test("Home follows only a bottom-pinned transcript and preserves deliberate reading position", async function () {
var originalDocument = global.document;
var originalRaf = global.requestAnimationFrame;
var listeners = {};
var messages = { scrollHeight: 1000, scrollTop: 700, clientHeight: 300, addEventListener: function (name, handler) { listeners[name] = handler; } };
var button = { hidden: true, listeners: {}, addEventListener: function (name, handler) { this.listeners[name] = handler; } };
global.document = { getElementById: function (id) { return id === "home-mate-chat-messages" ? messages : button; } };
global.requestAnimationFrame = function (callback) { callback(); return 1; };
try {
var module = await import(pathToFileURL(path.join(__dirname, "../lib/public/modules/home-chat-scroll.js")).href);
var bottom = module.captureHomeChatScroll(false);
messages.scrollHeight = 1200;
module.restoreHomeChatScroll(bottom);
assert.equal(messages.scrollTop, 1200);
assert.equal(button.hidden, true);
messages.scrollTop = 300;
messages.scrollHeight = 1200;
listeners.scroll();
module.markHomeChatActivity();
var reading = module.captureHomeChatScroll(false);
messages.scrollHeight = 1500;
module.restoreHomeChatScroll(reading);
assert.equal(messages.scrollTop, 300);
assert.equal(button.hidden, false);
button.listeners.click();
assert.equal(messages.scrollTop, 1500);
assert.equal(button.hidden, true);
} finally {
global.document = originalDocument;
global.requestAnimationFrame = originalRaf;
}
});