##// END OF EJS Templates
add lookup logic based on apptools.type_registry...
add lookup logic based on apptools.type_registry adds - formatter.lookup(instance) - formatter.lookup_by_type(type_or_type_string) - formatter.pop(type_or_type_string) changes: - support 'module.name' in formatter.for_type

File last commit:

r13781:b62587d8
r13781:b62587d8
Show More
test_formatters.py
153 lines | 3.8 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_formatters.py
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209 """Tests for the Formatters.
"""
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
MinRK
add lookup logic based on apptools.type_registry...
r13781 from IPython.core.formatters import PlainTextFormatter, _mod_name_key
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)
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209
MinRK
exercise formatter.for_type in tests
r13655 def test_for_type():
f = PlainTextFormatter()
# initial return is None
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type(C, foo_printer) is None
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type(C) is foo_printer
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type(C) is foo_printer
# None should do the same
assert f.for_type(C, None) is foo_printer
assert f.for_type(C, None) is 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')
# initial return is None
assert f.for_type(type_str, foo_printer) is None
# no func queries
assert f.for_type(type_str) is foo_printer
assert _mod_name_key(C) in f.deferred_printers
assert f.for_type(C) is foo_printer
assert _mod_name_key(C) not in f.deferred_printers
assert C in f.type_printers
def test_for_type_by_name():
f = PlainTextFormatter()
mod = C.__module__
MinRK
exercise formatter.for_type in tests
r13655
# initial return is None
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type_by_name(mod, 'C', foo_printer) is None
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type_by_name(mod, 'C') is foo_printer
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
MinRK
add lookup logic based on apptools.type_registry...
r13781 assert f.for_type_by_name(mod, 'C') is foo_printer
# None should do the same
assert f.for_type_by_name(mod, 'C', None) is foo_printer
assert f.for_type_by_name(mod, 'C', None) is 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()
mod = C.__module__
c = C()
type_str = '%s.%s' % (C.__module__, 'C')
# initial return is None
assert f.for_type(type_str, foo_printer) is None
# no func queries
assert f.lookup(c) is foo_printer
MinRK
exercise formatter.for_type in tests
r13655