@@ -296,63 +296,67 @@ test("keeps a keyboard-selected file when session results arrive later", async (
296296 expect ( warnings ) . toEqual ( [ ] )
297297} )
298298
299- test ( "navigation replaces commands without retaining disposed owners" , async ( { page } ) => {
300- const warnings = captureConsoleWarnings ( page )
301- const palette = await openCommandPalette ( page , true )
302- await palette . input . press ( "Escape" )
303- await expect ( palette . dialog ) . toHaveCount ( 0 )
304- await page
305- . getByRole ( "region" , { name : "Recent sessions" } )
306- . getByRole ( "button" , { name : / P a l e t t e f i x t u r e s e s s i o n / } )
307- . click ( )
308- const editor = page . locator ( '[data-component="composer-editor"]' )
309- await expect ( editor ) . toBeEditable ( )
310- await page . keyboard . press ( "ControlOrMeta+t" )
311- await expect ( page ) . toHaveURL ( / \/ n e w - s e s s i o n \? / )
312- await expect ( editor ) . toBeEditable ( )
313- await editor . blur ( )
314- await page . keyboard . press ( "Control+l" )
315- await expect ( editor ) . toBeFocused ( )
316- await page . keyboard . press ( "ControlOrMeta+Shift+P" )
317- const dialog = page . getByRole ( "dialog" )
318- await expect ( dialog . getByRole ( "combobox" ) ) . toBeFocused ( )
319- await expect ( dialog . getByRole ( "combobox" ) ) . toHaveAttribute ( "placeholder" , "Search files, commands, and sessions" )
320- await dialog . getByRole ( "combobox" ) . fill ( "copy session" )
321- await expect ( dialog . getByRole ( "option" , { name : "Copy Session ID" , exact : true } ) ) . toHaveCount ( 0 )
322- await dialog . getByRole ( "combobox" ) . press ( "Escape" )
323- await expect ( dialog ) . toHaveCount ( 0 )
324- const tabs = page . locator ( "[data-titlebar-tab-link]" )
325- await tabs . filter ( { hasText : paletteSession . title } ) . click ( )
326- await expect ( page . getByRole ( "heading" , { name : paletteSession . title , exact : true } ) ) . toBeVisible ( )
327-
328- for ( const count of [ 3 , 4 ] ) {
329- await page . getByRole ( "button" , { name : "New session" , exact : true } ) . click ( )
330- await expect ( tabs ) . toHaveCount ( count )
299+ test . describe ( "touch" , ( ) => {
300+ test . use ( { hasTouch : true , isMobile : true } )
301+
302+ test ( "navigation replaces commands without retaining disposed owners" , async ( { page } ) => {
303+ const warnings = captureConsoleWarnings ( page )
304+ const palette = await openCommandPalette ( page , true )
305+ await palette . input . press ( "Escape" )
306+ await expect ( palette . dialog ) . toHaveCount ( 0 )
307+ await page
308+ . getByRole ( "region" , { name : "Recent sessions" } )
309+ . getByRole ( "button" , { name : / P a l e t t e f i x t u r e s e s s i o n / } )
310+ . click ( )
311+ const editor = page . locator ( '[data-component="composer-editor"]' )
331312 await expect ( editor ) . toBeEditable ( )
332- }
313+ await page . keyboard . press ( "ControlOrMeta+t" )
314+ await expect ( page ) . toHaveURL ( / \/ n e w - s e s s i o n \? / )
315+ await expect ( editor ) . toBeEditable ( )
316+ await editor . blur ( )
317+ await page . keyboard . press ( "Control+l" )
318+ await expect ( editor ) . toBeFocused ( )
319+ await page . keyboard . press ( "ControlOrMeta+Shift+P" )
320+ const dialog = page . getByRole ( "dialog" )
321+ await expect ( dialog . getByRole ( "combobox" ) ) . toBeFocused ( )
322+ await expect ( dialog . getByRole ( "combobox" ) ) . toHaveAttribute ( "placeholder" , "Search files, commands, and sessions" )
323+ await dialog . getByRole ( "combobox" ) . fill ( "copy session" )
324+ await expect ( dialog . getByRole ( "option" , { name : "Copy Session ID" , exact : true } ) ) . toHaveCount ( 0 )
325+ await dialog . getByRole ( "combobox" ) . press ( "Escape" )
326+ await expect ( dialog ) . toHaveCount ( 0 )
327+ const tabs = page . locator ( "[data-titlebar-tab-link]" )
328+ await tabs . filter ( { hasText : paletteSession . title } ) . click ( )
329+ await expect ( page . getByRole ( "heading" , { name : paletteSession . title , exact : true } ) ) . toBeVisible ( )
330+
331+ for ( const count of [ 3 , 4 ] ) {
332+ await page . getByRole ( "button" , { name : "New session" , exact : true } ) . click ( )
333+ await expect ( tabs ) . toHaveCount ( count )
334+ await expect ( editor ) . toBeEditable ( )
335+ }
333336
334- await page . setViewportSize ( { width : 600 , height : 800 } )
335- await page . locator ( '[data-slot="mobile-tabs-trigger"]' ) . click ( )
336- await expect ( page . locator ( '[data-slot="mobile-tabs-drawer"] [data-titlebar-tab-link]' ) ) . toHaveCount ( 4 )
337- await page . setViewportSize ( { width : 1280 , height : 800 } )
338- await expect ( page . locator ( '[data-slot="titlebar-tabs"] [data-titlebar-tab-link]' ) ) . toHaveCount ( 4 )
339- const active = new URL ( page . url ( ) )
340- const closing = page . locator ( `[data-titlebar-tab-link][href="${ active . pathname } ${ active . search } "]` )
341- await expect ( closing ) . toHaveCount ( 1 )
342- await page . keyboard . press ( "ControlOrMeta+w" )
343- await expect ( tabs ) . toHaveCount ( 3 )
344- await expect ( closing ) . toHaveCount ( 0 )
345- await expect ( tabs . filter ( { hasText : paletteSession . title } ) ) . toHaveCount ( 1 )
346- await tabs . filter ( { hasText : paletteSession . title } ) . click ( )
347- await expect ( page . getByRole ( "heading" , { name : paletteSession . title , exact : true } ) ) . toBeVisible ( )
348- await page . keyboard . press ( "ControlOrMeta+Shift+P" )
349- await expect ( dialog . getByRole ( "combobox" ) ) . toBeFocused ( )
350- await dialog . getByRole ( "combobox" ) . fill ( "copy session" )
351- await expect ( dialog . getByRole ( "option" , { name : "Copy Session ID" , exact : true } ) ) . toHaveAttribute (
352- "aria-selected" ,
353- "true" ,
354- )
355- expect ( warnings ) . toEqual ( [ ] )
337+ await page . setViewportSize ( { width : 600 , height : 800 } )
338+ await page . locator ( '[data-slot="mobile-tabs-trigger"]' ) . click ( )
339+ await expect ( page . locator ( '[data-slot="mobile-tabs-drawer"] [data-titlebar-tab-link]' ) ) . toHaveCount ( 4 )
340+ await page . setViewportSize ( { width : 1280 , height : 800 } )
341+ await expect ( page . locator ( '[data-slot="titlebar-tabs"] [data-titlebar-tab-link]' ) ) . toHaveCount ( 4 )
342+ const active = new URL ( page . url ( ) )
343+ const closing = page . locator ( `[data-titlebar-tab-link][href="${ active . pathname } ${ active . search } "]` )
344+ await expect ( closing ) . toHaveCount ( 1 )
345+ await page . keyboard . press ( "ControlOrMeta+w" )
346+ await expect ( tabs ) . toHaveCount ( 3 )
347+ await expect ( closing ) . toHaveCount ( 0 )
348+ await expect ( tabs . filter ( { hasText : paletteSession . title } ) ) . toHaveCount ( 1 )
349+ await tabs . filter ( { hasText : paletteSession . title } ) . click ( )
350+ await expect ( page . getByRole ( "heading" , { name : paletteSession . title , exact : true } ) ) . toBeVisible ( )
351+ await page . keyboard . press ( "ControlOrMeta+Shift+P" )
352+ await expect ( dialog . getByRole ( "combobox" ) ) . toBeFocused ( )
353+ await dialog . getByRole ( "combobox" ) . fill ( "copy session" )
354+ await expect ( dialog . getByRole ( "option" , { name : "Copy Session ID" , exact : true } ) ) . toHaveAttribute (
355+ "aria-selected" ,
356+ "true" ,
357+ )
358+ expect ( warnings ) . toEqual ( [ ] )
359+ } )
356360} )
357361
358362test ( "keeps matching session and file results steady across keystrokes while searches are pending" , async ( {
0 commit comments