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('