test_hooks.py
78 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
Bradley M. Froehle
|
r7336 | # -*- coding: utf-8 -*- | ||
"""Tests for CommandChainDispatcher.""" | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
from IPython.core.error import TryNext | ||||
from IPython.core.hooks import CommandChainDispatcher | ||||
#----------------------------------------------------------------------------- | ||||
# Local utilities | ||||
#----------------------------------------------------------------------------- | ||||
# Define two classes, one which succeeds and one which raises TryNext. Each | ||||
# sets the attribute `called` to True when it is called. | ||||
class Okay(object): | ||||
def __init__(self, message): | ||||
self.message = message | ||||
self.called = False | ||||
def __call__(self): | ||||
self.called = True | ||||
return self.message | ||||
class Fail(object): | ||||
def __init__(self, message): | ||||
self.message = message | ||||
self.called = False | ||||
def __call__(self): | ||||
self.called = True | ||||
raise TryNext(self.message) | ||||
#----------------------------------------------------------------------------- | ||||
# Test functions | ||||
#----------------------------------------------------------------------------- | ||||
def test_command_chain_dispatcher_ff(): | ||||
"""Test two failing hooks""" | ||||
Samuel Gaist
|
r26897 | fail1 = Fail("fail1") | ||
fail2 = Fail("fail2") | ||||
dp = CommandChainDispatcher([(0, fail1), (10, fail2)]) | ||||
Bradley M. Froehle
|
r7336 | |||
try: | ||||
dp() | ||||
except TryNext as e: | ||||
Samuel Gaist
|
r26897 | assert str(e) == "fail2" | ||
Bradley M. Froehle
|
r7336 | else: | ||
assert False, "Expected exception was not raised." | ||||
Samuel Gaist
|
r26897 | assert fail1.called is True | ||
assert fail2.called is True | ||||
Bradley M. Froehle
|
r7336 | |||
def test_command_chain_dispatcher_fofo(): | ||||
"""Test a mixture of failing and succeeding hooks.""" | ||||
Samuel Gaist
|
r26897 | fail1 = Fail("fail1") | ||
fail2 = Fail("fail2") | ||||
okay1 = Okay("okay1") | ||||
okay2 = Okay("okay2") | ||||
Bradley M. Froehle
|
r7336 | |||
dp = CommandChainDispatcher([(0, fail1), | ||||
# (5, okay1), # add this later | ||||
(10, fail2), | ||||
(15, okay2)]) | ||||
dp.add(okay1, 5) | ||||
Samuel Gaist
|
r26897 | assert dp() == "okay1" | ||
Bradley M. Froehle
|
r7336 | |||
Samuel Gaist
|
r26897 | assert fail1.called is True | ||
assert okay1.called is True | ||||
assert fail2.called is False | ||||
assert okay2.called is False | ||||
Thomas Kluyver
|
r7515 | |||
def test_command_chain_dispatcher_eq_priority(): | ||||
okay1 = Okay(u'okay1') | ||||
okay2 = Okay(u'okay2') | ||||
dp = CommandChainDispatcher([(1, okay1)]) | ||||
dp.add(okay2, 1) | ||||