返回 DeepSeek-Reasonix
session-export.mjs
根目录 / desktop / frontend / bench / session-export.mjs
1 import assert from "node:assert/strict";
2 import { createServer } from "vite";
3 import path from "node:path";
4 import { fileURLToPath } from "node:url";
5 const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
6 process.env.PLAYWRIGHT_BROWSERS_PATH = path.join(root, ".pw-browsers");
7 const { chromium } = await import("playwright");
8 const server = await createServer({ root, server: { host: "127.0.0.1", port: 0 } });
9 await server.listen();
10 const browser = await chromium.launch();
11 try {
12 const page = await browser.newPage();
13 const errors = [];
14 page.on("pageerror", e => errors.push(e.message));
15 await page.goto(`http://127.0.0.1:${server.httpServer.address().port}/bench/session-export.html`);
16 const result = await page.evaluate(async () => {
17 const { renderSessionExportPages } = await import("/src/lib/sessionExport.tsx");
18 const reports = [];
19 for (const format of ["pdf", "image"]) {
20 async function* blocks() {
21 yield {kind:"markdown", text:"# 完整会话\n\nFIRST-QUESTION\n\n公式 $x^2+y^2=z^2$"};
22 for(let group=0;group<3;group++) yield {kind:"code",label:"工具输出",text:Array.from({length:160},(_,i)=>`LINE-${group}-${i} `+"中文 abc ".repeat(12)).join("\n")};
23 yield {kind:"markdown",text:"| key | value |\n|---|---|\n"+Array.from({length:80},(_,i)=>`| ROW-${i} | `+"table 中文 ".repeat(12)+" |").join("\n")};
24 yield {kind:"markdown",text:"FINAL-ANSWER"};
25 }
26 let pages=0, maxSurfaces=0, maxWidth=0, rendered="";const seen=new WeakSet();
27 for await(const output of renderSessionExportPages(blocks(),format)) {
28 pages++; const surfaces=[...document.querySelectorAll(".session-export-page")];maxSurfaces=Math.max(maxSurfaces,surfaces.length);
29 for(const surface of surfaces) {maxWidth=Math.max(maxWidth,surface.scrollWidth);if(!seen.has(surface)){seen.add(surface);rendered+=surface.textContent;}}
30 if(output.width>8192 || output.height>8192 || !output.blob.size) throw new Error("Invalid raster page");
31 const bitmap=await createImageBitmap(output.blob);if(bitmap.width!==output.width || bitmap.height!==output.height) throw new Error("Bad encoded dimensions");bitmap.close();
32 }
33 reports.push({format,pages,maxSurfaces,maxWidth,first:rendered.includes("FIRST-QUESTION"),last:rendered.includes("FINAL-ANSWER"),lines:Array.from({length:480},(_,i)=>`LINE-${Math.floor(i/160)}-${i%160} `).every(token=>rendered.includes(token)),surfacesAfter:document.querySelectorAll(".session-export-page").length});
34 }
35 return reports;
36 });
37 for(const report of result){assert.ok(report.pages>1);assert.equal(report.maxSurfaces,1);assert.equal(report.maxWidth,920);assert.ok(report.first&&report.last&&report.lines);assert.equal(report.surfacesAfter,0);}
38 assert.deepEqual(errors,[]);
39 console.log(JSON.stringify(result,null,2));
40 } finally {await browser.close();await server.close();}
41
41 lines Plain Text