test_frontendbase.py
151 lines
| 4.7 KiB
| text/x-python
|
PythonLexer
Barry Wark
|
r1263 | # encoding: utf-8 | ||
"""This file contains unittests for the frontendbase module.""" | ||||
__docformat__ = "restructuredtext en" | ||||
Barry Wark
|
r1291 | #--------------------------------------------------------------------------- | ||
# 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. | ||||
#--------------------------------------------------------------------------- | ||||
#--------------------------------------------------------------------------- | ||||
# Imports | ||||
#--------------------------------------------------------------------------- | ||||
Barry Wark
|
r1263 | |||
import unittest | ||||
from IPython.frontend import frontendbase | ||||
from IPython.kernel.engineservice import EngineService | ||||
Barry Wark <barrywarkatgmaildotcom>
|
r1315 | class FrontEndCallbackChecker(frontendbase.AsyncFrontEndBase): | ||
Barry Wark
|
r1263 | """FrontEndBase subclass for checking callbacks""" | ||
def __init__(self, engine=None, history=None): | ||||
Barry Wark
|
r1291 | super(FrontEndCallbackChecker, self).__init__(engine=engine, | ||
history=history) | ||||
Barry Wark
|
r1263 | self.updateCalled = False | ||
self.renderResultCalled = False | ||||
self.renderErrorCalled = False | ||||
Barry Wark
|
r1303 | def update_cell_prompt(self, result, blockID=None): | ||
Barry Wark
|
r1263 | self.updateCalled = True | ||
return result | ||||
def render_result(self, result): | ||||
self.renderResultCalled = True | ||||
return result | ||||
def render_error(self, failure): | ||||
self.renderErrorCalled = True | ||||
return failure | ||||
Barry Wark <barrywarkatgmaildotcom>
|
r1315 | class TestAsyncFrontendBase(unittest.TestCase): | ||
Barry Wark
|
r1263 | def setUp(self): | ||
"""Setup the EngineService and FrontEndBase""" | ||||
self.fb = FrontEndCallbackChecker(engine=EngineService()) | ||||
Barry Wark
|
r1282 | def test_implements_IFrontEnd(self): | ||
Barry Wark
|
r1291 | assert(frontendbase.IFrontEnd.implementedBy( | ||
Barry Wark <barrywarkatgmaildotcom>
|
r1315 | frontendbase.AsyncFrontEndBase)) | ||
Barry Wark
|
r1263 | |||
Barry Wark
|
r1282 | def test_is_complete_returns_False_for_incomplete_block(self): | ||
Barry Wark
|
r1263 | """""" | ||
block = """def test(a):""" | ||||
assert(self.fb.is_complete(block) == False) | ||||
Barry Wark
|
r1282 | def test_is_complete_returns_True_for_complete_block(self): | ||
Barry Wark
|
r1263 | """""" | ||
block = """def test(a): pass""" | ||||
assert(self.fb.is_complete(block)) | ||||
block = """a=3""" | ||||
assert(self.fb.is_complete(block)) | ||||
Barry Wark
|
r1282 | def test_blockID_added_to_result(self): | ||
Barry Wark
|
r1263 | block = """3+3""" | ||
d = self.fb.execute(block, blockID='TEST_ID') | ||||
d.addCallback(self.checkBlockID, expected='TEST_ID') | ||||
Barry Wark
|
r1283 | def test_blockID_added_to_failure(self): | ||
block = "raise Exception()" | ||||
d = self.fb.execute(block,blockID='TEST_ID') | ||||
d.addErrback(self.checkFailureID, expected='TEST_ID') | ||||
Barry Wark
|
r1263 | def checkBlockID(self, result, expected=""): | ||
assert(result['blockID'] == expected) | ||||
Barry Wark
|
r1283 | def checkFailureID(self, failure, expected=""): | ||
assert(failure.blockID == expected) | ||||
Barry Wark
|
r1282 | def test_callbacks_added_to_execute(self): | ||
Barry Wark
|
r1263 | """test that | ||
update_cell_prompt | ||||
render_result | ||||
are added to execute request | ||||
""" | ||||
d = self.fb.execute("10+10") | ||||
d.addCallback(self.checkCallbacks) | ||||
def checkCallbacks(self, result): | ||||
assert(self.fb.updateCalled) | ||||
assert(self.fb.renderResultCalled) | ||||
Barry Wark
|
r1282 | def test_error_callback_added_to_execute(self): | ||
Barry Wark
|
r1263 | """test that render_error called on execution error""" | ||
d = self.fb.execute("raise Exception()") | ||||
d.addCallback(self.checkRenderError) | ||||
def checkRenderError(self, result): | ||||
assert(self.fb.renderErrorCalled) | ||||
Barry Wark
|
r1281 | def test_history_returns_expected_block(self): | ||
"""Make sure history browsing doesn't fail""" | ||||
blocks = ["a=1","a=2","a=3"] | ||||
for b in blocks: | ||||
d = self.fb.execute(b) | ||||
# d is now the deferred for the last executed block | ||||
d.addCallback(self.historyTests, blocks) | ||||
def historyTests(self, result, blocks): | ||||
"""historyTests""" | ||||
assert(len(blocks) >= 3) | ||||
assert(self.fb.get_history_previous("") == blocks[-2]) | ||||
assert(self.fb.get_history_previous("") == blocks[-3]) | ||||
assert(self.fb.get_history_next() == blocks[-2]) | ||||
def test_history_returns_none_at_startup(self): | ||||
"""test_history_returns_none_at_startup""" | ||||
assert(self.fb.get_history_previous("")==None) | ||||
assert(self.fb.get_history_next()==None) | ||||
Barry Wark
|
r1263 | |||