Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Unified Diff: tests/subprocess2_test.py

Issue 1773183002: ABANDONED. Use gclient_utils instead. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: re-parent Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« subprocess2.py ('K') | « subprocess2.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« subprocess2.py ('K') | « subprocess2.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698