calculateSelectiveFileMetrics.test.tsā¢2.35 kB
import { describe, expect, it, vi } from 'vitest';
import type { ProcessedFile } from '../../../src/core/file/fileTypes.js';
import { calculateSelectiveFileMetrics } from '../../../src/core/metrics/calculateSelectiveFileMetrics.js';
import { countTokens, type TokenCountTask } from '../../../src/core/metrics/workers/calculateMetricsWorker.js';
import type { WorkerOptions } from '../../../src/shared/processConcurrency.js';
import type { RepomixProgressCallback } from '../../../src/shared/types.js';
vi.mock('../../shared/processConcurrency', () => ({
getProcessConcurrency: () => 1,
}));
const mockInitTaskRunner = <T, R>(_options: WorkerOptions) => {
return {
run: async (task: T) => {
return (await countTokens(task as TokenCountTask)) as R;
},
cleanup: async () => {
// Mock cleanup - no-op for tests
},
};
};
describe('calculateSelectiveFileMetrics', () => {
it('should calculate metrics for selective files only', async () => {
const processedFiles: ProcessedFile[] = [
{ path: 'file1.txt', content: 'a'.repeat(100) },
{ path: 'file2.txt', content: 'b'.repeat(200) },
{ path: 'file3.txt', content: 'c'.repeat(300) },
];
const targetFilePaths = ['file1.txt', 'file3.txt'];
const progressCallback: RepomixProgressCallback = vi.fn();
const result = await calculateSelectiveFileMetrics(
processedFiles,
targetFilePaths,
'o200k_base',
progressCallback,
{
taskRunner: mockInitTaskRunner({ numOfTasks: 1, workerPath: '', runtime: 'worker_threads' }),
},
);
expect(result).toEqual([
{ path: 'file1.txt', charCount: 100, tokenCount: 13 },
{ path: 'file3.txt', charCount: 300, tokenCount: 75 },
]);
});
it('should return empty array when no target files match', async () => {
const processedFiles: ProcessedFile[] = [{ path: 'file1.txt', content: 'a'.repeat(100) }];
const targetFilePaths = ['nonexistent.txt'];
const progressCallback: RepomixProgressCallback = vi.fn();
const result = await calculateSelectiveFileMetrics(
processedFiles,
targetFilePaths,
'o200k_base',
progressCallback,
{
taskRunner: mockInitTaskRunner({ numOfTasks: 1, workerPath: '', runtime: 'worker_threads' }),
},
);
expect(result).toEqual([]);
});
});