UNPKG

unqommented

Version:

A Node.js utility that quickly identifies files with uncommented code in your codebase. Designed for developers who want to efficiently tell LLMs exactly which files need comments added.

101 lines (85 loc) 3.28 kB
require('qtests/setup'); const { test, expect, describe, beforeAll, afterAll } = require('@jest/globals'); const fs = require('fs'); const path = require('path'); const { PassThrough } = require('stream'); const utils = require('../utils'); const os = require('os'); const TEST_DIR = './test-dir-stream'; let outputStream; let data = ''; beforeAll(() => { if (!fs.existsSync(TEST_DIR)) { fs.mkdirSync(TEST_DIR); } fs.writeFileSync(path.join(TEST_DIR, 'commented.js'), '// comment'); fs.writeFileSync(path.join(TEST_DIR, 'uncommented.js'), 'const x = 1;'); outputStream = new PassThrough(); outputStream.on('data', chunk => { data += chunk.toString(); }); }); afterAll(() => { fs.rmSync(TEST_DIR, { recursive: true, force: true }); }); describe('findUncommentedFiles with output stream', () => { test('writes expected paths to provided stream and returns empty list', async () => { const result = await utils.findUncommentedFiles(TEST_DIR, outputStream); outputStream.end(); const files = data.trim().split('\n').filter(f => f); expect(files).toEqual(['uncommented.js']); expect(result.uncommentedFiles).toEqual([]); }); }); describe('findUncommentedFiles stream with only commented files', () => { let tmpDir; let stream; let content = ''; let finished = false; beforeAll(() => { tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'unqommented-')); fs.writeFileSync(path.join(tmpDir, 'commented.js'), '// just a comment'); stream = new PassThrough(); stream.on('data', chunk => { content += chunk.toString(); }); stream.on('finish', () => { finished = true; }); }); afterAll(() => { fs.rmSync(tmpDir, { recursive: true, force: true }); }); test('does not write to stream and ends cleanly', async () => { const result = await utils.findUncommentedFiles(tmpDir, stream); await new Promise(res => stream.end(res)); expect(content).toBe(''); expect(finished).toBe(true); expect(result.uncommentedFiles).toEqual([]); }); }); describe('findUncommentedFiles backpressure handling', () => { let tmpDir; let stream; let collected = ''; let finished = false; beforeAll(() => { tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'unqommented-')); for (let i = 0; i < 5; i += 1) { fs.writeFileSync(path.join(tmpDir, `file${i}.js`), 'const x = 1;'); } stream = new PassThrough({ highWaterMark: 1 }); stream.on('finish', () => { finished = true; }); }); afterAll(() => { fs.rmSync(tmpDir, { recursive: true, force: true }); }); test('waits for drain event when stream buffer is full', async () => { let resolved = false; const promise = utils.findUncommentedFiles(tmpDir, stream).then(res => { resolved = true; return res; }); await new Promise(res => setTimeout(res, 50)); expect(resolved).toBe(false); // should still wait for drain stream.on('data', chunk => { collected += chunk.toString(); }); stream.resume(); // drain buffered data const result = await promise; await new Promise(res => stream.end(res)); const lines = collected.trim().split('\n').filter(f => f); expect(lines.length).toBe(5); expect(finished).toBe(true); expect(result.uncommentedFiles).toEqual([]); }); });