import assert from "node:assert/strict"; import test from "node:test"; import { splitInlineReasoning, stripReasoning } from "./reasoning"; test("空输入返回空正文与 null 推理", () => { assert.deepEqual(splitInlineReasoning(""), { content: "", reasoning: null }); }); test("无 think 标签时原样返回正文", () => { assert.deepEqual(splitInlineReasoning("纯正文,无推理"), { content: "纯正文,无推理", reasoning: null, }); }); test("形态 1:完整 … 提取推理,保留正文", () => { const { content, reasoning } = splitInlineReasoning("先想一下这是答案"); assert.equal(content, "这是答案"); assert.equal(reasoning, "先想一下"); }); test("形态 2:多段 think 合并推理", () => { const { content, reasoning } = splitInlineReasoning( "第一段正文A第二段正文B", ); assert.equal(content, "正文A正文B"); assert.equal(reasoning, "第一段\n\n第二段"); }); test("形态 3:流式未闭合 尾段算推理", () => { const { content, reasoning } = splitInlineReasoning("正文还在想…"); assert.equal(content, "正文"); assert.equal(reasoning, "还在想…"); }); test("形态 4:模板注入式只吐闭合 ,前导内容算推理", () => { const { content, reasoning } = splitInlineReasoning( "我需要分析一下需求这是最终方案", ); assert.equal(content, "这是最终方案"); assert.equal(reasoning, "我需要分析一下需求"); }); test("形态 4 流式:尚未吐出 时全部当正文(后续闭合再归位)", () => { // 未出现任何标签 → 无从区分,先按正文渲染。 const { content, reasoning } = splitInlineReasoning("正在推理中,还没收到闭合标签"); assert.equal(content, "正在推理中,还没收到闭合标签"); assert.equal(reasoning, null); }); test("安全兜底:正文里绝不残留任何 think 标签字面量", () => { const { content } = splitInlineReasoning("答案前答案中"); assert.ok(!content.includes("")); assert.ok(!content.includes("")); }); test("stripReasoning 只返回正文", () => { assert.equal(stripReasoning("推理交付正文"), "交付正文"); assert.equal(stripReasoning("前导推理交付正文"), "交付正文"); });