| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import fs from 'fs';
- import os from 'os';
- import path from 'path';
- import { analyzeCompileResult, persistLastCompileReport } from './src/server/routes/compile.js';
- function assert(condition, message) {
- if (!condition) throw new Error(message);
- }
- console.log('\n── Compile Report Persistence ──');
- const workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'vlcode-compile-report-'));
- try {
- const rawResult = {
- code: 0,
- data: {
- gid: 1653,
- errList: [
- { level: 'warning', file: 'Apps/Demo.vx', line: 3, message: 'deprecated prop' },
- { level: 'error', file: 'Apps/Demo.vx', line: 12, message: 'Unexpected token' },
- ],
- appPreviewUrlMap: {
- 'Apps/Demo.vx': 'https://example.test/demo',
- },
- },
- };
- const analysis = analyzeCompileResult(rawResult, { action: 'parsePjt' });
- assert(analysis.success === false, 'hard errors should keep compile result unsuccessful');
- assert(analysis.errCount === 1, 'hard error count should exclude warnings');
- assert(analysis.warningCount === 1, 'warning count should be preserved');
- assert(Array.isArray(analysis.errList) && analysis.errList.length === 1, 'errList should only contain hard errors');
- assert(Array.isArray(analysis.warningList) && analysis.warningList.length === 1, 'warningList should only contain warnings');
- assert(analysis.previewUrls['Apps/Demo.vx'] === 'https://example.test/demo', 'preview URLs should be extracted');
- const report = persistLastCompileReport(workDir, rawResult, { action: 'parsePjt' });
- const savedPath = path.join(workDir, '.vl-code', 'last-compile.json');
- const saved = JSON.parse(fs.readFileSync(savedPath, 'utf-8'));
- assert(report.errCount === 1, 'persisted report should keep hard error count');
- assert(saved.warningCount === 1, 'persisted report should keep warning count');
- assert(saved.errList.length === 1, 'persisted errList should only contain hard errors');
- assert(saved.warningList.length === 1, 'persisted warningList should only contain warnings');
- assert(saved.previewUrls['Apps/Demo.vx'] === 'https://example.test/demo', 'persisted preview URLs should be preserved');
- assert(typeof saved.timestamp === 'string' && saved.timestamp.length > 0, 'persisted report should include timestamp');
- console.log('PASS test-compile-report-persistence.js');
- } finally {
- fs.rmSync(workDir, { recursive: true, force: true });
- }
|