From 028f9977e8506b497eb18e8b7da12fa2be5ab5e8 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 21 Oct 2017 15:27:00 -0400 Subject: [PATCH 1/3] bpo-31836: Make test_code_module pass after test_idle. Test_code_module assume sys.ps1 is initially absent; make it so. Add test that code.interact respects existing sys.ps1. Ditto for ps2. --- Lib/test/test_code_module.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Lib/test/test_code_module.py b/Lib/test/test_code_module.py index 1a8f6990dfb7ec..66401c740a0485 100644 --- a/Lib/test/test_code_module.py +++ b/Lib/test/test_code_module.py @@ -11,6 +11,13 @@ class TestInteractiveConsole(unittest.TestCase): + @classmethod + def setUpClass(cls): + if hasattr(sys, 'ps1'): # If run after test_idle: see #31836. + del sys.ps1 + if hasattr(sys, 'ps2'): # Just in case. + del sys.ps2 + def setUp(self): self.console = code.InteractiveConsole() self.mock_sys() @@ -33,11 +40,17 @@ def test_ps1(self): self.infunc.side_effect = EOFError('Finished') self.console.interact() self.assertEqual(self.sysmod.ps1, '>>> ') + self.sysmod.ps1 = 'custom1> ' + self.console.interact() + self.assertEqual(self.sysmod.ps1, 'custom1> ') def test_ps2(self): self.infunc.side_effect = EOFError('Finished') self.console.interact() self.assertEqual(self.sysmod.ps2, '... ') + self.sysmod.ps1 = 'custom2> ' + self.console.interact() + self.assertEqual(self.sysmod.ps1, 'custom2> ') def test_console_stderr(self): self.infunc.side_effect = ["'antioch'", "", EOFError('Finished')] From d77d2ddfecac61736238037609b9c2549a9cdab1 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 21 Oct 2017 15:42:42 -0400 Subject: [PATCH 2/3] News blurb. --- .../NEWS.d/next/IDLE/2017-10-21-15-41-53.bpo-31836.fheLME.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2017-10-21-15-41-53.bpo-31836.fheLME.rst diff --git a/Misc/NEWS.d/next/IDLE/2017-10-21-15-41-53.bpo-31836.fheLME.rst b/Misc/NEWS.d/next/IDLE/2017-10-21-15-41-53.bpo-31836.fheLME.rst new file mode 100644 index 00000000000000..a5c9153e36584e --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2017-10-21-15-41-53.bpo-31836.fheLME.rst @@ -0,0 +1,4 @@ +Test_code_module now passes if run after test_idle, which sets ps1. + +The code module uses sys.ps1 if present or sets it to '>>> ' if not. +Test_code_module now properly tests both behaviors. Ditto for ps2. From adedccbd759bda0ea1ead6c1db9f66da1ed6ce65 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 27 Oct 2017 12:00:16 +0300 Subject: [PATCH 3/3] Don't change sys.ps1 and sys.ps2 permanently. --- Lib/test/test_code_module.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_code_module.py b/Lib/test/test_code_module.py index 66401c740a0485..24db0ace80122e 100644 --- a/Lib/test/test_code_module.py +++ b/Lib/test/test_code_module.py @@ -11,13 +11,6 @@ class TestInteractiveConsole(unittest.TestCase): - @classmethod - def setUpClass(cls): - if hasattr(sys, 'ps1'): # If run after test_idle: see #31836. - del sys.ps1 - if hasattr(sys, 'ps2'): # Just in case. - del sys.ps2 - def setUp(self): self.console = code.InteractiveConsole() self.mock_sys() @@ -35,6 +28,8 @@ def mock_sys(self): self.sysmod = stack.enter_context(prepatch) if sys.excepthook is sys.__excepthook__: self.sysmod.excepthook = self.sysmod.__excepthook__ + del self.sysmod.ps1 + del self.sysmod.ps2 def test_ps1(self): self.infunc.side_effect = EOFError('Finished')