| Index: tests/subprocess2_test.py
|
| diff --git a/tests/subprocess2_test.py b/tests/subprocess2_test.py
|
| index e7ddf90947cf5f10f21f200bb42c7acb7ac34bf9..9f2101a01212d0a86dc4a1c0d77003ccf97ab22d 100755
|
| --- a/tests/subprocess2_test.py
|
| +++ b/tests/subprocess2_test.py
|
| @@ -5,6 +5,7 @@
|
|
|
| """Unit tests for subprocess2.py."""
|
|
|
| +import cStringIO
|
| import logging
|
| import optparse
|
| import os
|
| @@ -165,7 +166,7 @@ class DefaultsTest(auto_stub.TestCase):
|
| self.assertEquals(expected, results)
|
|
|
|
|
| -class BaseTestCase(unittest.TestCase):
|
| +class BaseTestCase(auto_stub.TestCase):
|
| def setUp(self):
|
| super(BaseTestCase, self).setUp()
|
| self.exe_path = __file__
|
| @@ -236,7 +237,7 @@ class RegressionTest(BaseTestCase):
|
| self.fail()
|
| except ValueError:
|
| pass
|
| -
|
| +
|
| if (sys.version_info[0] * 10 + sys.version_info[1]) >= 27:
|
| # python 2.7+
|
| try:
|
| @@ -617,7 +618,54 @@ class S2Test(BaseTestCase):
|
| 'No output for 9 seconds from command:', proc.cmd_str]
|
| self.assertEquals(w, expected)
|
|
|
| -
|
| + def test_communicate_and_stream(self):
|
| + self.mock(sys, 'stdout', cStringIO.StringIO())
|
| + self.mock(sys, 'stderr', cStringIO.StringIO())
|
| + (stdout, stderr), returncode = subprocess2.communicate_and_stream(
|
| + self.exe + ['--stderr', '--stdout', '--fail'])
|
| + self.assertEquals(returncode, 64)
|
| + self.assertEquals('A\nBB\nCCC\n', sys.stdout.getvalue())
|
| + self.assertEquals('A\nBB\nCCC\n', stdout)
|
| + self.assertEquals('a\nbb\nccc\n', sys.stderr.getvalue())
|
| + self.assertEquals('a\nbb\nccc\n', stderr)
|
| +
|
| + def test_communicate_and_stream_partial_pipe(self):
|
| + self.mock(sys, 'stdout', cStringIO.StringIO())
|
| + self.mock(sys, 'stderr', cStringIO.StringIO())
|
| + (stdout, stderr), returncode = subprocess2.communicate_and_stream(
|
| + self.exe + ['--stderr', '--stdout'], stdout=PIPE)
|
| + self.assertEquals(returncode, 0)
|
| + self.assertEquals('', sys.stdout.getvalue())
|
| + self.assertEquals('A\nBB\nCCC\n', stdout)
|
| + self.assertEquals('a\nbb\nccc\n', sys.stderr.getvalue())
|
| + self.assertEquals('a\nbb\nccc\n', stderr)
|
| +
|
| + def test_communicate_and_stream_partial_void(self):
|
| + self.mock(sys, 'stdout', cStringIO.StringIO())
|
| + self.mock(sys, 'stderr', cStringIO.StringIO())
|
| + (stdout, stderr), returncode = subprocess2.communicate_and_stream(
|
| + self.exe + ['--stderr', '--stdout', '--fail'], stderr=VOID)
|
| + self.assertEquals(returncode, 64)
|
| + self.assertEquals('A\nBB\nCCC\n', sys.stdout.getvalue())
|
| + self.assertEquals('A\nBB\nCCC\n', stdout)
|
| + self.assertEquals('', sys.stderr.getvalue())
|
| + self.assertIsNone(stderr)
|
| +
|
| + def test_communicate_and_stream_redirect(self):
|
| + self.mock(sys, 'stdout', cStringIO.StringIO())
|
| + self.mock(sys, 'stderr', cStringIO.StringIO())
|
| + (stdout, stderr), returncode = subprocess2.communicate_and_stream(
|
| + self.exe + ['--stderr', '--stdout', '--fail'], stderr=STDOUT)
|
| + self.assertEquals(returncode, 64)
|
| + self.assertEquals('', sys.stderr.getvalue())
|
| + self.assertIsNone(stderr)
|
| + self.assertEquals(sys.stdout.getvalue(), stdout)
|
| + # Because stderr/stdout is interwoven arbitrarily,
|
| + # just check that no output is missed, but not the order.
|
| + self.assertEquals(sorted(stdout), sorted('A\nBB\nCCC\n' + 'a\nbb\nccc\n'))
|
| +
|
| +
|
| +
|
| def child_main(args):
|
| if sys.platform == 'win32':
|
| # Annoying, make sure the output is not translated on Windows.
|
|
|