test_interactiveshell.py
87 lines
| 3.2 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r3300 | """Tests for the key interactiveshell module. | ||
Historically the main classes in interactiveshell have been under-tested. This | ||||
module should grow as many single-method tests as possible to trap many of the | ||||
recurring bugs we seem to encounter with high-level interaction. | ||||
Authors | ||||
------- | ||||
* Fernando Perez | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2011 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 | ||||
#----------------------------------------------------------------------------- | ||||
# stdlib | ||||
import unittest | ||||
Paul Ivanov
|
r3503 | from IPython.testing import decorators as dec | ||
Fernando Perez
|
r3300 | |||
#----------------------------------------------------------------------------- | ||||
# Tests | ||||
#----------------------------------------------------------------------------- | ||||
class InteractiveShellTestCase(unittest.TestCase): | ||||
def test_naked_string_cells(self): | ||||
"""Test that cells with only naked strings are fully executed""" | ||||
ip = get_ipython() | ||||
# First, single-line inputs | ||||
ip.run_cell('"a"\n') | ||||
self.assertEquals(ip.user_ns['_'], 'a') | ||||
# And also multi-line cells | ||||
ip.run_cell('"""a\nb"""\n') | ||||
self.assertEquals(ip.user_ns['_'], 'a\nb') | ||||
Paul Ivanov
|
r3499 | |||
Thomas Kluyver
|
r3441 | def test_run_empty_cell(self): | ||
"""Just make sure we don't get a horrible error with a blank | ||||
cell of input. Yes, I did overlook that.""" | ||||
ip = get_ipython() | ||||
ip.run_cell('') | ||||
Fernando Perez
|
r3467 | |||
Paul Ivanov
|
r3499 | def test_run_cell_multiline(self): | ||
Fernando Perez
|
r3467 | """Multi-block, multi-line cells must execute correctly. | ||
""" | ||||
ip = get_ipython() | ||||
src = '\n'.join(["x=1", | ||||
"y=2", | ||||
"if 1:", | ||||
" x += 1", | ||||
" y += 1",]) | ||||
ip.run_cell(src) | ||||
self.assertEquals(ip.user_ns['x'], 2) | ||||
self.assertEquals(ip.user_ns['y'], 3) | ||||
Paul Ivanov
|
r3499 | |||
def test_multiline_string_cells(self): | ||||
Paul Ivanov
|
r3500 | "Code sprinkled with multiline strings should execute (GH-306)" | ||
Paul Ivanov
|
r3499 | ip = get_ipython() | ||
ip.run_cell('tmp=0') | ||||
self.assertEquals(ip.user_ns['tmp'], 0) | ||||
ip.run_cell('tmp=1;"""a\nb"""\n') | ||||
self.assertEquals(ip.user_ns['tmp'], 1) | ||||
Paul Ivanov
|
r3500 | |||
Paul Ivanov
|
r3503 | @dec.skip_known_failure | ||
Paul Ivanov
|
r3500 | def test_dont_cache_with_semicolon(self): | ||
"Ending a line with semicolon should not cache the returned object (GH-307)" | ||||
ip = get_ipython() | ||||
oldlen = len(ip.user_ns['Out']) | ||||
a = ip.run_cell('1;') | ||||
newlen = len(ip.user_ns['Out']) | ||||
self.assertEquals(oldlen, newlen) | ||||
#also test the default caching behavior | ||||
Paul Ivanov
|
r3501 | ip.run_cell('1') | ||
Paul Ivanov
|
r3500 | newlen = len(ip.user_ns['Out']) | ||
self.assertEquals(oldlen+1, newlen) | ||||
Paul Ivanov
|
r3503 | |||
Paul Ivanov
|
r3501 | def test_In_variable(self): | ||
"Verify that In variable grows with user input (GH-284)" | ||||
ip = get_ipython() | ||||
oldlen = len(ip.user_ns['In']) | ||||
ip.run_cell('1;') | ||||
newlen = len(ip.user_ns['In']) | ||||
self.assertEquals(oldlen+1, newlen) | ||||
self.assertEquals(ip.user_ns['In'][-1],'1;') | ||||