# encoding: utf-8 """ Test the output capture at the OS level, using file descriptors. """ #----------------------------------------------------------------------------- # Copyright (C) 2008-2009 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is # in the file COPYING, distributed as part of this software. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- # Tell nose to skip this module __test__ = {} from cStringIO import StringIO import os from twisted.trial import unittest from IPython.testing import decorators as dec #----------------------------------------------------------------------------- # Tests #----------------------------------------------------------------------------- class TestRedirector(unittest.TestCase): @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 trap the output, but also that it does it in a gready way, that is by calling the callback ASAP. """ 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 trap.unset() result1 = out.getvalue() result2 = "".join("%ic\n%ip\n%i\n" %(i, i, i) for i in range(10)) self.assertEquals(result1, result2)