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
JavaScript
// 🔗 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);
}
})();
}