1- import { act , fireEvent , render , screen } from "@testing-library/react" ;
1+ import { act , fireEvent , render , screen , within } from "@testing-library/react" ;
22import { afterEach , beforeEach , describe , expect , it , vi } from "vitest" ;
33import { MobileTerminalInputBar } from "./mobile-terminal-input-bar" ;
44
55const labels = {
6+ paste : "Paste" ,
7+ upload : "Upload" ,
68 shortcuts : "Terminal shortcut keys" ,
79 ctrl : "Ctrl" ,
810 ctrlArmed : "Ctrl armed" ,
@@ -37,6 +39,8 @@ describe("MobileTerminalInputBar", () => {
3739 onCtrlTap = { vi . fn ( ) }
3840 onCtrlLongPress = { vi . fn ( ) }
3941 onShiftTap = { vi . fn ( ) }
42+ onPaste = { vi . fn ( ) }
43+ onUpload = { vi . fn ( ) }
4044 />
4145 ) ;
4246
@@ -67,6 +71,8 @@ describe("MobileTerminalInputBar", () => {
6771 onCtrlTap = { vi . fn ( ) }
6872 onCtrlLongPress = { vi . fn ( ) }
6973 onShiftTap = { vi . fn ( ) }
74+ onPaste = { vi . fn ( ) }
75+ onUpload = { vi . fn ( ) }
7076 />
7177 ) ;
7278
@@ -84,6 +90,8 @@ describe("MobileTerminalInputBar", () => {
8490 const onKeyPress = vi . fn ( ) ;
8591 const onCtrlTap = vi . fn ( ) ;
8692 const onShiftTap = vi . fn ( ) ;
93+ const onPaste = vi . fn ( ) ;
94+ const onUpload = vi . fn ( ) ;
8795
8896 render (
8997 < MobileTerminalInputBar
@@ -94,6 +102,8 @@ describe("MobileTerminalInputBar", () => {
94102 onCtrlTap = { onCtrlTap }
95103 onCtrlLongPress = { vi . fn ( ) }
96104 onShiftTap = { onShiftTap }
105+ onPaste = { onPaste }
106+ onUpload = { onUpload }
97107 />
98108 ) ;
99109
@@ -109,6 +119,41 @@ describe("MobileTerminalInputBar", () => {
109119 expect ( onCtrlTap ) . toHaveBeenCalledTimes ( 1 ) ;
110120 fireEvent . click ( screen . getByRole ( "button" , { name : labels . shift } ) ) ;
111121 expect ( onShiftTap ) . toHaveBeenCalledTimes ( 1 ) ;
122+
123+ fireEvent . click ( screen . getByRole ( "button" , { name : labels . paste } ) ) ;
124+ fireEvent . click ( screen . getByRole ( "button" , { name : labels . upload } ) ) ;
125+
126+ expect ( onPaste ) . toHaveBeenCalledTimes ( 1 ) ;
127+ expect ( onUpload ) . toHaveBeenCalledTimes ( 1 ) ;
128+ } ) ;
129+
130+ it ( "keeps mobile actions disabled with the rest of the bar" , ( ) => {
131+ const onPaste = vi . fn ( ) ;
132+ const onUpload = vi . fn ( ) ;
133+
134+ render (
135+ < MobileTerminalInputBar
136+ ctrlMode = "off"
137+ shiftArmed = { false }
138+ disabled
139+ labels = { labels }
140+ onKeyPress = { vi . fn ( ) }
141+ onCtrlTap = { vi . fn ( ) }
142+ onCtrlLongPress = { vi . fn ( ) }
143+ onShiftTap = { vi . fn ( ) }
144+ onPaste = { onPaste }
145+ onUpload = { onUpload }
146+ />
147+ ) ;
148+
149+ expect ( screen . getByRole ( "button" , { name : labels . paste } ) ) . toBeDisabled ( ) ;
150+ expect ( screen . getByRole ( "button" , { name : labels . upload } ) ) . toBeDisabled ( ) ;
151+
152+ fireEvent . click ( screen . getByRole ( "button" , { name : labels . paste } ) ) ;
153+ fireEvent . click ( screen . getByRole ( "button" , { name : labels . upload } ) ) ;
154+
155+ expect ( onPaste ) . not . toHaveBeenCalled ( ) ;
156+ expect ( onUpload ) . not . toHaveBeenCalled ( ) ;
112157 } ) ;
113158
114159 it ( "locks ctrl on long press and switches ctrl labels by mode" , ( ) => {
@@ -124,6 +169,8 @@ describe("MobileTerminalInputBar", () => {
124169 onCtrlTap = { onCtrlTap }
125170 onCtrlLongPress = { onCtrlLongPress }
126171 onShiftTap = { vi . fn ( ) }
172+ onPaste = { vi . fn ( ) }
173+ onUpload = { vi . fn ( ) }
127174 />
128175 ) ;
129176
@@ -146,6 +193,8 @@ describe("MobileTerminalInputBar", () => {
146193 onCtrlTap = { onCtrlTap }
147194 onCtrlLongPress = { onCtrlLongPress }
148195 onShiftTap = { vi . fn ( ) }
196+ onPaste = { vi . fn ( ) }
197+ onUpload = { vi . fn ( ) }
149198 />
150199 ) ;
151200
@@ -167,6 +216,8 @@ describe("MobileTerminalInputBar", () => {
167216 onCtrlTap = { vi . fn ( ) }
168217 onCtrlLongPress = { onCtrlLongPress }
169218 onShiftTap = { vi . fn ( ) }
219+ onPaste = { vi . fn ( ) }
220+ onUpload = { vi . fn ( ) }
170221 />
171222 ) ;
172223
@@ -182,6 +233,8 @@ describe("MobileTerminalInputBar", () => {
182233 onCtrlTap = { vi . fn ( ) }
183234 onCtrlLongPress = { onCtrlLongPress }
184235 onShiftTap = { vi . fn ( ) }
236+ onPaste = { vi . fn ( ) }
237+ onUpload = { vi . fn ( ) }
185238 />
186239 ) ;
187240
@@ -205,6 +258,8 @@ describe("MobileTerminalInputBar", () => {
205258 onCtrlTap = { onCtrlTap }
206259 onCtrlLongPress = { onCtrlLongPress }
207260 onShiftTap = { vi . fn ( ) }
261+ onPaste = { vi . fn ( ) }
262+ onUpload = { vi . fn ( ) }
208263 />
209264 ) ;
210265
@@ -234,6 +289,8 @@ describe("MobileTerminalInputBar", () => {
234289 onCtrlTap = { vi . fn ( ) }
235290 onCtrlLongPress = { vi . fn ( ) }
236291 onShiftTap = { vi . fn ( ) }
292+ onPaste = { vi . fn ( ) }
293+ onUpload = { vi . fn ( ) }
237294 />
238295 ) ;
239296
@@ -252,6 +309,8 @@ describe("MobileTerminalInputBar", () => {
252309 onCtrlTap = { vi . fn ( ) }
253310 onCtrlLongPress = { vi . fn ( ) }
254311 onShiftTap = { vi . fn ( ) }
312+ onPaste = { vi . fn ( ) }
313+ onUpload = { vi . fn ( ) }
255314 />
256315 ) ;
257316
@@ -280,6 +339,8 @@ describe("MobileTerminalInputBar", () => {
280339 onCtrlTap = { vi . fn ( ) }
281340 onCtrlLongPress = { vi . fn ( ) }
282341 onShiftTap = { onShiftTap }
342+ onPaste = { vi . fn ( ) }
343+ onUpload = { vi . fn ( ) }
283344 />
284345 ) ;
285346
@@ -310,6 +371,8 @@ describe("MobileTerminalInputBar", () => {
310371 onCtrlTap = { onCtrlTap }
311372 onCtrlLongPress = { onCtrlLongPress }
312373 onShiftTap = { vi . fn ( ) }
374+ onPaste = { vi . fn ( ) }
375+ onUpload = { vi . fn ( ) }
313376 />
314377 ) ;
315378
@@ -345,6 +408,8 @@ describe("MobileTerminalInputBar", () => {
345408 onCtrlTap = { vi . fn ( ) }
346409 onCtrlLongPress = { vi . fn ( ) }
347410 onShiftTap = { vi . fn ( ) }
411+ onPaste = { vi . fn ( ) }
412+ onUpload = { vi . fn ( ) }
348413 />
349414 ) ;
350415
@@ -369,6 +434,8 @@ describe("MobileTerminalInputBar", () => {
369434 onCtrlTap = { vi . fn ( ) }
370435 onCtrlLongPress = { vi . fn ( ) }
371436 onShiftTap = { vi . fn ( ) }
437+ onPaste = { vi . fn ( ) }
438+ onUpload = { vi . fn ( ) }
372439 />
373440 ) ;
374441
@@ -396,6 +463,8 @@ describe("MobileTerminalInputBar", () => {
396463 onCtrlTap = { onCtrlTap }
397464 onCtrlLongPress = { onCtrlLongPress }
398465 onShiftTap = { onShiftTap }
466+ onPaste = { vi . fn ( ) }
467+ onUpload = { vi . fn ( ) }
399468 />
400469 ) ;
401470
@@ -430,6 +499,8 @@ describe("MobileTerminalInputBar", () => {
430499 onCtrlTap = { vi . fn ( ) }
431500 onCtrlLongPress = { vi . fn ( ) }
432501 onShiftTap = { vi . fn ( ) }
502+ onPaste = { vi . fn ( ) }
503+ onUpload = { vi . fn ( ) }
433504 />
434505 ) ;
435506
@@ -448,10 +519,12 @@ describe("MobileTerminalInputBar", () => {
448519 onCtrlTap = { vi . fn ( ) }
449520 onCtrlLongPress = { vi . fn ( ) }
450521 onShiftTap = { vi . fn ( ) }
522+ onPaste = { vi . fn ( ) }
523+ onUpload = { vi . fn ( ) }
451524 />
452525 ) ;
453526
454- const buttons = screen
527+ const buttons = within ( screen . getByRole ( "group" , { name : labels . shortcuts } ) )
455528 . getAllByRole ( "button" )
456529 . map ( ( button ) => button . getAttribute ( "aria-label" ) ) ;
457530
0 commit comments