File: test_console.py

package info (click to toggle)
ipython 0.13.1-2%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 15,752 kB
  • sloc: python: 69,537; makefile: 355; lisp: 272; sh: 80; objc: 37
file content (59 lines) | stat: -rw-r--r-- 1,869 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""Tests for two-process terminal frontend

Currenlty only has the most simple test possible, starting a console and running
a single command.

Authors:

* Min RK
"""

#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------

import time

import nose.tools as nt
from nose import SkipTest

from IPython.testing import decorators as dec
from IPython.testing import tools as tt
from IPython.utils import py3compat
from IPython.utils.process import find_cmd

#-----------------------------------------------------------------------------
# Test functions begin
#-----------------------------------------------------------------------------

@dec.skip_win32
def test_console_starts():
    """test that `ipython console` starts a terminal"""
    from IPython.external import pexpect
    
    # weird IOErrors prevent this from firing sometimes:
    ipython_cmd = None
    for i in range(5):
        try:
            ipython_cmd = find_cmd('ipython3' if py3compat.PY3 else 'ipython')
        except IOError:
            time.sleep(0.1)
        else:
            break
    if ipython_cmd is None:
        raise SkipTest("Could not determine ipython command")
    
    p = pexpect.spawn(ipython_cmd, args=['console', '--colors=NoColor'])
    idx = p.expect([r'In \[\d+\]', pexpect.EOF], timeout=15)
    nt.assert_equals(idx, 0, "expected in prompt")
    p.sendline('5')
    idx = p.expect([r'Out\[\d+\]: 5', pexpect.EOF], timeout=5)
    nt.assert_equals(idx, 0, "expected out prompt")
    idx = p.expect([r'In \[\d+\]', pexpect.EOF], timeout=5)
    nt.assert_equals(idx, 0, "expected second in prompt")
    # send ctrl-D;ctrl-D to exit
    p.sendeof()
    p.sendeof()
    p.expect([pexpect.EOF, pexpect.TIMEOUT], timeout=5)
    if p.isalive():
        p.terminate()