diff --git a/Lib/_pyrepl/readline.py b/Lib/_pyrepl/readline.py index d28a7f3779f302..1bedd69618e90e 100644 --- a/Lib/_pyrepl/readline.py +++ b/Lib/_pyrepl/readline.py @@ -28,6 +28,7 @@ from __future__ import annotations +import warnings from dataclasses import dataclass, field import os @@ -298,7 +299,8 @@ def multiline_input(self, more_lines, ps1, ps2): reader.more_lines = more_lines reader.ps1 = reader.ps2 = ps1 reader.ps3 = reader.ps4 = ps2 - return reader.readline(), reader.was_paste_mode_activated + with warnings.catch_warnings(action="ignore"): + return reader.readline(), reader.was_paste_mode_activated finally: reader.more_lines = saved reader.paste_mode = False diff --git a/Lib/test/test_pyrepl/test_pyrepl.py b/Lib/test/test_pyrepl/test_pyrepl.py index bc0a9975e34e00..b643ae5895c97e 100644 --- a/Lib/test/test_pyrepl/test_pyrepl.py +++ b/Lib/test/test_pyrepl/test_pyrepl.py @@ -1,12 +1,15 @@ import itertools +import io import os import rlcompleter -import unittest from unittest import TestCase +from unittest.mock import patch -from .support import FakeConsole, handle_all_events, handle_events_narrow_console, multiline_input, code_to_events +from .support import FakeConsole, handle_all_events, handle_events_narrow_console +from .support import more_lines, multiline_input, code_to_events from _pyrepl.console import Event from _pyrepl.readline import ReadlineAlikeReader, ReadlineConfig +from _pyrepl.readline import multiline_input as readline_multiline_input class TestCursorPosition(TestCase): @@ -475,6 +478,25 @@ def test_updown_arrow_with_completion_menu(self): output = multiline_input(reader, namespace) self.assertEqual(output, "os.") + @patch("_pyrepl.readline._ReadlineWrapper.get_reader") + @patch("sys.stderr", new_callable=io.StringIO) + def test_completion_with_warnings(self, mock_stderr, mock_get_reader): + class Dummy: + @property + def test_func(self): + import warnings + warnings.warn("warnings\n") + return None + + dummy = Dummy() + events = code_to_events("dummy.test_func.\t\n\n") + namespace = {"dummy": dummy} + reader = self.prepare_reader(events, namespace) + mock_get_reader.return_value = reader + output = readline_multiline_input(more_lines, ">>>", "...") + self.assertEqual(output[0], "dummy.test_func.__") + self.assertEqual(mock_stderr.getvalue(), "") + class TestPasteEvent(TestCase): def prepare_reader(self, events): @@ -633,7 +655,3 @@ def test_bracketed_paste_single_line(self): reader = self.prepare_reader(events) output = multiline_input(reader) self.assertEqual(output, input_code) - - -if __name__ == "__main__": - unittest.main() diff --git a/Lib/test/test_pyrepl/test_unix_eventqueue.py b/Lib/test/test_pyrepl/test_unix_eventqueue.py index be2bc00e5692a7..c06536b4a86a04 100644 --- a/Lib/test/test_pyrepl/test_unix_eventqueue.py +++ b/Lib/test/test_pyrepl/test_unix_eventqueue.py @@ -7,7 +7,7 @@ @patch("_pyrepl.curses.tigetstr", lambda x: b"") -class TestUnivEventQueue(unittest.TestCase): +class TestUnixEventQueue(unittest.TestCase): def setUp(self): self.file = tempfile.TemporaryFile()
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: