##// END OF EJS Templates
flush replies when entering an eventloop...
flush replies when entering an eventloop avoids possible hangs when the GUI eventloop prevents queued replies from being sent

File last commit:

r15121:f86e628d
r15232:158d7616
Show More
test_formatters.py
291 lines | 8.2 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_formatters.py
MinRK
warn on failed formatter calls
r13977 """Tests for the Formatters."""
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 from math import pi
try:
import numpy
except:
numpy = None
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209 import nose.tools as nt
Brian E. Granger
Adding PDFFormatter and kernel side handling of PDF display data.
r15121 from IPython.core.formatters import (
PlainTextFormatter, HTMLFormatter, PDFFormatter, _mod_name_key
)
MinRK
warn on failed formatter calls
r13977 from IPython.utils.io import capture_output
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209
class A(object):
def __repr__(self):
return 'A()'
class B(A):
def __repr__(self):
return 'B()'
MinRK
add lookup logic based on apptools.type_registry...
r13781 class C:
pass
Robert Kern
BUG: Fix pretty-printing for overzealous objects that will return something non-callable for any requested attribute (thus confusing hasattr).
r6268 class BadPretty(object):
_repr_pretty_ = None
class GoodPretty(object):
def _repr_pretty_(self, pp, cycle):
pp.text('foo')
def __repr__(self):
return 'GoodPretty()'
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209 def foo_printer(obj, pp, cycle):
pp.text('foo')
def test_pretty():
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f = PlainTextFormatter()
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209 f.for_type(A, foo_printer)
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(f(A()), 'foo')
nt.assert_equal(f(B()), 'foo')
nt.assert_equal(f(GoodPretty()), 'foo')
Robert Kern
BUG: Fix pretty-printing for overzealous objects that will return something non-callable for any requested attribute (thus confusing hasattr).
r6268 # Just don't raise an exception for the following:
f(BadPretty())
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209 f.pprint = False
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(f(A()), 'A()')
nt.assert_equal(f(B()), 'B()')
nt.assert_equal(f(GoodPretty()), 'GoodPretty()')
Robert Kern
BUG: Fix pretty-printing for overzealous objects that will return something non-callable for any requested attribute (thus confusing hasattr).
r6268
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209
def test_deferred():
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f = PlainTextFormatter()
def test_precision():
"""test various values for float_precision."""
f = PlainTextFormatter()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(f(pi), repr(pi))
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = 0
if numpy:
po = numpy.get_printoptions()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(po['precision'], 0)
nt.assert_equal(f(pi), '3')
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = 2
if numpy:
po = numpy.get_printoptions()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(po['precision'], 2)
nt.assert_equal(f(pi), '3.14')
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = '%g'
if numpy:
po = numpy.get_printoptions()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(po['precision'], 2)
nt.assert_equal(f(pi), '3.14159')
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = '%e'
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(f(pi), '3.141593e+00')
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = ''
if numpy:
po = numpy.get_printoptions()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(po['precision'], 8)
nt.assert_equal(f(pi), repr(pi))
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
def test_bad_precision():
"""test various invalid values for float_precision."""
f = PlainTextFormatter()
def set_fp(p):
f.float_precision=p
nt.assert_raises(ValueError, set_fp, '%')
nt.assert_raises(ValueError, set_fp, '%.3f%i')
nt.assert_raises(ValueError, set_fp, 'foo')
nt.assert_raises(ValueError, set_fp, -1)
MinRK
exercise formatter.for_type in tests
r13655 def test_for_type():
f = PlainTextFormatter()
MinRK
more formatter type lookup tests
r13783 # initial return, None
nt.assert_is(f.for_type(C, foo_printer), None)
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type(C), foo_printer)
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type(C), foo_printer)
MinRK
add lookup logic based on apptools.type_registry...
r13781 # None should do the same
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type(C, None), foo_printer)
nt.assert_is(f.for_type(C, None), foo_printer)
MinRK
exercise formatter.for_type in tests
r13655
MinRK
add lookup logic based on apptools.type_registry...
r13781 def test_for_type_string():
MinRK
exercise formatter.for_type in tests
r13655 f = PlainTextFormatter()
mod = C.__module__
MinRK
add lookup logic based on apptools.type_registry...
r13781 type_str = '%s.%s' % (C.__module__, 'C')
MinRK
more formatter type lookup tests
r13783 # initial return, None
nt.assert_is(f.for_type(type_str, foo_printer), None)
MinRK
add lookup logic based on apptools.type_registry...
r13781 # no func queries
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type(type_str), foo_printer)
nt.assert_in(_mod_name_key(C), f.deferred_printers)
nt.assert_is(f.for_type(C), foo_printer)
nt.assert_not_in(_mod_name_key(C), f.deferred_printers)
nt.assert_in(C, f.type_printers)
MinRK
add lookup logic based on apptools.type_registry...
r13781
def test_for_type_by_name():
f = PlainTextFormatter()
mod = C.__module__
MinRK
exercise formatter.for_type in tests
r13655
MinRK
more formatter type lookup tests
r13783 # initial return, None
nt.assert_is(f.for_type_by_name(mod, 'C', foo_printer), None)
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type_by_name(mod, 'C'), foo_printer)
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type_by_name(mod, 'C'), foo_printer)
MinRK
add lookup logic based on apptools.type_registry...
r13781 # None should do the same
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.for_type_by_name(mod, 'C', None), foo_printer)
nt.assert_is(f.for_type_by_name(mod, 'C', None), foo_printer)
MinRK
exercise formatter.for_type in tests
r13655
MinRK
add lookup logic based on apptools.type_registry...
r13781 def test_lookup():
f = PlainTextFormatter()
MinRK
more formatter type lookup tests
r13783 f.for_type(C, foo_printer)
nt.assert_is(f.lookup(C()), foo_printer)
with nt.assert_raises(KeyError):
f.lookup(A())
def test_lookup_string():
f = PlainTextFormatter()
type_str = '%s.%s' % (C.__module__, 'C')
f.for_type(type_str, foo_printer)
nt.assert_is(f.lookup(C()), foo_printer)
# should move from deferred to imported dict
nt.assert_not_in(_mod_name_key(C), f.deferred_printers)
nt.assert_in(C, f.type_printers)
def test_lookup_by_type():
f = PlainTextFormatter()
f.for_type(C, foo_printer)
nt.assert_is(f.lookup_by_type(C), foo_printer)
type_str = '%s.%s' % (C.__module__, 'C')
with nt.assert_raises(KeyError):
f.lookup_by_type(A)
def test_lookup_by_type_string():
f = PlainTextFormatter()
type_str = '%s.%s' % (C.__module__, 'C')
f.for_type(type_str, foo_printer)
# verify insertion
nt.assert_in(_mod_name_key(C), f.deferred_printers)
nt.assert_not_in(C, f.type_printers)
MinRK
add lookup logic based on apptools.type_registry...
r13781
MinRK
another pass on formatter lookup...
r13788 nt.assert_is(f.lookup_by_type(type_str), foo_printer)
# lookup by string doesn't cause import
nt.assert_in(_mod_name_key(C), f.deferred_printers)
nt.assert_not_in(C, f.type_printers)
MinRK
more formatter type lookup tests
r13783 nt.assert_is(f.lookup_by_type(C), foo_printer)
# should move from deferred to imported dict
nt.assert_not_in(_mod_name_key(C), f.deferred_printers)
nt.assert_in(C, f.type_printers)
MinRK
another pass on formatter lookup...
r13788 def test_in_formatter():
f = PlainTextFormatter()
f.for_type(C, foo_printer)
type_str = '%s.%s' % (C.__module__, 'C')
nt.assert_in(C, f)
nt.assert_in(type_str, f)
def test_string_in_formatter():
f = PlainTextFormatter()
type_str = '%s.%s' % (C.__module__, 'C')
f.for_type(type_str, foo_printer)
nt.assert_in(type_str, f)
nt.assert_in(C, f)
MinRK
more formatter type lookup tests
r13783 def test_pop():
f = PlainTextFormatter()
f.for_type(C, foo_printer)
nt.assert_is(f.lookup_by_type(C), foo_printer)
MinRK
another pass on formatter lookup...
r13788 nt.assert_is(f.pop(C, None), foo_printer)
f.for_type(C, foo_printer)
nt.assert_is(f.pop(C), foo_printer)
MinRK
more formatter type lookup tests
r13783 with nt.assert_raises(KeyError):
f.lookup_by_type(C)
with nt.assert_raises(KeyError):
f.pop(C)
with nt.assert_raises(KeyError):
f.pop(A)
MinRK
another pass on formatter lookup...
r13788 nt.assert_is(f.pop(A, None), None)
MinRK
more formatter type lookup tests
r13783
def test_pop_string():
f = PlainTextFormatter()
MinRK
add lookup logic based on apptools.type_registry...
r13781 type_str = '%s.%s' % (C.__module__, 'C')
MinRK
more formatter type lookup tests
r13783 with nt.assert_raises(KeyError):
f.pop(type_str)
f.for_type(type_str, foo_printer)
f.pop(type_str)
with nt.assert_raises(KeyError):
f.lookup_by_type(C)
with nt.assert_raises(KeyError):
f.pop(type_str)
f.for_type(C, foo_printer)
MinRK
another pass on formatter lookup...
r13788 nt.assert_is(f.pop(type_str, None), foo_printer)
MinRK
more formatter type lookup tests
r13783 with nt.assert_raises(KeyError):
f.lookup_by_type(C)
with nt.assert_raises(KeyError):
f.pop(type_str)
MinRK
another pass on formatter lookup...
r13788 nt.assert_is(f.pop(type_str, None), None)
MinRK
more formatter type lookup tests
r13783
MinRK
warn on failed formatter calls
r13977 def test_warn_error_method():
f = HTMLFormatter()
class BadHTML(object):
def _repr_html_(self):
return 1/0
bad = BadHTML()
with capture_output() as captured:
result = f(bad)
nt.assert_is(result, None)
MinRK
use real Warnings for formatter errors...
r14637 nt.assert_in("FormatterWarning", captured.stderr)
MinRK
warn on failed formatter calls
r13977 nt.assert_in("text/html", captured.stderr)
nt.assert_in("zero", captured.stderr)
MinRK
test formatter raising NotImplementedError
r14636 def test_nowarn_notimplemented():
f = HTMLFormatter()
class HTMLNotImplemented(object):
def _repr_html_(self):
raise NotImplementedError
return 1/0
h = HTMLNotImplemented()
with capture_output() as captured:
result = f(h)
nt.assert_is(result, None)
MinRK
use real Warnings for formatter errors...
r14637 nt.assert_not_in("FormatterWarning", captured.stderr)
MinRK
test formatter raising NotImplementedError
r14636
MinRK
warn on failed formatter calls
r13977 def test_warn_error_for_type():
f = HTMLFormatter()
f.for_type(int, lambda i: name_error)
with capture_output() as captured:
result = f(5)
nt.assert_is(result, None)
MinRK
use real Warnings for formatter errors...
r14637 nt.assert_in("FormatterWarning", captured.stderr)
MinRK
warn on failed formatter calls
r13977 nt.assert_in("text/html", captured.stderr)
nt.assert_in("name_error", captured.stderr)
def test_warn_error_pretty_method():
f = PlainTextFormatter()
class BadPretty(object):
def _repr_pretty_(self):
return "hello"
bad = BadPretty()
with capture_output() as captured:
result = f(bad)
nt.assert_is(result, None)
MinRK
use real Warnings for formatter errors...
r14637 nt.assert_in("FormatterWarning", captured.stderr)
MinRK
warn on failed formatter calls
r13977 nt.assert_in("text/plain", captured.stderr)
nt.assert_in("argument", captured.stderr)
Brian E. Granger
Adding PDFFormatter and kernel side handling of PDF display data.
r15121 class MakePDF(object):
def _repr_pdf_(self):
return 'PDF'
MinRK
exercise formatter.for_type in tests
r13655
Brian E. Granger
Adding PDFFormatter and kernel side handling of PDF display data.
r15121 def test_pdf_formatter():
pdf = MakePDF()
f = PDFFormatter()
nt.assert_equal(f(pdf), 'PDF')