]> granicus.if.org Git - python/commitdiff
Issue27573 code.interact prints a message when exiting.
authorSteven D'Aprano <steve@pearwood.info>
Sun, 14 Aug 2016 18:14:33 +0000 (04:14 +1000)
committerSteven D'Aprano <steve@pearwood.info>
Sun, 14 Aug 2016 18:14:33 +0000 (04:14 +1000)
Doc/library/code.rst
Lib/code.py
Lib/test/test_code_module.py

index 443af699f24ff6927ad7072646b69e937790bde0..c573087af34089df6b1ccc67358ee02b5630a90b 100644 (file)
@@ -147,6 +147,9 @@ interpreter objects as well as the following additions.
    .. versionchanged:: 3.4
       To suppress printing any banner, pass an empty string.
 
+   .. versionchanged:: 3.6
+      Now prints a brief message when exiting.
+
 
 .. method:: InteractiveConsole.push(line)
 
index 53244e32ad684bd083529337e50347b5724206d3..c8b72042e05692183cde7b4b6500f54376fb30ac 100644 (file)
@@ -230,6 +230,7 @@ class InteractiveConsole(InteractiveInterpreter):
                 self.write("\nKeyboardInterrupt\n")
                 self.resetbuffer()
                 more = 0
+        self.write('now exiting %s...\n' % self.__class__.__name__)
 
     def push(self, line):
         """Push a line to the interpreter.
index 3394b39e01d840cd51b06c90f3cc188b16759735..08ba3f370498013626a2670be6f8e91cd5e8ec37 100644 (file)
@@ -69,7 +69,7 @@ class TestInteractiveConsole(unittest.TestCase):
         # with banner
         self.infunc.side_effect = EOFError('Finished')
         self.console.interact(banner='Foo')
-        self.assertEqual(len(self.stderr.method_calls), 2)
+        self.assertEqual(len(self.stderr.method_calls), 3)
         banner_call = self.stderr.method_calls[0]
         self.assertEqual(banner_call, ['write', ('Foo\n',), {}])
 
@@ -77,7 +77,15 @@ class TestInteractiveConsole(unittest.TestCase):
         self.stderr.reset_mock()
         self.infunc.side_effect = EOFError('Finished')
         self.console.interact(banner='')
-        self.assertEqual(len(self.stderr.method_calls), 1)
+        self.assertEqual(len(self.stderr.method_calls), 2)
+
+    def test_exit_msg(self):
+        self.infunc.side_effect = EOFError('Finished')
+        self.console.interact(banner='')
+        self.assertEqual(len(self.stderr.method_calls), 2)
+        err_msg = self.stderr.method_calls[1]
+        expected = 'now exiting InteractiveConsole...\n'
+        self.assertEqual(err_msg, ['write', (expected,), {}])
 
     def test_cause_tb(self):
         self.infunc.side_effect = ["raise ValueError('') from AttributeError",