@@ -361,3 +361,55 @@ async def test_movement_actions_with_select():
361361 input .action_cursor_right ()
362362 input .action_cursor_left_word (select = True )
363363 assert input .selection == (len (input .value ), 18 )
364+
365+
366+ async def test_replace_selection ():
367+ app = MaskedInputApp (
368+ template = "NNNNN-NNNNN-NNNNN-NNNNN;_" ,
369+ value = "ABCDE-FGHIJ-KLMNO-PQRST" ,
370+ select_on_focus = False ,
371+ )
372+ async with app .run_test () as pilot :
373+ input = app .query_one (MaskedInput )
374+
375+ input .cursor_position = 0
376+ input .action_cursor_right (select = True )
377+ await pilot .press ("x" )
378+ assert input .value == "xBCDE-FGHIJ-KLMNO-PQRST"
379+ assert input .selection .is_empty
380+ assert input .cursor_position == 1
381+
382+ input .cursor_position = 3
383+ input .action_cursor_left (select = True )
384+ await pilot .press ("x" )
385+ assert input .value == "xBxDE-FGHIJ-KLMNO-PQRST"
386+ assert input .selection .is_empty
387+ assert input .cursor_position == 3
388+
389+ input .cursor_position = 6
390+ input .action_cursor_left (select = True )
391+ await pilot .press ("x" )
392+ assert input .value == "xBxDx-FGHIJ-KLMNO-PQRST"
393+ assert input .selection .is_empty
394+ assert input .cursor_position == 6
395+
396+ input .cursor_position = 9
397+ input .action_cursor_left_word (select = True )
398+ await pilot .press ("x" )
399+ assert input .value == "xBxDx-x IJ-KLMNO-PQRST"
400+ assert input .selection .is_empty
401+ assert input .cursor_position == 7
402+
403+ input .cursor_position = 15
404+ input .action_cursor_right_word (select = True )
405+ await pilot .press ("x" )
406+ assert input .value == "xBxDx-x IJ-KLMx -PQRST"
407+ assert input .selection .is_empty
408+ assert input .cursor_position == 16
409+
410+ input .cursor_position = 9
411+ input .action_home (select = True )
412+ await pilot .press ("a" )
413+ assert input .value == "a - IJ-KLMx -PQRST"
414+ assert input .selection .is_empty
415+ assert input .cursor_position == 1
0 commit comments