diff options
Diffstat (limited to 'packages/cli/src/ui/hooks')
| -rw-r--r-- | packages/cli/src/ui/hooks/slashCommandProcessor.test.ts | 39 | ||||
| -rw-r--r-- | packages/cli/src/ui/hooks/slashCommandProcessor.ts | 4 |
2 files changed, 42 insertions, 1 deletions
diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts index a37af262..37407689 100644 --- a/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts +++ b/packages/cli/src/ui/hooks/slashCommandProcessor.test.ts @@ -60,6 +60,14 @@ vi.mock('../contexts/SessionContext.js', () => ({ useSessionStats: vi.fn(() => ({ stats: {} })), })); +const { mockRunExitCleanup } = vi.hoisted(() => ({ + mockRunExitCleanup: vi.fn(), +})); + +vi.mock('../../utils/cleanup.js', () => ({ + runExitCleanup: mockRunExitCleanup, +})); + import { act, renderHook, waitFor } from '@testing-library/react'; import { vi, describe, it, expect, beforeEach, type Mock } from 'vitest'; import { useSlashCommandProcessor } from './slashCommandProcessor.js'; @@ -405,6 +413,37 @@ describe('useSlashCommandProcessor', () => { vi.useRealTimers(); } }); + + it('should call runExitCleanup when handling a "quit" action', async () => { + const quitAction = vi + .fn() + .mockResolvedValue({ type: 'quit', messages: [] }); + const command = createTestCommand({ + name: 'exit', + action: quitAction, + }); + const result = setupProcessorHook([command]); + + await waitFor(() => + expect(result.current.slashCommands).toHaveLength(1), + ); + + vi.useFakeTimers(); + + try { + await act(async () => { + await result.current.handleSlashCommand('/exit'); + }); + + await act(async () => { + await vi.advanceTimersByTimeAsync(200); + }); + + expect(mockRunExitCleanup).toHaveBeenCalledTimes(1); + } finally { + vi.useRealTimers(); + } + }); }); it('should handle "submit_prompt" action returned from a file-based command', async () => { diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.ts index cfe4b385..9f4bbf90 100644 --- a/packages/cli/src/ui/hooks/slashCommandProcessor.ts +++ b/packages/cli/src/ui/hooks/slashCommandProcessor.ts @@ -18,6 +18,7 @@ import { ToolConfirmationOutcome, } from '@google/gemini-cli-core'; import { useSessionStats } from '../contexts/SessionContext.js'; +import { runExitCleanup } from '../../utils/cleanup.js'; import { Message, MessageType, @@ -370,7 +371,8 @@ export const useSlashCommandProcessor = ( } case 'quit': setQuittingMessages(result.messages); - setTimeout(() => { + setTimeout(async () => { + await runExitCleanup(); process.exit(0); }, 100); return { type: 'handled' }; |
