summaryrefslogtreecommitdiff
path: root/numpy/distutils/tests/test_exec_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/distutils/tests/test_exec_command.py')
-rw-r--r--numpy/distutils/tests/test_exec_command.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/numpy/distutils/tests/test_exec_command.py b/numpy/distutils/tests/test_exec_command.py
index f2c4fbd13..d9983125d 100644
--- a/numpy/distutils/tests/test_exec_command.py
+++ b/numpy/distutils/tests/test_exec_command.py
@@ -1,3 +1,4 @@
+import os
import sys
import StringIO
@@ -17,13 +18,55 @@ class redirect_stdout(object):
self._stdout.flush()
sys.stdout = self.old_stdout
+class redirect_stderr(object):
+ """Context manager to redirect stderr for exec_command test."""
+ def __init__(self, stderr=None):
+ self._stderr = stderr or sys.stderr
-def test_exec_command():
+ def __enter__(self):
+ self.old_stderr = sys.stderr
+ sys.stderr = self._stderr
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self._stderr.flush()
+ sys.stderr = self.old_stderr
+
+class emulate_nonposix(object):
+ """Context manager to emulate os.name != 'posix' """
+ def __init__(self, osname='non-posix'):
+ self._new_name = osname
+
+ def __enter__(self):
+ self._old_name = os.name
+ os.name = self._new_name
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ os.name = self._old_name
+
+
+def test_exec_command_stdout():
# Regression test for gh-2999 and gh-2915.
# There are several packages (nose, scipy.weave.inline, Sage inline
# Fortran) that replace stdout, in which case it doesn't have a fileno
# method. This is tested here, with a do-nothing command that fails if the
# presence of fileno() is assumed in exec_command.
+
+ # Test posix version:
with redirect_stdout(StringIO.StringIO()):
exec_command.exec_command("cd '.'")
+ # Test non-posix version:
+ with emulate_nonposix():
+ with redirect_stdout(StringIO.StringIO()):
+ exec_command.exec_command("cd '.'")
+
+def test_exec_command_stderr():
+ # Test posix version:
+ with redirect_stderr(StringIO.StringIO()):
+ exec_command.exec_command("cd '.'")
+
+ # Test non-posix version:
+ # Note: this test reveals a failure
+ #with emulate_nonposix():
+ # with redirect_stderr(StringIO.StringIO()):
+ # exec_command.exec_command("cd '.'")