diff options
| author | Anas H. Sulaiman <[email protected]> | 2025-06-13 17:17:08 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-13 17:17:08 -0400 |
| commit | bb67d317394ba4be7b55bdc7175c5d432a40ae53 (patch) | |
| tree | 5ce691bbb871d3aa39bd79e93f8111fa72104ad7 /packages/cli/src/utils/loadIgnorePatterns.test.ts | |
| parent | 54f0d9d0e5d8c21ed4c0d5b81ea8beb5908ebd4d (diff) | |
reuse `GitIgnoreParser` for loading `.geminiignore` (#1025)
Diffstat (limited to 'packages/cli/src/utils/loadIgnorePatterns.test.ts')
| -rw-r--r-- | packages/cli/src/utils/loadIgnorePatterns.test.ts | 93 |
1 files changed, 10 insertions, 83 deletions
diff --git a/packages/cli/src/utils/loadIgnorePatterns.test.ts b/packages/cli/src/utils/loadIgnorePatterns.test.ts index 9bcddf34..5ff89c4d 100644 --- a/packages/cli/src/utils/loadIgnorePatterns.test.ts +++ b/packages/cli/src/utils/loadIgnorePatterns.test.ts @@ -42,9 +42,6 @@ describe('loadGeminiIgnorePatterns', () => { let consoleLogSpy: Mock< (message?: unknown, ...optionalParams: unknown[]) => void >; - let consoleWarnSpy: Mock< - (message?: unknown, ...optionalParams: unknown[]) => void - >; beforeAll(async () => { actualFs = await vi.importActual<typeof import('node:fs')>('node:fs'); @@ -62,11 +59,6 @@ describe('loadGeminiIgnorePatterns', () => { .mockImplementation(() => {}) as Mock< (message?: unknown, ...optionalParams: unknown[]) => void >; - consoleWarnSpy = vi - .spyOn(console, 'warn') - .mockImplementation(() => {}) as Mock< - (message?: unknown, ...optionalParams: unknown[]) => void - >; mockedFsReadFileSync.mockReset(); }); @@ -77,7 +69,7 @@ describe('loadGeminiIgnorePatterns', () => { vi.restoreAllMocks(); }); - it('should load and parse patterns from .geminiignore, ignoring comments and empty lines', () => { + it('should load and parse patterns from .geminiignore, ignoring comments and empty lines', async () => { const ignoreContent = [ '# This is a comment', 'pattern1', @@ -90,14 +82,7 @@ describe('loadGeminiIgnorePatterns', () => { const ignoreFilePath = path.join(tempDir, '.geminiignore'); actualFs.writeFileSync(ignoreFilePath, ignoreContent); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') return ignoreContent; - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - - const patterns = loadGeminiIgnorePatterns(tempDir); + const patterns = await loadGeminiIgnorePatterns(tempDir); expect(patterns).toEqual([ 'pattern1', @@ -109,39 +94,19 @@ describe('loadGeminiIgnorePatterns', () => { expect(consoleLogSpy).toHaveBeenCalledWith( expect.stringContaining('Loaded 5 patterns from .geminiignore'), ); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); }); - it('should return an empty array and log info if .geminiignore is not found', () => { - const ignoreFilePath = path.join(tempDir, '.geminiignore'); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') { - const error = new Error('File not found') as NodeJS.ErrnoException; - error.code = 'ENOENT'; - throw error; - } - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - - const patterns = loadGeminiIgnorePatterns(tempDir); + it('should return an empty array and log info if .geminiignore is not found', async () => { + const patterns = await loadGeminiIgnorePatterns(tempDir); expect(patterns).toEqual([]); expect(consoleLogSpy).not.toHaveBeenCalled(); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); }); - it('should return an empty array if .geminiignore is empty', () => { + it('should return an empty array if .geminiignore is empty', async () => { const ignoreFilePath = path.join(tempDir, '.geminiignore'); actualFs.writeFileSync(ignoreFilePath, ''); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') return ''; // Return string for empty file - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - const patterns = loadGeminiIgnorePatterns(tempDir); + const patterns = await loadGeminiIgnorePatterns(tempDir); expect(patterns).toEqual([]); expect(consoleLogSpy).not.toHaveBeenCalledWith( expect.stringContaining('Loaded 0 patterns from .geminiignore'), @@ -149,10 +114,9 @@ describe('loadGeminiIgnorePatterns', () => { expect(consoleLogSpy).not.toHaveBeenCalledWith( expect.stringContaining('No .geminiignore file found'), ); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); }); - it('should return an empty array if .geminiignore contains only comments and empty lines', () => { + it('should return an empty array if .geminiignore contains only comments and empty lines', async () => { const ignoreContent = [ '# Comment 1', ' # Comment 2 with leading spaces', @@ -161,14 +125,8 @@ describe('loadGeminiIgnorePatterns', () => { ].join('\n'); const ignoreFilePath = path.join(tempDir, '.geminiignore'); actualFs.writeFileSync(ignoreFilePath, ignoreContent); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') return ignoreContent; - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - const patterns = loadGeminiIgnorePatterns(tempDir); + const patterns = await loadGeminiIgnorePatterns(tempDir); expect(patterns).toEqual([]); expect(consoleLogSpy).not.toHaveBeenCalledWith( expect.stringContaining('Loaded 0 patterns from .geminiignore'), @@ -176,48 +134,17 @@ describe('loadGeminiIgnorePatterns', () => { expect(consoleLogSpy).not.toHaveBeenCalledWith( expect.stringContaining('No .geminiignore file found'), ); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); - }); - - it('should handle read errors (other than ENOENT) and log a warning', () => { - const ignoreFilePath = path.join(tempDir, '.geminiignore'); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') { - const error = new Error('Test read error') as NodeJS.ErrnoException; - error.code = 'EACCES'; - throw error; - } - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - - const patterns = loadGeminiIgnorePatterns(tempDir); - expect(patterns).toEqual([]); - expect(consoleWarnSpy).toHaveBeenCalledWith( - expect.stringContaining( - `[WARN] Could not read .geminiignore file at ${ignoreFilePath}: Test read error`, - ), - ); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); }); - it('should correctly handle patterns with inline comments if not starting with #', () => { + it('should correctly handle patterns with inline comments if not starting with #', async () => { const ignoreContent = 'src/important # but not this part'; const ignoreFilePath = path.join(tempDir, '.geminiignore'); actualFs.writeFileSync(ignoreFilePath, ignoreContent); - mockedFsReadFileSync.mockImplementation((p: string, encoding: string) => { - if (p === ignoreFilePath && encoding === 'utf-8') return ignoreContent; - throw new Error( - `Mock fs.readFileSync: Unexpected call with path: ${p}, encoding: ${encoding}`, - ); - }); - const patterns = loadGeminiIgnorePatterns(tempDir); + const patterns = await loadGeminiIgnorePatterns(tempDir); expect(patterns).toEqual(['src/important # but not this part']); expect(consoleLogSpy).toHaveBeenCalledWith( expect.stringContaining('Loaded 1 patterns from .geminiignore'), ); - expect(mockedFsReadFileSync).toHaveBeenCalledWith(ignoreFilePath, 'utf-8'); }); }); |
