diff options
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | lib/fixtures/_fixtures/popen.py | 5 | ||||
-rw-r--r-- | lib/fixtures/tests/_fixtures/test_popen.py | 8 |
3 files changed, 18 insertions, 1 deletions
@@ -6,6 +6,12 @@ fixtures release notes NEXT ~~~~ +CHANGES +------- + +* ``FakePopen`` can now override the returncode attribute. + (Robert Collins) + 0.3.13 ~~~~~~ diff --git a/lib/fixtures/_fixtures/popen.py b/lib/fixtures/_fixtures/popen.py index 15c48f2..708c5fd 100644 --- a/lib/fixtures/_fixtures/popen.py +++ b/lib/fixtures/_fixtures/popen.py @@ -33,10 +33,11 @@ class FakeProcess(object): self.stdout = info.get('stdout') self.stderr = info.get('stderr') self.pid = random.randint(0, 65536) + self._returncode = info.get('returncode', 0) self.returncode = None def communicate(self): - self.returncode = 0 + self.returncode = self._returncode if self.stdout: out = self.stdout.getvalue() else: @@ -48,6 +49,8 @@ class FakeProcess(object): return out, err def wait(self): + if self.returncode is None: + self.communicate() return self.returncode diff --git a/lib/fixtures/tests/_fixtures/test_popen.py b/lib/fixtures/tests/_fixtures/test_popen.py index 4c11619..dc9374c 100644 --- a/lib/fixtures/tests/_fixtures/test_popen.py +++ b/lib/fixtures/tests/_fixtures/test_popen.py @@ -64,6 +64,14 @@ class TestFakePopen(testtools.TestCase, TestWithFixtures): fixture = self.useFixture(FakePopen(get_info)) proc = fixture(**all_args) + def test_custom_returncode(self): + def get_info(proc_args): + return dict(returncode=1) + proc = self.useFixture(FakePopen(get_info))(['foo']) + self.assertEqual(None, proc.returncode) + self.assertEqual(1, proc.wait()) + self.assertEqual(1, proc.returncode) + class TestFakeProcess(testtools.TestCase): |