2121 more_lines ,
2222 multiline_input ,
2323 code_to_events ,
24+ clean_screen
2425)
2526from _pyrepl .console import Event
2627from _pyrepl .readline import ReadlineAlikeReader , ReadlineConfig
@@ -483,13 +484,15 @@ def prepare_reader(self, events):
483484 console = FakeConsole (events )
484485 config = ReadlineConfig (readline_completer = None )
485486 reader = ReadlineAlikeReader (console = console , config = config )
487+ reader .can_colorize = False
486488 return reader
487489
488490 def test_basic (self ):
489491 reader = self .prepare_reader (code_to_events ("1+1\n " ))
490492
491493 output = multiline_input (reader )
492494 self .assertEqual (output , "1+1" )
495+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
493496
494497 def test_multiline_edit (self ):
495498 events = itertools .chain (
@@ -519,8 +522,10 @@ def test_multiline_edit(self):
519522
520523 output = multiline_input (reader )
521524 self .assertEqual (output , "def f():\n ...\n " )
525+ self .assertEqual (clean_screen (reader .screen ), "def f():\n ..." )
522526 output = multiline_input (reader )
523527 self .assertEqual (output , "def g():\n pass\n " )
528+ self .assertEqual (clean_screen (reader .screen ), "def g():\n pass" )
524529
525530 def test_history_navigation_with_up_arrow (self ):
526531 events = itertools .chain (
@@ -539,12 +544,40 @@ def test_history_navigation_with_up_arrow(self):
539544
540545 output = multiline_input (reader )
541546 self .assertEqual (output , "1+1" )
547+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
542548 output = multiline_input (reader )
543549 self .assertEqual (output , "2+2" )
550+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
544551 output = multiline_input (reader )
545552 self .assertEqual (output , "2+2" )
553+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
546554 output = multiline_input (reader )
547555 self .assertEqual (output , "1+1" )
556+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
557+
558+ def test_history_with_multiline_entries (self ):
559+ code = "def foo():\n x = 1\n y = 2\n z = 3\n \n def bar():\n return 42\n \n "
560+ events = list (itertools .chain (
561+ code_to_events (code ),
562+ [
563+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
564+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
565+ Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
566+ Event (evt = "key" , data = "\n " , raw = bytearray (b"\n " )),
567+ Event (evt = "key" , data = "\n " , raw = bytearray (b"\n " )),
568+ ]
569+ ))
570+
571+ reader = self .prepare_reader (events )
572+ output = multiline_input (reader )
573+ output = multiline_input (reader )
574+ output = multiline_input (reader )
575+ self .assertEqual (
576+ clean_screen (reader .screen ),
577+ 'def foo():\n x = 1\n y = 2\n z = 3'
578+ )
579+ self .assertEqual (output , "def foo():\n x = 1\n y = 2\n z = 3\n " )
580+
548581
549582 def test_history_navigation_with_down_arrow (self ):
550583 events = itertools .chain (
@@ -562,6 +595,7 @@ def test_history_navigation_with_down_arrow(self):
562595
563596 output = multiline_input (reader )
564597 self .assertEqual (output , "1+1" )
598+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
565599
566600 def test_history_search (self ):
567601 events = itertools .chain (
@@ -578,18 +612,23 @@ def test_history_search(self):
578612
579613 output = multiline_input (reader )
580614 self .assertEqual (output , "1+1" )
615+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
581616 output = multiline_input (reader )
582617 self .assertEqual (output , "2+2" )
618+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
583619 output = multiline_input (reader )
584620 self .assertEqual (output , "3+3" )
621+ self .assertEqual (clean_screen (reader .screen ), "3+3" )
585622 output = multiline_input (reader )
586623 self .assertEqual (output , "1+1" )
624+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
587625
588626 def test_control_character (self ):
589627 events = code_to_events ("c\x1d \n " )
590628 reader = self .prepare_reader (events )
591629 output = multiline_input (reader )
592630 self .assertEqual (output , "c\x1d " )
631+ self .assertEqual (clean_screen (reader .screen ), "c" )
593632
594633
595634class TestPyReplCompleter (TestCase ):
0 commit comments