21
21
more_lines ,
22
22
multiline_input ,
23
23
code_to_events ,
24
+ clean_screen
24
25
)
25
26
from _pyrepl .console import Event
26
27
from _pyrepl .readline import ReadlineAlikeReader , ReadlineConfig
@@ -483,13 +484,15 @@ def prepare_reader(self, events):
483
484
console = FakeConsole (events )
484
485
config = ReadlineConfig (readline_completer = None )
485
486
reader = ReadlineAlikeReader (console = console , config = config )
487
+ reader .can_colorize = False
486
488
return reader
487
489
488
490
def test_basic (self ):
489
491
reader = self .prepare_reader (code_to_events ("1+1\n " ))
490
492
491
493
output = multiline_input (reader )
492
494
self .assertEqual (output , "1+1" )
495
+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
493
496
494
497
def test_multiline_edit (self ):
495
498
events = itertools .chain (
@@ -519,8 +522,10 @@ def test_multiline_edit(self):
519
522
520
523
output = multiline_input (reader )
521
524
self .assertEqual (output , "def f():\n ...\n " )
525
+ self .assertEqual (clean_screen (reader .screen ), "def f():\n ..." )
522
526
output = multiline_input (reader )
523
527
self .assertEqual (output , "def g():\n pass\n " )
528
+ self .assertEqual (clean_screen (reader .screen ), "def g():\n pass" )
524
529
525
530
def test_history_navigation_with_up_arrow (self ):
526
531
events = itertools .chain (
@@ -539,12 +544,40 @@ def test_history_navigation_with_up_arrow(self):
539
544
540
545
output = multiline_input (reader )
541
546
self .assertEqual (output , "1+1" )
547
+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
542
548
output = multiline_input (reader )
543
549
self .assertEqual (output , "2+2" )
550
+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
544
551
output = multiline_input (reader )
545
552
self .assertEqual (output , "2+2" )
553
+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
546
554
output = multiline_input (reader )
547
555
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
+
548
581
549
582
def test_history_navigation_with_down_arrow (self ):
550
583
events = itertools .chain (
@@ -562,6 +595,7 @@ def test_history_navigation_with_down_arrow(self):
562
595
563
596
output = multiline_input (reader )
564
597
self .assertEqual (output , "1+1" )
598
+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
565
599
566
600
def test_history_search (self ):
567
601
events = itertools .chain (
@@ -578,18 +612,23 @@ def test_history_search(self):
578
612
579
613
output = multiline_input (reader )
580
614
self .assertEqual (output , "1+1" )
615
+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
581
616
output = multiline_input (reader )
582
617
self .assertEqual (output , "2+2" )
618
+ self .assertEqual (clean_screen (reader .screen ), "2+2" )
583
619
output = multiline_input (reader )
584
620
self .assertEqual (output , "3+3" )
621
+ self .assertEqual (clean_screen (reader .screen ), "3+3" )
585
622
output = multiline_input (reader )
586
623
self .assertEqual (output , "1+1" )
624
+ self .assertEqual (clean_screen (reader .screen ), "1+1" )
587
625
588
626
def test_control_character (self ):
589
627
events = code_to_events ("c\x1d \n " )
590
628
reader = self .prepare_reader (events )
591
629
output = multiline_input (reader )
592
630
self .assertEqual (output , "c\x1d " )
631
+ self .assertEqual (clean_screen (reader .screen ), "c" )
593
632
594
633
595
634
class TestPyReplCompleter (TestCase ):
0 commit comments