test-autotest-workspace-fingerprint.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import assert from 'assert';
  2. import fs from 'fs';
  3. import os from 'os';
  4. import path from 'path';
  5. import { buildWorkspaceFingerprint } from './src/tools/autotest-pipeline.js';
  6. const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'vlcode-fingerprint-'));
  7. const workDir = path.join(tmpRoot, 'Project');
  8. fs.mkdirSync(path.join(workDir, 'Apps'), { recursive: true });
  9. fs.mkdirSync(path.join(workDir, '.vl-code'), { recursive: true });
  10. const appFile = path.join(workDir, 'Apps', 'AppMain.vl');
  11. const metaFile = path.join(workDir, '.vl-code', 'ProjectMeta.json');
  12. const runFile = path.join(workDir, '.vl-code', 'autotest-results.json');
  13. fs.writeFileSync(appFile, 'App AppMain {}');
  14. fs.writeFileSync(metaFile, '{"apps":["AppMain"]}');
  15. fs.writeFileSync(runFile, '{"runResults":[]}');
  16. const projectContext = {
  17. getAllFiles() {
  18. return [
  19. { path: 'Apps/AppMain.vl', fullPath: appFile, isVL: true },
  20. { path: '.vl-code/ProjectMeta.json', fullPath: metaFile, isVL: false },
  21. { path: '.vl-code/autotest-results.json', fullPath: runFile, isVL: false },
  22. ];
  23. },
  24. };
  25. const before = buildWorkspaceFingerprint(projectContext);
  26. fs.writeFileSync(runFile, '{"runResults":[{"id":"case-1"}]}');
  27. const afterVolatile = buildWorkspaceFingerprint(projectContext);
  28. assert.strictEqual(afterVolatile, before, 'volatile autotest outputs should not affect fingerprint');
  29. fs.writeFileSync(appFile, 'App AppMain { Text "changed" }');
  30. const afterSourceChange = buildWorkspaceFingerprint(projectContext);
  31. assert.notStrictEqual(afterSourceChange, before, 'source changes must affect fingerprint');
  32. console.log('PASS test-autotest-workspace-fingerprint');