diff options
| -rw-r--r-- | Lib/cmd.py | 2 | ||||
| -rw-r--r-- | Lib/test/test_cmd.py | 27 | ||||
| -rw-r--r-- | Misc/ACKS | 1 | ||||
| -rw-r--r-- | Misc/NEWS | 3 |
4 files changed, 32 insertions, 1 deletions
@@ -137,7 +137,7 @@ class Cmd: if not len(line): line = 'EOF' else: - line = line[:-1] # chop \n + line = line.rstrip('\r\n') line = self.precmd(line) stop = self.onecmd(line) stop = self.postcmd(stop, line) diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py index 19ee52e..c46fec8 100644 --- a/Lib/test/test_cmd.py +++ b/Lib/test/test_cmd.py @@ -8,6 +8,9 @@ Original by Michael Schneider import cmd import sys from test import test_support +import re +import unittest +import StringIO class samplecmdclass(cmd.Cmd): """ @@ -168,9 +171,33 @@ class samplecmdclass(cmd.Cmd): def do_exit(self, arg): return True + +class TestAlternateInput(unittest.TestCase): + + class simplecmd(cmd.Cmd): + + def do_print(self, args): + print >>self.stdout, args + + def do_EOF(self, args): + return True + + def test_file_with_missing_final_nl(self): + input = StringIO.StringIO("print test\nprint test2") + output = StringIO.StringIO() + cmd = self.simplecmd(stdin=input, stdout=output) + cmd.use_rawinput = False + cmd.cmdloop() + self.assertMultiLineEqual(output.getvalue(), + ("(Cmd) test\n" + "(Cmd) test2\n" + "(Cmd) ")) + + def test_main(verbose=None): from test import test_cmd test_support.run_doctest(test_cmd, verbose) + test_support.run_unittest(TestAlternateInput) def test_coverage(coverdir): trace = test_support.import_module('trace') @@ -188,6 +188,7 @@ Vincent Delft Arnaud Delobelle Erik Demaine Roger Dev +Catherine Devlin Raghuram Devarakonda Scott Dial Toby Dickenson @@ -18,6 +18,9 @@ Core and Builtins Library ------- +- Issue #8620: when a Cmd is fed input that reaches EOF without a final + newline, it no longer truncates the last character of the last command line. + - Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and utf-16 incremental encoders. |
