]> granicus.if.org Git - python/commitdiff
Add yet another test for subprocess.Popen.communicate
authorAndrew Svetlov <andrew.svetlov@gmail.com>
Wed, 15 Aug 2012 19:46:43 +0000 (22:46 +0300)
committerAndrew Svetlov <andrew.svetlov@gmail.com>
Wed, 15 Aug 2012 19:46:43 +0000 (22:46 +0300)
Lib/test/test_subprocess.py

index e591d2fd56cbd17bf4800f5978650c4fffa25e69..72079d07d3dec812b10580571d2bb99a14b402ff 100644 (file)
@@ -645,6 +645,34 @@ class ProcessTestCase(BaseTestCase):
         p.communicate()
         self.assertEqual(p.returncode, 0)
 
+    def test_universal_newlines_communicate_stdin_stdout_stderr(self):
+        # universal newlines through communicate(), with only stdin
+        p = subprocess.Popen([sys.executable, "-c",
+                              'import sys,os;' + SETBINARY + '''\nif True:
+                                  s = sys.stdin.readline()
+                                  sys.stdout.write(s)
+                                  sys.stdout.write("line2\\r")
+                                  sys.stderr.write("eline2\\n")
+                                  s = sys.stdin.read()
+                                  sys.stdout.write(s+"line4\\n")
+                                  sys.stdout.write(s+"line5\\r\\n")
+                                  sys.stderr.write("eline6\\n")
+                                  sys.stderr.write("eline7\\r")
+                                  sys.stderr.write("eline8\\r\\n")
+                              '''],
+                             stdin=subprocess.PIPE,
+                             stderr=subprocess.PIPE,
+                             stdout=subprocess.PIPE,
+                             universal_newlines=1)
+        self.addCleanup(p.stdout.close)
+        self.addCleanup(p.stderr.close)
+        (stdout, stderr) = p.communicate("line1\nline3\n")
+        self.assertEqual(p.returncode, 0)
+        self.assertEqual("line1\nline2\nline3\nline4\nline3\nline5\n", stdout)
+        # Python debug build push something like "[42442 refs]\n"
+        # to stderr at exit of subprocess.
+        self.assertTrue(stderr.startswith("eline2\neline6\neline7\neline8\n"))
+
     def test_no_leaking(self):
         # Make sure we leak no resources
         if not mswindows: