test/filebrowser-large-file.test.js
Rama main · réplica de lectura del repositorio original.
var test = require("node:test");
var assert = require("node:assert");
var fs = require("node:fs");
var os = require("node:os");
var path = require("node:path");
var { attachFilesystem } = require("../lib/project-filesystem");
test("file browser reads text files larger than the live preview limit", function () {
var tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "clay-large-file-"));
var filePath = path.join(tempDir, "large.txt");
var content = "x".repeat(768 * 1024);
var response = null;
fs.writeFileSync(filePath, content);
try {
var filesystem = attachFilesystem({
cwd: tempDir,
slug: "test",
osUsers: null,
sm: { sessions: new Map() },
send: function () {},
sendTo: function (ws, msg) { response = msg; },
safePath: function (cwd, requestedPath) {
return requestedPath === "large.txt" ? filePath : null;
},
safeAbsPath: function () { return null; },
getOsUserInfoForWs: function () { return null; },
startFileWatch: function () {},
stopFileWatch: function () {},
startDirWatch: function () {},
usersModule: { getEffectivePermissions: function () { return { fileBrowser: true }; } },
fsAsUser: function () {},
validateEnvString: function () {},
opts: {},
IGNORED_DIRS: new Set(),
BINARY_EXTS: new Set(),
IMAGE_EXTS: new Set(),
FS_MAX_SIZE: 5 * 1024 * 1024,
});
filesystem.handleFilesystemMessage({}, { type: "fs_read", path: "large.txt" });
assert.equal(response.type, "fs_read_result");
assert.equal(response.error, undefined);
assert.equal(response.size, content.length);
assert.equal(response.content, content);
} finally {
fs.rmSync(tempDir, { recursive: true, force: true });
}
});
test("large file previews use a separate hard limit and lightweight rendering", function () {
var projectSource = fs.readFileSync(path.join(__dirname, "../lib/project.js"), "utf8");
var browserSource = fs.readFileSync(path.join(__dirname, "../lib/public/modules/filebrowser.js"), "utf8");
assert.match(projectSource, /var FS_MAX_SIZE = 512 \* 1024;/);
assert.match(projectSource, /var FS_VIEWER_MAX_SIZE = 5 \* 1024 \* 1024;/);
assert.match(projectSource, /FS_MAX_SIZE: FS_VIEWER_MAX_SIZE/);
assert.match(browserSource, /var FILE_RICH_PREVIEW_MAX_BYTES = 1024 \* 1024;/);
assert.match(browserSource, /renderLargeTextFile\(bodyEl, msg\.content, msg\.size\)/);
assert.match(fs.readFileSync(path.join(__dirname, "../lib/public/modules/file-viewer-source.js"), "utf8"), /showing plain text for performance/);
});