UNPKG

agentsqripts

Version:

Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems

102 lines (86 loc) 3.5 kB
// 🔗 Tests: scanDirectory → getAllFiles, walkDirectorySync → getAllFilesSync const { testHelpers } = require('qtests'); // helper utilities for environment isolation const fs = require('fs'); // file system operations const path = require('path'); // path utilities const os = require('os'); // OS utilities for temp directories const { getAllFiles, getAllFilesSync, scanDirectory, walkDirectorySync } = require('./directoryScanner'); // functions under test /** * qtests test suite for directory scanner utilities */ function getTestSuite() { const { createAssertions } = require('qtests'); const assert = createAssertions(); return { 'Directory scanner scans files correctly': async () => { await testHelpers.withSavedEnv(async () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ds-test-')); const subDir = path.join(tmpDir, 'sub'); const ignoreDir = path.join(tmpDir, 'node_modules'); fs.mkdirSync(subDir); fs.mkdirSync(ignoreDir); const filesToCreate = [ path.join(tmpDir, 'root.js'), path.join(subDir, 'child.ts'), path.join(ignoreDir, 'ignored.js'), path.join(tmpDir, 'note.txt') ]; filesToCreate.forEach(file => fs.writeFileSync(file, 'console.log(`test`);')); const expected = [ path.join(tmpDir, 'root.js'), path.join(subDir, 'child.ts') ]; const asyncFiles = await getAllFiles(tmpDir); assert.equal(JSON.stringify(asyncFiles.sort()), JSON.stringify(expected.sort())); // Cleanup fs.rmSync(tmpDir, { recursive: true, force: true }); }); }, 'Directory scanner handles sync operations': async () => { await testHelpers.withSavedEnv(async () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ds-sync-')); fs.writeFileSync(path.join(tmpDir, 'test.js'), 'console.log("test");'); const syncFiles = getAllFilesSync(tmpDir); assert.truthy(Array.isArray(syncFiles), 'syncFiles should be an array'); assert.truthy(syncFiles.length > 0, 'syncFiles should not be empty'); // Cleanup fs.rmSync(tmpDir, { recursive: true, force: true }); }); }, 'Directory scanner handles empty directories': async () => { await testHelpers.withSavedEnv(async () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ds-empty-')); const files = await getAllFiles(tmpDir); assert.equal(JSON.stringify(files), JSON.stringify([])); // Cleanup fs.rmSync(tmpDir, { recursive: true, force: true }); }); } }; } module.exports = { getTestSuite }; // Auto-execute when run directly (for qtests-runner compatibility) if (require.main === module) { (async () => { const testSuite = getTestSuite(); let passed = 0; let failed = 0; for (const [testName, testFn] of Object.entries(testSuite)) { try { await testFn(); console.log(`✓ ${testName}`); passed++; } catch (error) { console.log(`✗ ${testName}`); console.error(`Error: ${error.message}`); failed++; } } if (failed > 0) { console.log(`\nSummary: ${passed} passed, ${failed} failed`); process.exit(1); } else { console.log(`\nSummary: ${passed} passed`); process.exit(0); } })(); }