4
4
import unittest
5
5
from unittest import TestCase
6
6
7
- from .support import FakeConsole , handle_all_events , handle_events_narrow_console , multiline_input , code_to_events
7
+ from .support import (
8
+ FakeConsole ,
9
+ handle_all_events ,
10
+ handle_events_narrow_console ,
11
+ multiline_input ,
12
+ code_to_events ,
13
+ )
8
14
from _pyrepl .console import Event
9
15
from _pyrepl .readline import ReadlineAlikeReader , ReadlineConfig
10
16
@@ -313,14 +319,12 @@ def test_basic(self):
313
319
314
320
def test_multiline_edit (self ):
315
321
events = itertools .chain (
316
- code_to_events ("def f():\n ...\n \n " ),
322
+ code_to_events ("def f():\n ...\n \n " ),
317
323
[
318
324
Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
319
325
Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
320
326
Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
321
327
Event (evt = "key" , data = "right" , raw = bytearray (b"\x1b OC" )),
322
- Event (evt = "key" , data = "right" , raw = bytearray (b"\x1b OC" )),
323
- Event (evt = "key" , data = "right" , raw = bytearray (b"\x1b OC" )),
324
328
Event (evt = "key" , data = "backspace" , raw = bytearray (b"\x7f " )),
325
329
Event (evt = "key" , data = "g" , raw = bytearray (b"g" )),
326
330
Event (evt = "key" , data = "down" , raw = bytearray (b"\x1b OB" )),
@@ -331,9 +335,9 @@ def test_multiline_edit(self):
331
335
reader = self .prepare_reader (events )
332
336
333
337
output = multiline_input (reader )
334
- self .assertEqual (output , "def f():\n ...\n " )
338
+ self .assertEqual (output , "def f():\n ...\n " )
335
339
output = multiline_input (reader )
336
- self .assertEqual (output , "def g():\n ...\n " )
340
+ self .assertEqual (output , "def g():\n ...\n " )
337
341
338
342
def test_history_navigation_with_up_arrow (self ):
339
343
events = itertools .chain (
@@ -537,14 +541,14 @@ def test_paste_mid_newlines_not_in_paste_mode(self):
537
541
# fmt: off
538
542
code = (
539
543
'def f():\n '
540
- ' x = y\n '
541
- ' \n '
542
- ' y = z\n \n '
544
+ ' x = y\n '
545
+ ' \n '
546
+ ' y = z\n \n '
543
547
)
544
548
545
549
expected = (
546
550
'def f():\n '
547
- ' x = y\n '
551
+ ' x = y\n '
548
552
' '
549
553
)
550
554
# fmt: on
@@ -558,19 +562,19 @@ def test_paste_not_in_paste_mode(self):
558
562
# fmt: off
559
563
input_code = (
560
564
'def a():\n '
561
- ' for x in range(10):\n '
562
- ' if x%2:\n '
563
- ' print(x)\n '
564
- ' else:\n '
565
- ' pass\n \n '
565
+ ' for x in range(10):\n '
566
+ ' if x%2:\n '
567
+ ' print(x)\n '
568
+ ' else:\n '
569
+ ' pass\n \n '
566
570
)
567
571
568
572
output_code = (
569
573
'def a():\n '
570
- ' for x in range(10):\n '
571
- ' if x%2:\n '
574
+ ' for x in range(10):\n '
575
+ ' if x%2:\n '
572
576
' print(x)\n '
573
- ' else:'
577
+ ' else:'
574
578
)
575
579
# fmt: on
576
580
@@ -634,6 +638,81 @@ def test_bracketed_paste_single_line(self):
634
638
output = multiline_input (reader )
635
639
self .assertEqual (output , input_code )
636
640
641
+ def test_auto_indent_default (self ):
642
+ # fmt: off
643
+ input_code = (
644
+ 'def f():\n '
645
+ 'pass\n \n '
646
+ )
647
+
648
+ output_code = (
649
+ 'def f():\n '
650
+ ' pass\n '
651
+ ' '
652
+ )
653
+ # fmt: on
654
+
655
+ def test_auto_indent_continuation (self ):
656
+ # auto indenting according to previous user indentation
657
+ # fmt: off
658
+ events = itertools .chain (
659
+ code_to_events ("def f():\n " ),
660
+ # add backspace to delete default auto-indent
661
+ [
662
+ Event (evt = "key" , data = "backspace" , raw = bytearray (b"\x7f " )),
663
+ ],
664
+ code_to_events (
665
+ " pass\n "
666
+ "pass\n \n "
667
+ ),
668
+ )
669
+
670
+ output_code = (
671
+ 'def f():\n '
672
+ ' pass\n '
673
+ ' pass\n '
674
+ ' '
675
+ )
676
+
677
+ # fmt: on
678
+
679
+ reader = self .prepare_reader (events )
680
+ output = multiline_input (reader )
681
+ self .assertEqual (output , output_code )
682
+
683
+ def test_auto_indent_prev_block (self ):
684
+ # auto indenting according to indentation in different block
685
+ # fmt: off
686
+ events = itertools .chain (
687
+ code_to_events ("def f():\n " ),
688
+ # add backspace to delete default auto-indent
689
+ [
690
+ Event (evt = "key" , data = "backspace" , raw = bytearray (b"\x7f " )),
691
+ ],
692
+ code_to_events (
693
+ " pass\n "
694
+ "pass\n \n "
695
+ ),
696
+ code_to_events (
697
+ 'def g():\n '
698
+ 'pass\n \n '
699
+ ),
700
+ )
701
+
702
+
703
+ output_code = (
704
+ 'def g():\n '
705
+ ' pass\n '
706
+ ' '
707
+ )
708
+
709
+ # fmt: on
710
+
711
+ reader = self .prepare_reader (events )
712
+ output1 = multiline_input (reader )
713
+ output2 = multiline_input (reader )
714
+ self .assertEqual (output2 , output_code )
715
+
637
716
638
717
if __name__ == "__main__" :
639
718
unittest .main ()
0 commit comments