##// END OF EJS Templates
Backport PR #2717: One liner to fix debugger printing stack traces when lines of context are larger than source....
Backport PR #2717: One liner to fix debugger printing stack traces when lines of context are larger than source. Correctly print stack traces when context is larger than lines of source. To test: ``` In [6]: def bar(): ...: return 20 ...: ``` Before: ``` In [7]: ipdb.runcall(bar) <ipython-input-6-d0ed3bd5e16c>(2)bar() 0 return 20 ``` And here's after: ``` In [6]: ipdb.runcall(bar) <ipython-input-5-d0ed3bd5e16c>(2)bar() 1 def bar(): ----> 2 return 20 ``` Replaces gh-2697. (Adds a test.)

File last commit:

r9848:2c829199
r9850:72c7e714
Show More
test_pretty.py
75 lines | 2.3 KiB | text/x-python | PythonLexer
"""Tests for IPython.lib.pretty.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2011, the IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from __future__ import print_function
# Third-party imports
import nose.tools as nt
# Our own imports
from IPython.lib import pretty
from IPython.testing.decorators import skip_without
#-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
class MyList(object):
def __init__(self, content):
self.content = content
def _repr_pretty_(self, p, cycle):
if cycle:
p.text("MyList(...)")
else:
with p.group(3, "MyList(", ")"):
for (i, child) in enumerate(self.content):
if i:
p.text(",")
p.breakable()
else:
p.breakable("")
p.pretty(child)
class MyDict(dict):
def _repr_pretty_(self, p, cycle):
p.text("MyDict(...)")
def test_indentation():
"""Test correct indentation in groups"""
count = 40
gotoutput = pretty.pretty(MyList(range(count)))
expectedoutput = "MyList(\n" + ",\n".join(" %d" % i for i in range(count)) + ")"
nt.assert_equals(gotoutput, expectedoutput)
def test_dispatch():
"""
Test correct dispatching: The _repr_pretty_ method for MyDict
must be found before the registered printer for dict.
"""
gotoutput = pretty.pretty(MyDict())
expectedoutput = "MyDict(...)"
nt.assert_equals(gotoutput, expectedoutput)
@skip_without('xxlimited')
def test_pprint_heap_allocated_type():
"""
Test that pprint works for heap allocated types.
"""
import xxlimited
output = pretty.pretty(xxlimited.Null)
nt.assert_equal(output, 'xxlimited.Null')