const SemanticRenderer = require('../../../lib/core/resource/SemanticRenderer') const DPMLContentParser = require('../../../lib/core/resource/DPMLContentParser') describe('DPML语义渲染集成测试', () => { let renderer let parser let mockResourceManager beforeEach(() => { renderer = new SemanticRenderer() parser = new DPMLContentParser() mockResourceManager = { resolve: jest.fn() } }) describe('完整的语义渲染流程', () => { test('应该实现从解析到渲染的完整语义保持', async () => { // Arrange - 模拟一个包含@引用的personality标签 const personalityContent = `@!thought://remember # 网络杠精思维模式 ## 核心思维特征 - 挑刺思维:看到任何观点都先找问题和漏洞 - 抬杠本能:天生反对派,习惯性质疑一切表述 @!thought://recall ## 认知偏好模式 - 逆向思考优先:遇到任何论点先想如何反驳 - 细节放大镜效应:善于将小问题放大成大问题` // 模拟资源解析结果 mockResourceManager.resolve .mockResolvedValueOnce({ success: true, content: `## 记忆基础思维 学会从过往经验中提取模式和规律` }) .mockResolvedValueOnce({ success: true, content: `## 回忆扩展思维 能够快速调用相关的历史案例和背景知识` }) // Act - 解析然后渲染 const tagSemantics = parser.parseTagContent(personalityContent, 'personality') const renderedContent = await renderer.renderSemanticContent(tagSemantics, mockResourceManager) // Assert - 验证语义完整性 expect(renderedContent).toContain('## 记忆基础思维') expect(renderedContent).toContain('学会从过往经验中提取模式和规律') expect(renderedContent).toContain('# 网络杠精思维模式') expect(renderedContent).toContain('## 回忆扩展思维') expect(renderedContent).toContain('能够快速调用相关的历史案例和背景知识') expect(renderedContent).toContain('## 认知偏好模式') // 验证位置语义:remember内容在最前面 const rememberIndex = renderedContent.indexOf('## 记忆基础思维') const coreThinkingIndex = renderedContent.indexOf('# 网络杠精思维模式') const recallIndex = renderedContent.indexOf('## 回忆扩展思维') const cognitiveIndex = renderedContent.indexOf('## 认知偏好模式') expect(rememberIndex).toBeLessThan(coreThinkingIndex) expect(coreThinkingIndex).toBeLessThan(recallIndex) expect(recallIndex).toBeLessThan(cognitiveIndex) }) test('应该处理引用解析失败的情况', async () => { // Arrange const content = `intro @!thought://missing middle @!thought://working end` mockResourceManager.resolve .mockResolvedValueOnce({ success: false, error: new Error('Resource not found') }) .mockResolvedValueOnce({ success: true, content: '[working content]' }) // Act const tagSemantics = parser.parseTagContent(content, 'test') const renderedContent = await renderer.renderSemanticContent(tagSemantics, mockResourceManager) // Assert expect(renderedContent).toContain('