44import unittest
55from unittest import TestCase
66
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+ )
814from _pyrepl .console import Event
915from _pyrepl .readline import ReadlineAlikeReader , ReadlineConfig
1016
@@ -313,14 +319,12 @@ def test_basic(self):
313319
314320 def test_multiline_edit (self ):
315321 events = itertools .chain (
316- code_to_events ("def f():\n ...\n \n " ),
322+ code_to_events ("def f():\n ...\n \n " ),
317323 [
318324 Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
319325 Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
320326 Event (evt = "key" , data = "up" , raw = bytearray (b"\x1b OA" )),
321327 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" )),
324328 Event (evt = "key" , data = "backspace" , raw = bytearray (b"\x7f " )),
325329 Event (evt = "key" , data = "g" , raw = bytearray (b"g" )),
326330 Event (evt = "key" , data = "down" , raw = bytearray (b"\x1b OB" )),
@@ -331,9 +335,9 @@ def test_multiline_edit(self):
331335 reader = self .prepare_reader (events )
332336
333337 output = multiline_input (reader )
334- self .assertEqual (output , "def f():\n ...\n " )
338+ self .assertEqual (output , "def f():\n ...\n " )
335339 output = multiline_input (reader )
336- self .assertEqual (output , "def g():\n ...\n " )
340+ self .assertEqual (output , "def g():\n ...\n " )
337341
338342 def test_history_navigation_with_up_arrow (self ):
339343 events = itertools .chain (
@@ -537,14 +541,14 @@ def test_paste_mid_newlines_not_in_paste_mode(self):
537541 # fmt: off
538542 code = (
539543 '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 '
543547 )
544548
545549 expected = (
546550 'def f():\n '
547- ' x = y\n '
551+ ' x = y\n '
548552 ' '
549553 )
550554 # fmt: on
@@ -558,19 +562,19 @@ def test_paste_not_in_paste_mode(self):
558562 # fmt: off
559563 input_code = (
560564 '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 '
566570 )
567571
568572 output_code = (
569573 '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 '
572576 ' print(x)\n '
573- ' else:'
577+ ' else:'
574578 )
575579 # fmt: on
576580
@@ -634,6 +638,81 @@ def test_bracketed_paste_single_line(self):
634638 output = multiline_input (reader )
635639 self .assertEqual (output , input_code )
636640
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+
637716
638717if __name__ == "__main__" :
639718 unittest .main ()
0 commit comments