@@ -601,6 +601,46 @@ def test_history_navigation_with_up_arrow(self):
601601 self .assertEqual (output , "1+1" )
602602 self .assertEqual (clean_screen (reader .screen ), "1+1" )
603603
604+ def test_history_navigation_with_up_arrow_and_partial_text (self ):
605+ events = itertools .chain (
606+ code_to_events ("spam = 1\n ham = 2\n eggs = 3\n sp" ),
607+ [
608+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
609+ Event (evt = "key" , data = "\n " , raw = bytearray (b"\n " )),
610+ ],
611+ )
612+
613+ reader = self .prepare_reader (events )
614+
615+ output = multiline_input (reader )
616+ self .assertEqual (output , "spam = 1" )
617+
618+ def test_history_navigation_with_up_arrow_and_partial_text_with_similar_entries (self ):
619+ events = itertools .chain (
620+ code_to_events ("a=111\n a=11\n a=1\n a=" ),
621+ [
622+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
623+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
624+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
625+ Event (evt = "key" , data = "\n " , raw = bytearray (b"\n " )),
626+ ],
627+ )
628+
629+ reader = self .prepare_reader (events )
630+ print ()
631+ output = multiline_input (reader )
632+ self .assertEqual (output , "a=111" )
633+ self .assertEqual (clean_screen (reader .screen ), "a=111" )
634+ output = multiline_input (reader )
635+ self .assertEqual (output , "a=11" )
636+ self .assertEqual (clean_screen (reader .screen ), "a=11" )
637+ output = multiline_input (reader )
638+ self .assertEqual (output , "a=1" )
639+ self .assertEqual (clean_screen (reader .screen ), "a=1" )
640+ output = multiline_input (reader )
641+ self .assertEqual (output , "a=111" )
642+ self .assertEqual (clean_screen (reader .screen ), "a=111" )
643+
604644 def test_history_with_multiline_entries (self ):
605645 code = "def foo():\n x = 1\n y = 2\n z = 3\n \n def bar():\n return 42\n \n "
606646 events = list (itertools .chain (
0 commit comments