Download packages/cli/src/ui/components/BubblingRegression.test.tsx from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 1.95 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/components/BubblingRegression.test.tsx
- Command line
-
hf download hf://SaylorTwift/gemini-cli/packages/cli/src/ui/components/BubblingRegression.test.tsx
-
curl -L -o BubblingRegression.test.tsx https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/components/BubblingRegression.test.tsx
1.95 kB
| /** | |
| * @license | |
| * Copyright 2026 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import { describe, it, expect, vi, afterEach } from 'vitest'; | |
| import { act } from 'react'; | |
| import { renderWithProviders } from '../../test-utils/render.js'; | |
| import { waitFor } from '../../test-utils/async.js'; | |
| import { AskUserDialog } from './AskUserDialog.js'; | |
| import { QuestionType, type Question } from '@google/gemini-cli-core'; | |
| describe('Key Bubbling Regression', () => { | |
| afterEach(() => { | |
| vi.restoreAllMocks(); | |
| }); | |
| const choiceQuestion: Question[] = [ | |
| { | |
| question: 'Choice Q?', | |
| header: 'Choice', | |
| type: QuestionType.CHOICE, | |
| options: [ | |
| { label: 'Option 1', description: '' }, | |
| { label: 'Option 2', description: '' }, | |
| ], | |
| multiSelect: false, | |
| }, | |
| ]; | |
| it('does not navigate when pressing "j" or "k" in a focused text input', async () => { | |
| const { stdin, lastFrame } = await renderWithProviders( | |
| <AskUserDialog | |
| questions={choiceQuestion} | |
| onSubmit={vi.fn()} | |
| onCancel={vi.fn()} | |
| width={120} | |
| availableHeight={20} | |
| />, | |
| { width: 120 }, | |
| ); | |
| // 1. Move down to "Enter a custom value" (3rd item) | |
| act(() => { | |
| stdin.write('\x1b[B'); // Down arrow to Option 2 | |
| }); | |
| act(() => { | |
| stdin.write('\x1b[B'); // Down arrow to Custom | |
| }); | |
| await waitFor(() => { | |
| expect(lastFrame()).toContain('Enter a custom value'); | |
| }); | |
| // 2. Type "j" | |
| act(() => { | |
| stdin.write('j'); | |
| }); | |
| await waitFor(() => { | |
| expect(lastFrame()).toContain('j'); | |
| // Verify we are still focusing the custom option (3rd item in list) | |
| expect(lastFrame()).toMatch(/● 3\.\s+j/); | |
| }); | |
| // 3. Type "k" | |
| act(() => { | |
| stdin.write('k'); | |
| }); | |
| await waitFor(() => { | |
| expect(lastFrame()).toContain('jk'); | |
| expect(lastFrame()).toMatch(/● 3\.\s+jk/); | |
| }); | |
| }); | |
| }); | |