mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-15 00:21:09 -07:00
fix(cli): allow closing debug console after auto-open via flicker (#18795)
This commit is contained in:
@@ -70,12 +70,20 @@ vi.mock('./activityLogger.js', () => ({
|
||||
},
|
||||
}));
|
||||
|
||||
const mockShouldLaunchBrowser = vi.hoisted(() => vi.fn(() => true));
|
||||
const mockOpenBrowserSecurely = vi.hoisted(() =>
|
||||
vi.fn(() => Promise.resolve()),
|
||||
);
|
||||
|
||||
vi.mock('@google/gemini-cli-core', () => ({
|
||||
debugLogger: {
|
||||
log: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
error: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
},
|
||||
shouldLaunchBrowser: mockShouldLaunchBrowser,
|
||||
openBrowserSecurely: mockOpenBrowserSecurely,
|
||||
}));
|
||||
|
||||
vi.mock('ws', () => ({
|
||||
@@ -92,6 +100,7 @@ vi.mock('gemini-cli-devtools', () => ({
|
||||
import {
|
||||
setupInitialActivityLogger,
|
||||
startDevToolsServer,
|
||||
toggleDevToolsPanel,
|
||||
resetForTesting,
|
||||
} from './devtoolsService.js';
|
||||
|
||||
@@ -426,4 +435,86 @@ describe('devtoolsService', () => {
|
||||
expect(mockAddNetworkTransport).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
});
|
||||
|
||||
describe('toggleDevToolsPanel', () => {
|
||||
it('calls toggle when browser opens successfully', async () => {
|
||||
const config = createMockConfig();
|
||||
const toggle = vi.fn();
|
||||
const setOpen = vi.fn();
|
||||
|
||||
mockShouldLaunchBrowser.mockReturnValue(true);
|
||||
mockOpenBrowserSecurely.mockResolvedValue(undefined);
|
||||
mockDevToolsInstance.start.mockResolvedValue('http://127.0.0.1:25417');
|
||||
mockDevToolsInstance.getPort.mockReturnValue(25417);
|
||||
|
||||
const promise = toggleDevToolsPanel(config, toggle, setOpen);
|
||||
|
||||
await vi.waitFor(() => expect(MockWebSocket.instances.length).toBe(1));
|
||||
MockWebSocket.instances[0].simulateError();
|
||||
|
||||
await promise;
|
||||
|
||||
expect(toggle).toHaveBeenCalledTimes(1);
|
||||
expect(setOpen).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('calls toggle when browser fails to open', async () => {
|
||||
const config = createMockConfig();
|
||||
const toggle = vi.fn();
|
||||
const setOpen = vi.fn();
|
||||
|
||||
mockShouldLaunchBrowser.mockReturnValue(true);
|
||||
mockOpenBrowserSecurely.mockRejectedValue(new Error('no browser'));
|
||||
mockDevToolsInstance.start.mockResolvedValue('http://127.0.0.1:25417');
|
||||
mockDevToolsInstance.getPort.mockReturnValue(25417);
|
||||
|
||||
const promise = toggleDevToolsPanel(config, toggle, setOpen);
|
||||
|
||||
await vi.waitFor(() => expect(MockWebSocket.instances.length).toBe(1));
|
||||
MockWebSocket.instances[0].simulateError();
|
||||
|
||||
await promise;
|
||||
|
||||
expect(toggle).toHaveBeenCalledTimes(1);
|
||||
expect(setOpen).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('calls toggle when shouldLaunchBrowser returns false', async () => {
|
||||
const config = createMockConfig();
|
||||
const toggle = vi.fn();
|
||||
const setOpen = vi.fn();
|
||||
|
||||
mockShouldLaunchBrowser.mockReturnValue(false);
|
||||
mockDevToolsInstance.start.mockResolvedValue('http://127.0.0.1:25417');
|
||||
mockDevToolsInstance.getPort.mockReturnValue(25417);
|
||||
|
||||
const promise = toggleDevToolsPanel(config, toggle, setOpen);
|
||||
|
||||
await vi.waitFor(() => expect(MockWebSocket.instances.length).toBe(1));
|
||||
MockWebSocket.instances[0].simulateError();
|
||||
|
||||
await promise;
|
||||
|
||||
expect(toggle).toHaveBeenCalledTimes(1);
|
||||
expect(setOpen).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('calls setOpen when DevTools server fails to start', async () => {
|
||||
const config = createMockConfig();
|
||||
const toggle = vi.fn();
|
||||
const setOpen = vi.fn();
|
||||
|
||||
mockDevToolsInstance.start.mockRejectedValue(new Error('fail'));
|
||||
|
||||
const promise = toggleDevToolsPanel(config, toggle, setOpen);
|
||||
|
||||
await vi.waitFor(() => expect(MockWebSocket.instances.length).toBe(1));
|
||||
MockWebSocket.instances[0].simulateError();
|
||||
|
||||
await promise;
|
||||
|
||||
expect(toggle).not.toHaveBeenCalled();
|
||||
expect(setOpen).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user