8000 gh-119205: Add unittest · python/cpython@f9ee809 · GitHub
[go: up one dir, main page]

Skip to content

Commit f9ee809

Browse files
committed
gh-119205: Add unittest
1 parent 852cd53 commit f9ee809

File tree

1 file changed

+37
-14
lines changed

1 file changed

+37
-14
lines changed

Lib/test/test_pyrepl.py

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import itertools
2+
3+
import io
24
import os
35
import rlcompleter
46
import sys
@@ -20,7 +22,7 @@
2022
readline = import_module("readline")
2123

2224
from _pyrepl.console import Console, Event
23-
from _pyrepl.readline import ReadlineAlikeReader, ReadlineConfig
25+
from _pyrepl.readline import ReadlineAlikeReader, ReadlineConfig, _ReadlineWrapper
2426
from _pyrepl.simple_interact import _strip_final_indent
2527
from _pyrepl.unix_eventqueue import EventQueue
2628
from _pyrepl.simple_interact import InteractiveColoredConsole
@@ -276,7 +278,7 @@ def test_cursor_position_double_width_characters_move_up(self):
276278

277279
# fmt: off
278280
code = (
279-
f"{for_loop}\n"
281+
f"{for_loop}\n"
280282
" ' 可口可乐; 可口可樂'"
281283
)
282284
# fmt: on
@@ -299,7 +301,7 @@ def test_cursor_position_double_width_characters_move_up_down(self):
299301

300302
# fmt: off
301303
code = (
302-
f"{for_loop}\n"
304+
f"{for_loop}\n"
303305
" ' 可口可乐; 可口可樂'"
304306
)
305307
# fmt: on
@@ -346,8 +348,8 @@ def test_cursor_position_move_up_to_eol(self):
346348
code = (
347349
f"{first_line}\n"
348350
f"{second_line}\n"
349-
" h\n"
350-
" hel"
351+
" h\n"
352+
" hel"
351353
)
352354
# fmt: on
353355

@@ -379,7 +381,7 @@ def test_cursor_position_move_down_to_eol(self):
379381
"for _ in _:\n"
380382
" hello\n"
381383
" h\n"
382-
f"{last_line}"
384+
f"{last_line}"
383385
)
384386
# fmt: on
385387

@@ -607,6 +609,27 @@ def test_global_namespace_completion(self):
607609
output = multiline_input(reader, namespace)
608610
self.assertEqual(output, "python")
609611

612+
@patch("_pyrepl.readline._ReadlineWrapper.get_reader")
613+
def test_completion_with_warnings(self, mock_get_reader):
614+
class Dummy:
615+
@property
616+
def test_func(self):
617+
import sys
618+
sys.stderr.write("warnings\n")
619+
return None
620+
621+
dummy = Dummy()
622+
events = code_to_events("dummy.test_func.\t\n\n")
623+
namespace = {"dummy": dummy}
624+
reader = self.prepare_reader(events, namespace)
625+
from _pyrepl.readline import multiline_input as readline_multiline_input
626+
with patch("_pyrepl.readline._ReadlineWrapper.get_reader", lambda _: reader), \
627+
patch("sys.stderr", new_callable=io.StringIO) as f:
628+
output = readline_multiline_input(more_lines, ">>>", "...")
629+
630+
self.assertEqual(output[0], "dummy.test_func.")
631+
self.assertEqual(f.getvalue(), "")
632+
610633

611634
@patch("_pyrepl.curses.tigetstr", lambda x: b"")
612635
class TestUnivEventQueue(TestCase):
@@ -883,24 +906,24 @@ def assert_screen_equals(self, reader, expected):
883906
def test_calc_screen_wrap_simple(self):
884907
events = code_to_events(10 * "a")
885908
reader, _ = handle_events_narrow_console(events)
886-
self.assert_screen_equals(reader, f"{9*"a"}\\\na")
909+
self.assert_screen_equals(reader, f"{9 * "a"}\\\na")
887910

888911
def test_calc_screen_wrap_wide_characters(self):
889912
events = code_to_events(8 * "a" + "樂")
890913
reader, _ = handle_events_narrow_console(events)
891-
self.assert_screen_equals(reader, f"{8*"a"}\\\n樂")
914+
self.assert_screen_equals(reader, f"{8 * "a"}\\\n樂")
892915

893916
def test_calc_screen_wrap_three_lines(self):
894917
events = code_to_events(20 * "a")
895918
reader, _ = handle_events_narrow_console(events)
896-
self.assert_screen_equals(reader, f"{9*"a"}\\\n{9*"a"}\\\naa")
919+
self.assert_screen_equals(reader, f"{9 * "a"}\\\n{9 * "a"}\\\naa")
897920

898921
def test_calc_screen_wrap_three_lines_mixed_character(self):
899922
# fmt: off
900923
code = (
901924
"def f():\n"
902-
f" {8*"a"}\n"
903-
f" {5*"樂"}"
925+
f" {8 * "a"}\n"
926+
f" {5 * "樂"}"
904927
)
905928
# fmt: on
906929

@@ -910,9 +933,9 @@ def test_calc_screen_wrap_three_lines_mixed_character(self):
910933
# fmt: off
911934
self.assert_screen_equals(reader, (
912935
"def f():\n"
913-
f" {7*"a"}\\\n"
936+
f" {7 * "a"}\\\n"
914937
"a\n"
915-
f" {3*"樂"}\\\n"
938+
f" {3 * "樂"}\\\n"
916939
"樂樂"
917940
))
918941
# fmt: on
@@ -945,7 +968,7 @@ def test_calc_screen_backspace_in_second_line_after_wrap(self):
945968
],
946969
)
947970
reader, _ = handle_events_narrow_console(events)
948-
self.assert_screen_equals(reader, f"{9*"a"}\\\na")
971+
self.assert_screen_equals(reader, f"{9 * "a"}\\\na")
949972

950973
def test_setpos_for_xy_simple(self):
951974
events = code_to_events("11+11")

0 commit comments

Comments
 (0)
0