@@ -5,6 +5,17 @@ import { useRef, useState } from 'react';
55import { COMMAND , KEY } from '../../constants' ;
66import { time } from '../../utils' ;
77
8+ const { mockExit } = vi . hoisted ( ( ) => ( {
9+ mockExit : vi . fn ( ) ,
10+ } ) ) ;
11+
12+ vi . mock ( 'ink' , async ( ) => ( {
13+ ...( await vi . importActual ( 'ink' ) ) ,
14+ useApp : vi . fn ( ( ) => ( {
15+ exit : mockExit ,
16+ } ) ) ,
17+ } ) ) ;
18+
819vi . mock ( '@inkjs/ui' , ( ) => ( {
920 TextInput : ( {
1021 defaultValue,
@@ -40,6 +51,10 @@ vi.mock('@inkjs/ui', () => ({
4051 return ;
4152 }
4253
54+ if ( key . ctrl ) {
55+ return ;
56+ }
57+
4358 if ( key . upArrow || key . downArrow || key . leftArrow || key . rightArrow ) {
4459 return ;
4560 }
@@ -177,6 +192,10 @@ vi.mock('./FileSuggestions', () => ({
177192import { Input } from './Input' ;
178193
179194describe ( 'Input' , ( ) => {
195+ beforeEach ( ( ) => {
196+ mockExit . mockReset ( ) ;
197+ } ) ;
198+
180199 it ( 'renders input prompt' , ( ) => {
181200 const { lastFrame } = render ( < Input onSubmit = { vi . fn ( ) } /> ) ;
182201 expect ( lastFrame ( ) ) . toContain ( '>' ) ;
@@ -387,6 +406,26 @@ describe('Input', () => {
387406 expect ( lastFrame ( ) ) . not . toContain ( 'src/components/Chat/Input.tsx' ) ;
388407 } ) ;
389408
409+ it ( 'clears input on Ctrl+C when input is non-empty' , async ( ) => {
410+ const { lastFrame, stdin } = render ( < Input onSubmit = { vi . fn ( ) } /> ) ;
411+ stdin . write ( 'hi' ) ;
412+ await time . tick ( ) ;
413+ expect ( lastFrame ( ) ) . toContain ( '[value:hi]' ) ;
414+ stdin . write ( KEY . CTRL_C ) ;
415+ await time . tick ( ) ;
416+ expect ( lastFrame ( ) ) . not . toContain ( '[value:hi]' ) ;
417+ expect ( lastFrame ( ) ) . toContain (
418+ '[placeholder:Ask anything... (/ commands, @ files)]' ,
419+ ) ;
420+ } ) ;
421+
422+ it ( 'calls exit on Ctrl+C when input is empty' , async ( ) => {
423+ const { stdin } = render ( < Input onSubmit = { vi . fn ( ) } /> ) ;
424+ stdin . write ( KEY . CTRL_C ) ;
425+ await time . tick ( ) ;
426+ expect ( mockExit ) . toHaveBeenCalledOnce ( ) ;
427+ } ) ;
428+
390429 it ( 'does not accept input when disabled' , async ( ) => {
391430 const onSubmit = vi . fn ( ) ;
392431 const { lastFrame, stdin } = render (
0 commit comments