Commit efaad09c authored by Ezio Melotti's avatar Ezio Melotti

#11963: remove human verification from test_subprocess.

parent 7ed6f7ea
...@@ -150,16 +150,27 @@ class ProcessTestCase(BaseTestCase): ...@@ -150,16 +150,27 @@ class ProcessTestCase(BaseTestCase):
self.assertEqual(p.stdin, None) self.assertEqual(p.stdin, None)
def test_stdout_none(self): def test_stdout_none(self):
# .stdout is None when not redirected # .stdout is None when not redirected, and the child's stdout will
p = subprocess.Popen([sys.executable, "-c", # be inherited from the parent. In order to test this we run a
'print " this bit of output is from a ' # subprocess in a subprocess:
'test of stdout in a different ' # this_test
'process ..."'], # \-- subprocess created by this test (parent)
stdin=subprocess.PIPE, stderr=subprocess.PIPE) # \-- subprocess created by the parent subprocess (child)
self.addCleanup(p.stdin.close) # The parent doesn't specify stdout, so the child will use the
# parent's stdout. This test checks that the message printed by the
# child goes to the parent stdout. The parent also checks that the
# child's stdout is None. See #11963.
code = ('import sys; from subprocess import Popen, PIPE;'
'p = Popen([sys.executable, "-c", "print \'test_stdout_none\'"],'
' stdin=PIPE, stderr=PIPE);'
'p.wait(); assert p.stdout is None;')
p = subprocess.Popen([sys.executable, "-c", code],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.addCleanup(p.stdout.close)
self.addCleanup(p.stderr.close) self.addCleanup(p.stderr.close)
p.wait() out, err = p.communicate()
self.assertEqual(p.stdout, None) self.assertEqual(p.returncode, 0, err)
self.assertEqual(out.rstrip(), 'test_stdout_none')
def test_stderr_none(self): def test_stderr_none(self):
# .stderr is None when not redirected # .stderr is None when not redirected
...@@ -308,9 +319,22 @@ class ProcessTestCase(BaseTestCase): ...@@ -308,9 +319,22 @@ class ProcessTestCase(BaseTestCase):
def test_stdout_filedes_of_stdout(self): def test_stdout_filedes_of_stdout(self):
# stdout is set to 1 (#1531862). # stdout is set to 1 (#1531862).
cmd = r"import sys, os; sys.exit(os.write(sys.stdout.fileno(), '.\n'))" # To avoid printing the '.\n' on stdout, we do something similar to
rc = subprocess.call([sys.executable, "-c", cmd], stdout=1) # test_stdout_none (see above). The parent subprocess calls the child
self.assertEqual(rc, 2) # subprocess passing stdout=1, and this test uses stdout=PIPE in
# order to capture and check the output of the parent. See #11963.
code = ('import sys, subprocess; '
'rc = subprocess.call([sys.executable, "-c", '
' "import os, sys; sys.exit(os.write(sys.stdout.fileno(), '
'\'.\\\\n\'))"], stdout=1); '
'assert rc == 2')
p = subprocess.Popen([sys.executable, "-c", code],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.addCleanup(p.stdout.close)
self.addCleanup(p.stderr.close)
out, err = p.communicate()
self.assertEqual(p.returncode, 0, err)
self.assertEqual(out, '.\n')
def test_cwd(self): def test_cwd(self):
tmpdir = tempfile.gettempdir() tmpdir = tempfile.gettempdir()
......
...@@ -812,6 +812,8 @@ Extension Modules ...@@ -812,6 +812,8 @@ Extension Modules
Tests Tests
----- -----
- Issue #11963: remove human verification from test_parser and test_subprocess.
- Issue #17249: convert a test in test_capi to use unittest and reap threads. - Issue #17249: convert a test in test_capi to use unittest and reap threads.
- We now run both test_email.py and test_email_renamed.py when running the - We now run both test_email.py and test_email_renamed.py when running the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment