/// import { afterEach, describe, expect, test } from 'bun:test'; import { join } from 'node:path'; // Mock process.env and process.platform for testing const originalPlatform = process.platform; const originalEnv = { ...process.env }; function mockPlatform(platform: NodeJS.Platform) { Object.defineProperty(process, 'platform', { value: platform, configurable: true, }); } function mockEnv(env: Partial>) { Object.assign(process.env, env); } function restoreMocks() { Object.defineProperty(process, 'platform', { value: originalPlatform, configurable: true, }); process.env = { ...originalEnv }; } describe('grep constants', () => { afterEach(() => { restoreMocks(); }); describe('getDataDir', () => { test('returns LOCALAPPDATA on Windows when set', () => { mockPlatform('win32'); mockEnv({ LOCALAPPDATA: 'C:\\Users\\test\\AppData\\Local' }); // Import after mocking to get the mocked behavior const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe('C:\\Users\\test\\AppData\\Local'); }); test('returns APPDATA on Windows when LOCALAPPDATA not set', () => { mockPlatform('win32'); mockEnv({ APPDATA: 'C:\\Users\\test\\AppData\\Roaming' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe('C:\\Users\\test\\AppData\\Roaming'); }); test('returns USERPROFILE/AppData/Local on Windows when no env vars set', () => { mockPlatform('win32'); mockEnv({ USERPROFILE: 'C:\\Users\\test' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe(join('C:\\Users\\test', 'AppData', 'Local')); }); test('returns XDG_DATA_HOME on Unix when set', () => { mockPlatform('linux'); mockEnv({ XDG_DATA_HOME: '/home/test/.local/share' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe('/home/test/.local/share'); }); test('returns HOME/.local/share on Unix when XDG_DATA_HOME not set', () => { mockPlatform('linux'); mockEnv({ HOME: '/home/test' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe(join('/home/test', '.local', 'share')); }); test('returns ./.local/share on Unix when HOME not set', () => { mockPlatform('linux'); // Clear HOME from environment delete process.env.HOME; delete process.env.XDG_DATA_HOME; const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe(join('.', '.local', 'share')); }); test('returns XDG_DATA_HOME on macOS when set', () => { mockPlatform('darwin'); mockEnv({ XDG_DATA_HOME: '/Users/test/.local/share' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe('/Users/test/.local/share'); }); test('returns HOME/.local/share on macOS when XDG_DATA_HOME not set', () => { mockPlatform('darwin'); mockEnv({ HOME: '/Users/test' }); const { getDataDir } = require('./constants'); const result = getDataDir(); expect(result).toBe(join('/Users/test', '.local', 'share')); }); }); describe('constants', () => { test('DEFAULT_MAX_DEPTH is 20', () => { const { DEFAULT_MAX_DEPTH } = require('./constants'); expect(DEFAULT_MAX_DEPTH).toBe(20); }); test('DEFAULT_MAX_FILESIZE is 10M', () => { const { DEFAULT_MAX_FILESIZE } = require('./constants'); expect(DEFAULT_MAX_FILESIZE).toBe('10M'); }); test('DEFAULT_MAX_COUNT is 500', () => { const { DEFAULT_MAX_COUNT } = require('./constants'); expect(DEFAULT_MAX_COUNT).toBe(500); }); test('DEFAULT_MAX_COLUMNS is 1000', () => { const { DEFAULT_MAX_COLUMNS } = require('./constants'); expect(DEFAULT_MAX_COLUMNS).toBe(1000); }); test('DEFAULT_CONTEXT is 2', () => { const { DEFAULT_CONTEXT } = require('./constants'); expect(DEFAULT_CONTEXT).toBe(2); }); test('DEFAULT_TIMEOUT_MS is 300000', () => { const { DEFAULT_TIMEOUT_MS } = require('./constants'); expect(DEFAULT_TIMEOUT_MS).toBe(300_000); }); test('DEFAULT_MAX_OUTPUT_BYTES is 10MB', () => { const { DEFAULT_MAX_OUTPUT_BYTES } = require('./constants'); expect(DEFAULT_MAX_OUTPUT_BYTES).toBe(10 * 1024 * 1024); }); test('RG_SAFETY_FLAGS contains expected flags', () => { const { RG_SAFETY_FLAGS } = require('./constants'); expect(RG_SAFETY_FLAGS).toContain('--no-follow'); expect(RG_SAFETY_FLAGS).toContain('--color=never'); expect(RG_SAFETY_FLAGS).toContain('--no-heading'); expect(RG_SAFETY_FLAGS).toContain('--line-number'); expect(RG_SAFETY_FLAGS).toContain('--with-filename'); }); test('GREP_SAFETY_FLAGS contains expected flags', () => { const { GREP_SAFETY_FLAGS } = require('./constants'); expect(GREP_SAFETY_FLAGS).toContain('-n'); expect(GREP_SAFETY_FLAGS).toContain('-H'); expect(GREP_SAFETY_FLAGS).toContain('--color=never'); }); }); });