summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/cmd.py2
-rw-r--r--Lib/test/test_cmd.py27
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 32 insertions, 1 deletions
diff --git a/Lib/cmd.py b/Lib/cmd.py
index 5847f76..29ea460 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -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')
diff --git a/Misc/ACKS b/Misc/ACKS
index 2d15ca5..c75fced 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -188,6 +188,7 @@ Vincent Delft
Arnaud Delobelle
Erik Demaine
Roger Dev
+Catherine Devlin
Raghuram Devarakonda
Scott Dial
Toby Dickenson
diff --git a/Misc/NEWS b/Misc/NEWS
index ea60e3b..a7928c0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.