// 测试用的模拟数据
export const mockDocuments = {
// 基本文本文档
basicText: {
memoryKey: 'basic-text-doc',
filePath: './tests/fixtures/documents/basic-text.docx',
documentType: 'common-doc',
textContent: '这是一个基本的测试文档。\n\nThis document contains both Chinese and English text.\n\n文档包含多种内容类型,用于测试文本提取功能。',
expectedWords: ['这个', '基本', '测试', '文档', 'chinese', 'english', 'text', 'document']
},
// API文档
apiDoc: {
memoryKey: 'api-endpoint-doc',
filePath: './tests/fixtures/documents/api-documentation.docx',
documentType: 'api-doc',
textContent: 'API Endpoint Documentation\n\n# GET /api/users\n获取用户列表\n\n参数:\n- page: 页码 (默认: 1)\n- limit: 每页数量 (默认: 10)\n\n响应:\n```json\n{\n "users": [...],\n "total": 100,\n "page": 1\n}\n```',
expectedWords: ['api', 'endpoint', 'documentation', 'get', 'users', '参数', '响应', 'json'],
tablesCount: 2,
imagesCount: 0
},
// UI组件文档
uiComponentDoc: {
memoryKey: 'button-component-doc',
filePath: './tests/fixtures/documents/ui-component-doc.docx',
documentType: 'ui-component',
textContent: 'Button Component Documentation\n\nProps:\n- type: "primary" | "secondary" | "danger"\n- size: "small" | "medium" | "large"\n- disabled: boolean\n- onClick: function\n\nExamples:\n```jsx\n<Button type="primary" size="large">Click me</Button>\n```',
expectedWords: ['button', 'component', 'props', 'type', 'size', 'disabled', 'onclick', 'examples'],
tablesCount: 1,
imagesCount: 1
},
// 包含表格的文档
tableDoc: {
memoryKey: 'table-test-doc',
filePath: './tests/fixtures/documents/simple-table.docx',
documentType: 'common-doc',
textContent: '这是一个包含表格的文档。\n\n表格数据如下:',
tables: [
{
rows: [
['姓名', '年龄', '城市'],
['张三', '25', '北京'],
['李四', '30', '上海'],
['王五', '28', '广州']
]
}
],
expectedWords: ['表格', '姓名', '年龄', '城市', '张三', '李四', '王五'],
tablesCount: 1
},
// 包含图片的文档
imageDoc: {
memoryKey: 'image-test-doc',
filePath: './tests/fixtures/documents/with-images.docx',
documentType: 'common-doc',
textContent: '这是一个包含图片的文档。',
images: [
{
filename: 'chart1.png',
ocrText: '销售数据统计图表\n2024年度销售报告\nQ1: 100万\nQ2: 150万\nQ3: 200万\nQ4: 250万',
size: 24576
},
{
filename: 'screenshot.jpg',
ocrText: '用户界面截图\n登录页面\n用户名: [输入框]\n密码: [输入框]\n[登录按钮] [忘记密码]',
size: 15360
}
],
expectedWords: ['销售', '数据', '统计', '图表', '用户', '界面', '截图', '登录'],
imagesCount: 2
},
// 大文档(模拟)
largeDoc: {
memoryKey: 'large-test-doc',
filePath: './tests/fixtures/documents/large-file.docx',
documentType: 'common-doc',
textContent: '这是一个大文档的示例内容。'.repeat(10000), // 模拟大文本
wordCount: 100000, // 模拟10万字
fileSize: 15 * 1024 * 1024, // 模拟15MB文件
expectedWords: ['这个', '大文档', '示例', '内容']
}
};
// 测试搜索查询
export const searchQueries = {
basic: [
{ query: '文档', expectedResults: 5 },
{ query: 'document', expectedResults: 3 },
{ query: '测试', expectedResults: 4 },
{ query: 'test', expectedResults: 2 },
{ query: 'API', expectedResults: 1 },
{ query: 'Button', expectedResults: 1 },
{ query: '表格', expectedResults: 2 },
{ query: '图片', expectedResults: 2 }
],
complex: [
{ query: 'API 文档', expectedResults: 1 },
{ query: 'Button component', expectedResults: 1 },
{ query: '用户界面', expectedResults: 1 },
{ query: '销售数据', expectedResults: 1 },
{ query: '测试 文档', expectedResults: 4 }
],
edgeCases: [
{ query: '', expectedResults: 0 },
{ query: ' ', expectedResults: 0 },
{ query: '不存在的关键词', expectedResults: 0 },
{ query: 'a'.repeat(100), expectedResults: 0 }
]
};
// 缓存测试数据
export const cacheTestData = {
validEntries: [
{
key: 'doc1_cache',
data: {
text: '这是缓存的文档内容',
tables: [],
images: [],
metadata: { cachedAt: new Date().toISOString() }
},
ttl: 3600
},
{
key: 'doc2_cache',
data: {
text: '另一个缓存的文档',
tables: [{ rows: [['表头1', '表头2'], ['数据1', '数据2']] }],
images: [{ filename: 'image.png', ocrText: '图片文字' }],
metadata: { cachedAt: new Date().toISOString() }
},
ttl: 7200
}
],
expiredEntries: [
{
key: 'expired_doc',
data: { text: '过期的缓存' },
ttl: -1 // 已过期
}
]
};
// 错误测试用例
export const errorTestCases = {
fileNotFound: {
filePath: '/path/to/nonexistent/file.docx',
expectedError: '文件不存在'
},
invalidFormat: [
{ filePath: 'document.txt', expectedError: '不支持的文件格式' },
{ filePath: 'document.pdf', expectedError: '不支持的文件格式' },
{ filePath: 'document.jpg', expectedError: '不支持的文件格式' }
],
invalidParams: [
{ tool: 'read_word_document', missingParam: 'filePath', expectedError: 'filePath是必需的参数' },
{ tool: 'search_documents', missingParam: 'query', expectedError: 'query是必需的参数' },
{ tool: 'get_stored_document', missingParam: 'memoryKey', expectedError: 'memoryKey是必需的参数' }
],
invalidDocumentType: {
documentType: 'invalid_type',
expectedError: '无效的文档类型'
}
};
// 性能测试数据
export const performanceTestData = {
processingTimes: {
smallDoc: { maxTime: 1000, size: '100KB' },
mediumDoc: { maxTime: 3000, size: '1MB' },
largeDoc: { maxTime: 10000, size: '10MB+' }
},
memoryUsage: {
baseline: 50 * 1024 * 1024, // 50MB baseline
maxIncrease: 200 * 1024 * 1024 // 200MB max increase
},
cachePerformance: {
hitTime: 10, // 10ms max for cache hit
missTime: 100 // 100ms max for cache miss
}
};
// 配置测试数据
export const configTestData = {
defaultConfig: {
processing: {
maxFileSize: 10485760,
maxPages: 100,
chunkSize: 1048576,
parallelProcessing: true
},
cache: {
enabled: true,
defaultTTL: 3600,
checkPeriod: 600
},
ocr: {
enabled: true,
languages: ['chi_sim', 'eng']
}
},
testConfigs: [
{
name: 'disabled_cache',
config: { cache: { enabled: false } },
expectedBehavior: '所有请求都直接处理,不使用缓存'
},
{
name: 'disabled_ocr',
config: { ocr: { enabled: false } },
expectedBehavior: '图片只提取不进行OCR分析'
},
{
name: 'small_chunk_size',
config: { processing: { chunkSize: 512 * 1024 } },
expectedBehavior: '使用更小的块处理大文档'
}
]
};