test_redirectors.py
78 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
gvaroquaux
|
r1456 | # encoding: utf-8 | ||
Gael Varoquaux
|
r1422 | """ | ||
Test the output capture at the OS level, using file descriptors. | ||||
""" | ||||
Brian Granger
|
r1963 | #----------------------------------------------------------------------------- | ||
# Copyright (C) 2008-2009 The IPython Development Team | ||||
Gael Varoquaux
|
r1457 | # | ||
# Distributed under the terms of the BSD License. The full license is | ||||
# in the file COPYING, distributed as part of this software. | ||||
Brian Granger
|
r1963 | #----------------------------------------------------------------------------- | ||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Gael Varoquaux
|
r1457 | |||
Brian Granger
|
r1960 | # Tell nose to skip this module | ||
__test__ = {} | ||||
gvaroquaux
|
r1456 | |||
Gael Varoquaux
|
r1422 | from cStringIO import StringIO | ||
Brian Granger
|
r1963 | import os | ||
from twisted.trial import unittest | ||||
Gael Varoquaux
|
r1422 | |||
Brian Granger
|
r1963 | from IPython.testing import decorators_trial as dec | ||
Gael Varoquaux
|
r1422 | |||
Fernando Perez
|
r1721 | #----------------------------------------------------------------------------- | ||
Brian Granger
|
r1963 | # Tests | ||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r1721 | |||
Gael Varoquaux
|
r1422 | |||
Brian Granger
|
r1963 | class TestRedirector(unittest.TestCase): | ||
Fernando Perez
|
r1721 | |||
Brian Granger
|
r1963 | @dec.skip_win32 | ||
def test_redirector(self): | ||||
"""Checks that the redirector can be used to do synchronous capture. | ||||
""" | ||||
from IPython.kernel.core.fd_redirector import FDRedirector | ||||
r = FDRedirector() | ||||
out = StringIO() | ||||
try: | ||||
r.start() | ||||
for i in range(10): | ||||
os.system('echo %ic' % i) | ||||
print >>out, r.getvalue(), | ||||
print >>out, i | ||||
except: | ||||
r.stop() | ||||
raise | ||||
r.stop() | ||||
result1 = out.getvalue() | ||||
result2 = "".join("%ic\n%i\n" %(i, i) for i in range(10)) | ||||
self.assertEquals(result1, result2) | ||||
@dec.skip_win32 | ||||
def test_redirector_output_trap(self): | ||||
"""Check the greedy trapping behavior of the traps. | ||||
This test check not only that the redirector_output_trap does | ||||
Gael Varoquaux
|
r1422 | trap the output, but also that it does it in a gready way, that | ||
gvaroquaux
|
r1460 | is by calling the callback ASAP. | ||
Brian Granger
|
r1963 | """ | ||
from IPython.kernel.core.redirector_output_trap import RedirectorOutputTrap | ||||
out = StringIO() | ||||
trap = RedirectorOutputTrap(out.write, out.write) | ||||
try: | ||||
trap.set() | ||||
for i in range(10): | ||||
os.system('echo %ic' % i) | ||||
print "%ip" % i | ||||
print >>out, i | ||||
except: | ||||
trap.unset() | ||||
raise | ||||
Gael Varoquaux
|
r1422 | trap.unset() | ||
Brian Granger
|
r1963 | result1 = out.getvalue() | ||
result2 = "".join("%ic\n%ip\n%i\n" %(i, i, i) for i in range(10)) | ||||
self.assertEquals(result1, result2) | ||||