##// END OF EJS Templates
Fixed order of notebook loading and kernel starting....
Fixed order of notebook loading and kernel starting. For security reasons, the kernel should not be started until after the notebook content is completely loaded and on the page. This prevents people from creating notebooks that run nasty code on the users machine at load time. In order to implement this, we had to create a CodeCell.set_kernel method that allows the kernel attribute of a CodeCell to be set at a later time. This also fixes some error messages we were seeing related to the kernel's channels not being setup properly when a send was attempted.

File last commit:

r5274:25901979
r7197:ec9293e0
Show More
test_interactivshell.py
161 lines | 6.6 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
"""Tests for the key interactiveshell module.
Authors
-------
* Julian Taylor
"""
#-----------------------------------------------------------------------------
# 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
from IPython.testing.decorators import skipif
class InteractiveShellTestCase(unittest.TestCase):
def rl_hist_entries(self, rl, n):
"""Get last n readline history entries as a list"""
return [rl.get_history_item(rl.get_current_history_length() - x)
for x in range(n - 1, -1, -1)]
def test_runs_without_rl(self):
"""Test that function does not throw without readline"""
ip = get_ipython()
ip.has_readline = False
ip.readline = None
ip._replace_rlhist_multiline(u'source', 0)
@skipif(not get_ipython().has_readline, 'no readline')
def test_runs_without_remove_history_item(self):
"""Test that function does not throw on windows without
remove_history_item"""
ip = get_ipython()
if hasattr(ip.readline, 'remove_history_item'):
del ip.readline.remove_history_item
ip._replace_rlhist_multiline(u'source', 0)
@skipif(not get_ipython().has_readline, 'no readline')
@skipif(not hasattr(get_ipython().readline, 'remove_history_item'),
'no remove_history_item')
def test_replace_multiline_hist_disabled(self):
"""Test that multiline replace does nothing if disabled"""
ip = get_ipython()
ip.multiline_history = False
ghist = [u'line1', u'line2']
for h in ghist:
ip.readline.add_history(h)
hlen_b4_cell = ip.readline.get_current_history_length()
hlen_b4_cell = ip._replace_rlhist_multiline(u'sourc€\nsource2',
hlen_b4_cell)
self.assertEquals(ip.readline.get_current_history_length(),
hlen_b4_cell)
hist = self.rl_hist_entries(ip.readline, 2)
self.assertEquals(hist, ghist)
@skipif(not get_ipython().has_readline, 'no readline')
@skipif(not hasattr(get_ipython().readline, 'remove_history_item'),
'no remove_history_item')
def test_replace_multiline_hist_adds(self):
"""Test that multiline replace function adds history"""
ip = get_ipython()
hlen_b4_cell = ip.readline.get_current_history_length()
hlen_b4_cell = ip._replace_rlhist_multiline(u'sourc€', hlen_b4_cell)
self.assertEquals(hlen_b4_cell,
ip.readline.get_current_history_length())
@skipif(not get_ipython().has_readline, 'no readline')
@skipif(not hasattr(get_ipython().readline, 'remove_history_item'),
'no remove_history_item')
def test_replace_multiline_hist_keeps_history(self):
"""Test that multiline replace does not delete history"""
ip = get_ipython()
ip.multiline_history = True
ghist = [u'line1', u'line2']
for h in ghist:
ip.readline.add_history(h)
#start cell
hlen_b4_cell = ip.readline.get_current_history_length()
# nothing added to rl history, should do nothing
hlen_b4_cell = ip._replace_rlhist_multiline(u'sourc€\nsource2',
hlen_b4_cell)
self.assertEquals(ip.readline.get_current_history_length(),
hlen_b4_cell)
hist = self.rl_hist_entries(ip.readline, 2)
self.assertEquals(hist, ghist)
@skipif(not get_ipython().has_readline, 'no readline')
@skipif(not hasattr(get_ipython().readline, 'remove_history_item'),
'no remove_history_item')
def test_replace_multiline_hist_replaces_twice(self):
"""Test that multiline entries are replaced twice"""
ip = get_ipython()
ip.multiline_history = True
ip.readline.add_history(u'line0')
#start cell
hlen_b4_cell = ip.readline.get_current_history_length()
ip.readline.add_history('l€ne1')
ip.readline.add_history('line2')
#replace cell with single line
hlen_b4_cell = ip._replace_rlhist_multiline(u'l€ne1\nline2',
hlen_b4_cell)
ip.readline.add_history('l€ne3')
ip.readline.add_history('line4')
#replace cell with single line
hlen_b4_cell = ip._replace_rlhist_multiline(u'l€ne3\nline4',
hlen_b4_cell)
self.assertEquals(ip.readline.get_current_history_length(),
hlen_b4_cell)
hist = self.rl_hist_entries(ip.readline, 3)
self.assertEquals(hist, ['line0', 'l€ne1\nline2', 'l€ne3\nline4'])
@skipif(not get_ipython().has_readline, 'no readline')
@skipif(not hasattr(get_ipython().readline, 'remove_history_item'),
'no remove_history_item')
def test_replace_multiline_hist_replaces_empty_line(self):
"""Test that multiline history skips empty line cells"""
ip = get_ipython()
ip.multiline_history = True
ip.readline.add_history(u'line0')
#start cell
hlen_b4_cell = ip.readline.get_current_history_length()
ip.readline.add_history('l€ne1')
ip.readline.add_history('line2')
hlen_b4_cell = ip._replace_rlhist_multiline(u'l€ne1\nline2',
hlen_b4_cell)
ip.readline.add_history('')
hlen_b4_cell = ip._replace_rlhist_multiline(u'', hlen_b4_cell)
ip.readline.add_history('l€ne3')
hlen_b4_cell = ip._replace_rlhist_multiline(u'l€ne3', hlen_b4_cell)
ip.readline.add_history(' ')
hlen_b4_cell = ip._replace_rlhist_multiline(' ', hlen_b4_cell)
ip.readline.add_history('\t')
ip.readline.add_history('\t ')
hlen_b4_cell = ip._replace_rlhist_multiline('\t', hlen_b4_cell)
ip.readline.add_history('line4')
hlen_b4_cell = ip._replace_rlhist_multiline(u'line4', hlen_b4_cell)
self.assertEquals(ip.readline.get_current_history_length(),
hlen_b4_cell)
hist = self.rl_hist_entries(ip.readline, 4)
# expect no empty cells in history
self.assertEquals(hist, ['line0', 'l€ne1\nline2', 'l€ne3', 'line4'])