Chromium Code Reviews| Index: tests/subprocess2_test.py |
| diff --git a/tests/subprocess2_test.py b/tests/subprocess2_test.py |
| index 4f289026f68c76b8fc7be4bf0815647574312e36..376a40fb64d2a63450a487787f0fa97fc900c4c3 100755 |
| --- a/tests/subprocess2_test.py |
| +++ b/tests/subprocess2_test.py |
| @@ -16,33 +16,70 @@ sys.path.insert(0, ROOT_DIR) |
| import subprocess2 |
| +# Method could be a function |
| +# pylint: disable=R0201 |
| class Subprocess2Test(unittest.TestCase): |
| # Can be mocked in a test. |
| - TO_SAVE = ['Popen', 'call', 'check_call', 'capture', 'check_output'] |
| + TO_SAVE = { |
| + subprocess2: ['Popen', 'call', 'check_call', 'capture', 'check_output'], |
|
Dirk Pranke
2011/04/05 21:18:49
Don't need to change this in this patch, but, do y
|
| + subprocess2.subprocess: ['Popen'], |
| + } |
| def setUp(self): |
| self.exe_path = __file__ |
| self.exe = [self.exe_path, '--child'] |
| - self.saved = dict( |
| - (name, getattr(subprocess2, name)) for name in self.TO_SAVE) |
| + self.saved = {} |
| + for module, names in self.TO_SAVE.iteritems(): |
| + self.saved[module] = dict( |
| + (name, getattr(module, name)) for name in names) |
| def tearDown(self): |
| - for name, value in self.saved.iteritems(): |
| - setattr(subprocess2, name, value) |
| + for module, saved in self.saved.iteritems(): |
| + for name, value in saved.iteritems(): |
| + setattr(module, name, value) |
| @staticmethod |
| - def _prep(): |
| + def _fake_call(): |
| results = {} |
| def fake_call(args, **kwargs): |
| + assert not results |
| results.update(kwargs) |
| results['args'] = args |
| return ['stdout', 'stderr'], 0 |
| subprocess2.call = fake_call |
| return results |
| + @staticmethod |
| + def _fake_Popen(): |
| + results = {} |
| + class fake_Popen(object): |
| + returncode = -8 |
| + def __init__(self, args, **kwargs): |
| + assert not results |
| + results.update(kwargs) |
| + results['args'] = args |
| + def communicate(self): |
| + return None, None |
| + subprocess2.Popen = fake_Popen |
| + return results |
| + |
| + @staticmethod |
| + def _fake_subprocess_Popen(): |
| + results = {} |
| + class fake_Popen(object): |
| + returncode = -8 |
| + def __init__(self, args, **kwargs): |
| + assert not results |
| + results.update(kwargs) |
| + results['args'] = args |
| + def communicate(self): |
| + return None, None |
| + subprocess2.subprocess.Popen = fake_Popen |
| + return results |
| + |
| def test_check_call_defaults(self): |
| - results = self._prep() |
| + results = self._fake_call() |
| self.assertEquals( |
| ['stdout', 'stderr'], subprocess2.check_call(['foo'], a=True)) |
| expected = { |
| @@ -51,8 +88,31 @@ class Subprocess2Test(unittest.TestCase): |
| } |
| self.assertEquals(expected, results) |
| + def test_call_defaults(self): |
| + results = self._fake_Popen() |
| + self.assertEquals(((None, None), -8), subprocess2.call(['foo'], a=True)) |
| + expected = { |
| + 'args': ['foo'], |
| + 'a': True, |
| + } |
| + self.assertEquals(expected, results) |
| + |
| + def test_Popen_defaults(self): |
| + results = self._fake_subprocess_Popen() |
| + proc = subprocess2.Popen(['foo'], a=True) |
| + self.assertEquals(-8, proc.returncode) |
| + env = os.environ.copy() |
| + env['LANG'] = 'en_US.UTF-8' |
| + expected = { |
| + 'args': ['foo'], |
| + 'a': True, |
| + 'shell': bool(sys.platform=='win32'), |
| + 'env': env, |
| + } |
| + self.assertEquals(expected, results) |
| + |
| def test_check_output_defaults(self): |
| - results = self._prep() |
| + results = self._fake_call() |
| # It's discarding 'stderr' because it assumes stderr=subprocess2.STDOUT but |
| # fake_call() doesn't 'implement' that. |
| self.assertEquals('stdout', subprocess2.check_output(['foo'], a=True)) |