@@ -1058,6 +1058,85 @@ describe("ChatTextArea", () => {
10581058 } )
10591059 } )
10601060
1061+ describe ( "keyboard handling with requireCtrlEnterToSend" , ( ) => {
1062+ beforeEach ( ( ) => {
1063+ ; ( useExtensionState as ReturnType < typeof vi . fn > ) . mockReturnValue ( {
1064+ filePaths : [ ] ,
1065+ openedTabs : [ ] ,
1066+ apiConfiguration : {
1067+ apiProvider : "anthropic" ,
1068+ } ,
1069+ taskHistory : [ ] ,
1070+ cwd : "/test/workspace" ,
1071+ requireCtrlEnterToSend : true ,
1072+ } )
1073+ } )
1074+
1075+ it ( "should send message with Ctrl+Enter when requireCtrlEnterToSend is enabled" , ( ) => {
1076+ const onSend = vi . fn ( )
1077+ const { container } = render ( < ChatTextArea { ...defaultProps } onSend = { onSend } inputValue = "Test message" /> )
1078+
1079+ const textarea = container . querySelector ( "textarea" ) !
1080+ fireEvent . keyDown ( textarea , { key : "Enter" , ctrlKey : true } )
1081+
1082+ expect ( onSend ) . toHaveBeenCalled ( )
1083+ } )
1084+
1085+ it ( "should send message with Cmd+Enter when requireCtrlEnterToSend is enabled" , ( ) => {
1086+ const onSend = vi . fn ( )
1087+ const { container } = render ( < ChatTextArea { ...defaultProps } onSend = { onSend } inputValue = "Test message" /> )
1088+
1089+ const textarea = container . querySelector ( "textarea" ) !
1090+ fireEvent . keyDown ( textarea , { key : "Enter" , metaKey : true } )
1091+
1092+ expect ( onSend ) . toHaveBeenCalled ( )
1093+ } )
1094+
1095+ it ( "should not send message with regular Enter when requireCtrlEnterToSend is enabled" , ( ) => {
1096+ const onSend = vi . fn ( )
1097+ const { container } = render ( < ChatTextArea { ...defaultProps } onSend = { onSend } inputValue = "Test message" /> )
1098+
1099+ const textarea = container . querySelector ( "textarea" ) !
1100+ fireEvent . keyDown ( textarea , { key : "Enter" } )
1101+
1102+ expect ( onSend ) . not . toHaveBeenCalled ( )
1103+ } )
1104+
1105+ it ( "should insert newline with Shift+Enter when requireCtrlEnterToSend is enabled" , ( ) => {
1106+ const setInputValue = vi . fn ( )
1107+ const { container } = render (
1108+ < ChatTextArea { ...defaultProps } setInputValue = { setInputValue } inputValue = "Test message" /> ,
1109+ )
1110+
1111+ const textarea = container . querySelector ( "textarea" ) !
1112+ fireEvent . keyDown ( textarea , { key : "Enter" , shiftKey : true } )
1113+
1114+ // Should not call onSend, allowing default behavior (insert newline)
1115+ expect ( setInputValue ) . not . toHaveBeenCalled ( )
1116+ } )
1117+
1118+ it ( "should send message with regular Enter when requireCtrlEnterToSend is disabled" , ( ) => {
1119+ ; ( useExtensionState as ReturnType < typeof vi . fn > ) . mockReturnValue ( {
1120+ filePaths : [ ] ,
1121+ openedTabs : [ ] ,
1122+ apiConfiguration : {
1123+ apiProvider : "anthropic" ,
1124+ } ,
1125+ taskHistory : [ ] ,
1126+ cwd : "/test/workspace" ,
1127+ requireCtrlEnterToSend : false ,
1128+ } )
1129+
1130+ const onSend = vi . fn ( )
1131+ const { container } = render ( < ChatTextArea { ...defaultProps } onSend = { onSend } inputValue = "Test message" /> )
1132+
1133+ const textarea = container . querySelector ( "textarea" ) !
1134+ fireEvent . keyDown ( textarea , { key : "Enter" } )
1135+
1136+ expect ( onSend ) . toHaveBeenCalled ( )
1137+ } )
1138+ } )
1139+
10611140 describe ( "send button visibility" , ( ) => {
10621141 it ( "should show send button when there are images but no text" , ( ) => {
10631142 const { container } = render (
0 commit comments