# encoding: utf-8 """ Test process execution and IO redirection. """ __docformat__ = "restructuredtext en" #------------------------------------------------------------------------------- # Copyright (C) 2008 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. #------------------------------------------------------------------------------- from IPython.frontend.prefilterfrontend import PrefilterFrontEnd from cStringIO import StringIO import string class TestPrefilterFrontEnd(PrefilterFrontEnd): input_prompt_template = string.Template('') output_prompt_template = string.Template('') def __init__(self, edit_buffer=''): self.edit_buffer = edit_buffer self.out = StringIO() PrefilterFrontEnd.__init__(self) def get_current_edit_buffer(self): return self.edit_buffer def add_to_edit_buffer(self, string): self.edit_buffer += string def write(self, string): self.out.write(string) def _on_enter(self): self.add_to_edit_buffer('\n') PrefilterFrontEnd._on_enter(self) def test_execution(): """ Test execution of a command. """ f = TestPrefilterFrontEnd(edit_buffer='print 1\n') f._on_enter() assert f.out.getvalue() == '1\n' def test_multiline(): """ Test execution of a multiline command. """ f = TestPrefilterFrontEnd(edit_buffer='if True:') f._on_enter() f.add_to_edit_buffer('print 1') f._on_enter() assert f.out.getvalue() == '' f._on_enter() assert f.out.getvalue() == '1\n' f = TestPrefilterFrontEnd(edit_buffer='(1 +') f._on_enter() f.add_to_edit_buffer('0)') f._on_enter() assert f.out.getvalue() == '' f._on_enter() assert f.out.getvalue() == '1\n' def test_capture(): """ Test the capture of output in different channels. """ f = TestPrefilterFrontEnd( edit_buffer='import os; out=os.fdopen(1, "w"); out.write("1")') f._on_enter() f._on_enter() assert f.out.getvalue() == '1' f = TestPrefilterFrontEnd( edit_buffer='import os; out=os.fdopen(2, "w"); out.write("1")') f._on_enter() f._on_enter() assert f.out.getvalue() == '1' if __name__ == '__main__': test_execution() test_multiline() test_capture()