##// END OF EJS Templates
FEAT: Fast TB....
FEAT: Fast TB. Try to detect when one of the file we are trying to highlight is too big, and fallback on pre-8.0 traceback code, that avoids stack_data. You can configure the limit with: >>> from IPython.core import ultratb >>> ultratb.FAST_THRESHOLD = 200 We are trying to _guess_ whether the traceback we will render is in a file that will require to parse more than FAST_THRESHOLD lines, though it is actually difficult to get this value correctly, so in some case, the slow path may be used, even if files are longer than FAST_THRESHOLD, especially if the crashing code is at the beginning of the file.

File last commit:

r27087:0e59ae55
r28123:3362771d
Show More
test_hooks.py
76 lines | 2.3 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
"""Tests for CommandChainDispatcher."""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import pytest
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"""
fail1 = Fail("fail1")
fail2 = Fail("fail2")
dp = CommandChainDispatcher([(0, fail1), (10, fail2)])
with pytest.raises(TryNext) as e:
dp()
assert str(e.value) == "fail2"
assert fail1.called is True
assert fail2.called is True
def test_command_chain_dispatcher_fofo():
"""Test a mixture of failing and succeeding hooks."""
fail1 = Fail("fail1")
fail2 = Fail("fail2")
okay1 = Okay("okay1")
okay2 = Okay("okay2")
dp = CommandChainDispatcher([(0, fail1),
# (5, okay1), # add this later
(10, fail2),
(15, okay2)])
dp.add(okay1, 5)
assert dp() == "okay1"
assert fail1.called is True
assert okay1.called is True
assert fail2.called is False
assert okay2.called is False
def test_command_chain_dispatcher_eq_priority():
okay1 = Okay(u'okay1')
okay2 = Okay(u'okay2')
dp = CommandChainDispatcher([(1, okay1)])
dp.add(okay2, 1)