Commit bc3a53cb authored by maruel@chromium.org's avatar maruel@chromium.org

Improve subprocess2 stdin tests.

No significant code change.

R=dpranke@chromium.org
TEST=
BUG=


Review URL: http://codereview.chromium.org/8801019

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@113062 0039d316-1c4b-4281-b951-d872f2087c98
parent 56f4c474
...@@ -380,6 +380,42 @@ class S2Test(BaseTestCase): ...@@ -380,6 +380,42 @@ class S2Test(BaseTestCase):
pass pass
self._run_test(fn) self._run_test(fn)
def test_stdin(self):
def fn(c, e, un):
stdin = '0123456789'
res = subprocess2.communicate(
e + ['--read'],
stdin=stdin,
universal_newlines=un)
self._check_res(res, None, None, 10)
self._run_test(fn)
def test_stdin_unicode(self):
def fn(c, e, un):
stdin = u'0123456789'
res = subprocess2.communicate(
e + ['--read'],
stdin=stdin,
universal_newlines=un)
self._check_res(res, None, None, 10)
self._run_test(fn)
def test_stdin_void(self):
res = subprocess2.communicate(self.exe + ['--read'], stdin=VOID)
self._check_res(res, None, None, 0)
def test_stdin_void_stdout_timeout(self):
# Make sure a mix of VOID, PIPE and timeout works.
def fn(c, e, un):
res = subprocess2.communicate(
e + ['--stdout', '--read'],
stdin=VOID,
stdout=PIPE,
timeout=10,
universal_newlines=un)
self._check_res(res, c('A\nBB\nCCC\n'), None, 0)
self._run_test(fn)
def test_stdout_void(self): def test_stdout_void(self):
def fn(c, e, un): def fn(c, e, un):
res = subprocess2.communicate( res = subprocess2.communicate(
...@@ -435,21 +471,26 @@ class S2Test(BaseTestCase): ...@@ -435,21 +471,26 @@ class S2Test(BaseTestCase):
def test_tee_stdin(self): def test_tee_stdin(self):
def fn(c, e, un): def fn(c, e, un):
# Mix of stdin input and stdout callback.
stdout = [] stdout = []
stdin = '0123456789' stdin = '0123456789'
res = subprocess2.communicate( res = subprocess2.communicate(
e + ['--stdout', '--read'], stdin=stdin, stdout=stdout.append, e + ['--stdout', '--read'],
stdin=stdin,
stdout=stdout.append,
universal_newlines=un) universal_newlines=un)
self.assertEquals(c('A\nBB\nCCC\n'), ''.join(stdout)) self.assertEquals(c('A\nBB\nCCC\n'), ''.join(stdout))
self._check_res(res, None, None, 0) self._check_res(res, None, None, 10)
self._run_test(fn) self._run_test(fn)
def test_tee_throw(self): def test_tee_throw(self):
def fn(c, e, un): def fn(c, e, un):
# Make sure failure still returns stderr completely.
stderr = [] stderr = []
try: try:
subprocess2.check_output( subprocess2.check_output(
e + ['--stderr', '--fail'], stderr=stderr.append, e + ['--stderr', '--fail'],
stderr=stderr.append,
universal_newlines=un) universal_newlines=un)
self.fail() self.fail()
except subprocess2.CalledProcessError, e: except subprocess2.CalledProcessError, e:
...@@ -580,9 +621,10 @@ def child_main(args): ...@@ -580,9 +621,10 @@ def child_main(args):
string = '0123456789abcdef' * (8*1024) string = '0123456789abcdef' * (8*1024)
sys.stdout.write(string) sys.stdout.write(string)
if options.read: if options.read:
assert options.return_value is 0
try: try:
while sys.stdin.read(): while sys.stdin.read(1):
pass options.return_value += 1
except OSError: except OSError:
pass pass
if options.sleep_last: if options.sleep_last:
......
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