import fs from 'fs/promises'; import path from 'path'; import {fileURLToPath} from 'url'; import FileHeaderManager from '../../utils/fileHeaderManager.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // 源文件路径 const sourceFile = path.resolve(__dirname, '../../spider/js/央视大全[官].js'); // 测试文件路径 const testFile = path.resolve(__dirname, 'test_cctv_header_temp.js'); async function runTest() { console.log('=== 开始测试文件头操作 ==='); console.log(`源文件: ${sourceFile}`); console.log(`测试文件: ${testFile}`); try { // 1. 复制文件 console.log('\n[1/6] 正在复制源文件到测试文件...'); try { await fs.copyFile(sourceFile, testFile); console.log('✅ 复制完成。'); } catch (e) { console.error('❌ 复制失败:', e.message); return; } // 2. 读取文件头 console.log('\n[2/6] 正在读取文件头...'); const startTime = performance.now(); let header = await FileHeaderManager.readHeader(testFile); const endTime = performance.now(); const duration = endTime - startTime; console.log(`⏱️ 读取耗时: ${duration.toFixed(4)} ms`); if (header) { console.log('✅ 读取到的文件头:', JSON.stringify(header, null, 2)); } else { console.log('⚠️ 未找到文件头,将尝试创建新文件头。'); header = {}; } // 3. 修改文件头 console.log('\n[3/6] 正在修改并写入文件头...'); const timestamp = Date.now(); const originalTitle = header.title || 'Unknown'; header.title = `${originalTitle}_TEST_${timestamp}`; header.test_timestamp = timestamp; try { await FileHeaderManager.writeHeader(testFile, header); console.log('✅ 写入操作完成。'); } catch (e) { console.error('❌ 写入失败:', e.message); throw e; } // 4. 再次读取验证 console.log('\n[4/6] 再次读取以验证写入...'); const newHeader = await FileHeaderManager.readHeader(testFile); console.log('读取到的新文件头:', JSON.stringify(newHeader, null, 2)); if (newHeader && newHeader.test_timestamp === timestamp) { console.log('✅ 验证成功:新字段已存在且值正确。'); } else { console.error('❌ 验证失败:新字段未找到或值不匹配。'); throw new Error('Verification failed'); } // 5. 移除文件头 console.log('\n[5/6] 正在移除文件头...'); // 注意:removeHeader 返回处理后的内容字符串,不自动写入文件 const contentWithoutHeader = await FileHeaderManager.removeHeader(testFile); // 我们需要手动写入文件以验证 await fs.writeFile(testFile, contentWithoutHeader); console.log('✅ 移除操作完成,已写回文件。'); // 6. 验证移除结果 console.log('\n[6/6] 验证移除结果...'); const headerAfterRemove = await FileHeaderManager.readHeader(testFile); if (!headerAfterRemove || Object.keys(headerAfterRemove).length === 0) { console.log('✅ 验证成功:文件头已移除。'); } else { console.log('❌ 验证失败:文件头仍然存在:', headerAfterRemove); throw new Error('Removal verification failed'); } // 7. 性能测试 (循环 10000 次) const iterations = 10000; console.log(`\n[7/10] 性能基准测试 (读取 ${iterations} 次取平均)...`); // 确保文件有头 await fs.copyFile(sourceFile, testFile); const perfStart = performance.now(); for(let i=0; i