constants.test.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /// <reference types="bun-types" />
  2. import { afterEach, describe, expect, test } from 'bun:test';
  3. import { join } from 'node:path';
  4. // Mock process.env and process.platform for testing
  5. const originalPlatform = process.platform;
  6. const originalEnv = { ...process.env };
  7. function mockPlatform(platform: NodeJS.Platform) {
  8. Object.defineProperty(process, 'platform', {
  9. value: platform,
  10. configurable: true,
  11. });
  12. }
  13. function mockEnv(env: Partial<Record<string, string>>) {
  14. Object.assign(process.env, env);
  15. }
  16. function restoreMocks() {
  17. Object.defineProperty(process, 'platform', {
  18. value: originalPlatform,
  19. configurable: true,
  20. });
  21. process.env = { ...originalEnv };
  22. }
  23. describe('grep constants', () => {
  24. afterEach(() => {
  25. restoreMocks();
  26. });
  27. describe('getDataDir', () => {
  28. test('returns LOCALAPPDATA on Windows when set', () => {
  29. mockPlatform('win32');
  30. mockEnv({ LOCALAPPDATA: 'C:\\Users\\test\\AppData\\Local' });
  31. // Import after mocking to get the mocked behavior
  32. const { getDataDir } = require('./constants');
  33. const result = getDataDir();
  34. expect(result).toBe('C:\\Users\\test\\AppData\\Local');
  35. });
  36. test('returns APPDATA on Windows when LOCALAPPDATA not set', () => {
  37. mockPlatform('win32');
  38. mockEnv({ APPDATA: 'C:\\Users\\test\\AppData\\Roaming' });
  39. const { getDataDir } = require('./constants');
  40. const result = getDataDir();
  41. expect(result).toBe('C:\\Users\\test\\AppData\\Roaming');
  42. });
  43. test('returns USERPROFILE/AppData/Local on Windows when no env vars set', () => {
  44. mockPlatform('win32');
  45. mockEnv({ USERPROFILE: 'C:\\Users\\test' });
  46. const { getDataDir } = require('./constants');
  47. const result = getDataDir();
  48. expect(result).toBe(join('C:\\Users\\test', 'AppData', 'Local'));
  49. });
  50. test('returns XDG_DATA_HOME on Unix when set', () => {
  51. mockPlatform('linux');
  52. mockEnv({ XDG_DATA_HOME: '/home/test/.local/share' });
  53. const { getDataDir } = require('./constants');
  54. const result = getDataDir();
  55. expect(result).toBe('/home/test/.local/share');
  56. });
  57. test('returns HOME/.local/share on Unix when XDG_DATA_HOME not set', () => {
  58. mockPlatform('linux');
  59. mockEnv({ HOME: '/home/test' });
  60. const { getDataDir } = require('./constants');
  61. const result = getDataDir();
  62. expect(result).toBe(join('/home/test', '.local', 'share'));
  63. });
  64. test('returns ./.local/share on Unix when HOME not set', () => {
  65. mockPlatform('linux');
  66. // Clear HOME from environment
  67. delete process.env.HOME;
  68. delete process.env.XDG_DATA_HOME;
  69. const { getDataDir } = require('./constants');
  70. const result = getDataDir();
  71. expect(result).toBe(join('.', '.local', 'share'));
  72. });
  73. test('returns XDG_DATA_HOME on macOS when set', () => {
  74. mockPlatform('darwin');
  75. mockEnv({ XDG_DATA_HOME: '/Users/test/.local/share' });
  76. const { getDataDir } = require('./constants');
  77. const result = getDataDir();
  78. expect(result).toBe('/Users/test/.local/share');
  79. });
  80. test('returns HOME/.local/share on macOS when XDG_DATA_HOME not set', () => {
  81. mockPlatform('darwin');
  82. mockEnv({ HOME: '/Users/test' });
  83. const { getDataDir } = require('./constants');
  84. const result = getDataDir();
  85. expect(result).toBe(join('/Users/test', '.local', 'share'));
  86. });
  87. });
  88. describe('constants', () => {
  89. test('DEFAULT_MAX_DEPTH is 20', () => {
  90. const { DEFAULT_MAX_DEPTH } = require('./constants');
  91. expect(DEFAULT_MAX_DEPTH).toBe(20);
  92. });
  93. test('DEFAULT_MAX_FILESIZE is 10M', () => {
  94. const { DEFAULT_MAX_FILESIZE } = require('./constants');
  95. expect(DEFAULT_MAX_FILESIZE).toBe('10M');
  96. });
  97. test('DEFAULT_MAX_COUNT is 500', () => {
  98. const { DEFAULT_MAX_COUNT } = require('./constants');
  99. expect(DEFAULT_MAX_COUNT).toBe(500);
  100. });
  101. test('DEFAULT_MAX_COLUMNS is 1000', () => {
  102. const { DEFAULT_MAX_COLUMNS } = require('./constants');
  103. expect(DEFAULT_MAX_COLUMNS).toBe(1000);
  104. });
  105. test('DEFAULT_CONTEXT is 2', () => {
  106. const { DEFAULT_CONTEXT } = require('./constants');
  107. expect(DEFAULT_CONTEXT).toBe(2);
  108. });
  109. test('DEFAULT_TIMEOUT_MS is 300000', () => {
  110. const { DEFAULT_TIMEOUT_MS } = require('./constants');
  111. expect(DEFAULT_TIMEOUT_MS).toBe(300_000);
  112. });
  113. test('DEFAULT_MAX_OUTPUT_BYTES is 10MB', () => {
  114. const { DEFAULT_MAX_OUTPUT_BYTES } = require('./constants');
  115. expect(DEFAULT_MAX_OUTPUT_BYTES).toBe(10 * 1024 * 1024);
  116. });
  117. test('RG_SAFETY_FLAGS contains expected flags', () => {
  118. const { RG_SAFETY_FLAGS } = require('./constants');
  119. expect(RG_SAFETY_FLAGS).toContain('--no-follow');
  120. expect(RG_SAFETY_FLAGS).toContain('--color=never');
  121. expect(RG_SAFETY_FLAGS).toContain('--no-heading');
  122. expect(RG_SAFETY_FLAGS).toContain('--line-number');
  123. expect(RG_SAFETY_FLAGS).toContain('--with-filename');
  124. });
  125. test('GREP_SAFETY_FLAGS contains expected flags', () => {
  126. const { GREP_SAFETY_FLAGS } = require('./constants');
  127. expect(GREP_SAFETY_FLAGS).toContain('-n');
  128. expect(GREP_SAFETY_FLAGS).toContain('-H');
  129. expect(GREP_SAFETY_FLAGS).toContain('--color=never');
  130. });
  131. });
  132. });