@@ -365,6 +365,29 @@ def test_escape_binding_cancels_completion_menu(
365365 assert event .app .current_buffer .complete_state is None
366366
367367
368+ @pytest .mark .parametrize ('key, config_name' , [(Keys .ControlI , 'tab' ), (Keys .ControlAt , 'control_space' )])
369+ @pytest .mark .parametrize ('completion_active' , [False , True ])
370+ def test_completion_binding_without_configured_behaviors_is_noop (
371+ key : Keys ,
372+ config_name : str ,
373+ completion_active : bool ,
374+ ) -> None :
375+ mycli = DummyMyCli (DummyKeysConfig (behaviors = {config_name : []}))
376+ kb = key_bindings .mycli_bindings (mycli )
377+ complete_state = object () if completion_active else None
378+ buffer = DummyBuffer (text = 'sel' , complete_state = complete_state )
379+ event = make_event (buffer )
380+
381+ binding_handler (kb , key )(event )
382+
383+ assert buffer .complete_state is complete_state
384+ assert buffer .start_completion_calls == []
385+ assert buffer .complete_next_calls == 0
386+ assert buffer .cancel_completion_calls == 0
387+ assert buffer .start_selection_calls == []
388+ assert buffer .inserted_text == []
389+
390+
368391def test_control_space_toolkit_default_starts_selection_for_non_empty_text () -> None :
369392 mycli = DummyMyCli (DummyKeysConfig (behaviors = {'control_space' : ['toolkit_default' ]}))
370393 kb = key_bindings .mycli_bindings (mycli )
@@ -501,6 +524,44 @@ def test_date_and_datetime_bindings_insert_shortcuts(
501524 assert event .app .current_buffer .inserted_text == [expected_text ]
502525
503526
527+ @pytest .mark .parametrize (
528+ ('keys' , 'expected_text' ),
529+ [
530+ ((Keys .ControlO , 'u' ), '1700000000' ),
531+ ((Keys .ControlO , Keys .ControlU ), '1700000000875000' ),
532+ ],
533+ )
534+ def test_unix_timestamp_bindings_insert_numeric_literals (
535+ monkeypatch : pytest .MonkeyPatch ,
536+ keys : tuple [str | Keys , ...],
537+ expected_text : str ,
538+ ) -> None :
539+ mycli = DummyMyCli (DummyKeysConfig (), key_bindings_mode = 'emacs' )
540+ kb = key_bindings .mycli_bindings (mycli )
541+ event = make_event ()
542+ monkeypatch .setattr (key_bindings .key_binding_utils .time , 'time' , lambda : 1700000000.875 )
543+
544+ binding_handler (kb , * keys )(event )
545+
546+ assert event .app .current_buffer .inserted_text == [expected_text ]
547+
548+
549+ @pytest .mark .parametrize ('keys' , [(Keys .ControlO , 'u' ), (Keys .ControlO , Keys .ControlU )])
550+ @pytest .mark .parametrize ('editing_mode, enabled' , [(EditingMode .EMACS , True ), (EditingMode .VI , False )])
551+ def test_unix_timestamp_bindings_are_emacs_only (
552+ monkeypatch : pytest .MonkeyPatch ,
553+ keys : tuple [str | Keys , ...],
554+ editing_mode : EditingMode ,
555+ enabled : bool ,
556+ ) -> None :
557+ mycli = DummyMyCli (DummyKeysConfig ())
558+ kb = key_bindings .mycli_bindings (mycli )
559+ app = DummyApp (current_buffer = DummyBuffer (), editing_mode = editing_mode )
560+ patch_filter_app (monkeypatch , app )
561+
562+ assert binding_filter (kb , * keys )() is enabled
563+
564+
504565def test_control_r_uses_reverse_isearch_mode_when_configured (monkeypatch ) -> None :
505566 mycli = DummyMyCli (DummyKeysConfig (options = {'control_r' : 'reverse_isearch' }), key_bindings_mode = 'emacs' )
506567 kb = key_bindings .mycli_bindings (mycli )
0 commit comments