summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/hooks')
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.test.ts39
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.ts4
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' };