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)
import sys
import trace
import re
-from io import StringIO
+import unittest
+import io
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(args, file=self.stdout)
+
+ def do_EOF(self, args):
+ return True
+
+ def test_file_with_missing_final_nl(self):
+ input = io.StringIO("print test\nprint test2")
+ output = io.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 support, test_cmd
support.run_doctest(test_cmd, verbose)
+ support.run_unittest(TestAlternateInput)
def test_coverage(coverdir):
tracer=trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,],
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 #3704: http.cookiejar was not properly handling URLs with a / in the
parameters.