From f87afb0381e968f72de5a2e2bd230d4360896205 Mon Sep 17 00:00:00 2001
From: Serhiy Storchaka <storchaka@gmail.com>
Date: Sun, 8 Mar 2015 09:16:40 +0200
Subject: Issue #21619: Cleaned up test_broken_pipe_cleanup. Patch by Martin
 Panter.

---
 Lib/test/test_subprocess.py | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index aaec322..3591b5e 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -2523,21 +2523,19 @@ class ContextManagerTests(BaseTestCase):
 
     def test_broken_pipe_cleanup(self):
         """Broken pipe error should not prevent wait() (Issue 21619)"""
-        args = [sys.executable, "-c",
-               "import sys;"
-               "sys.stdin.close();"
-               "sys.stdout.close();"]   # Signals that input pipe is closed
-        proc = subprocess.Popen(args,
+        proc = subprocess.Popen([sys.executable, '-c', 'pass'],
                                 stdin=subprocess.PIPE,
-                                stdout=subprocess.PIPE,
                                 bufsize=support.PIPE_MAX_SIZE*2)
-        proc.stdout.read()  # Make sure subprocess has closed its input
-        proc.stdin.write(b"x" * support.PIPE_MAX_SIZE)
+        proc = proc.__enter__()
+        # Prepare to send enough data to overflow any OS pipe buffering and
+        # guarantee a broken pipe error. Data is held in BufferedWriter
+        # buffer until closed.
+        proc.stdin.write(b'x' * support.PIPE_MAX_SIZE)
         self.assertIsNone(proc.returncode)
+        # EPIPE expected under POSIX; EINVAL under Windows
         self.assertRaises(OSError, proc.__exit__, None, None, None)
-        self.assertEqual(0, proc.returncode)
+        self.assertEqual(proc.returncode, 0)
         self.assertTrue(proc.stdin.closed)
-        self.assertTrue(proc.stdout.closed)
 
 
 def test_main():
-- 
cgit v0.12