test_formatters.py
153 lines
| 3.8 KiB
| text/x-python
|
PythonLexer
Robert Kern
|
r3209 | """Tests for the Formatters. | ||
""" | ||||
MinRK
|
r3350 | from math import pi | ||
try: | ||||
import numpy | ||||
except: | ||||
numpy = None | ||||
Robert Kern
|
r3209 | import nose.tools as nt | ||
MinRK
|
r13781 | from IPython.core.formatters import PlainTextFormatter, _mod_name_key | ||
Robert Kern
|
r3209 | |||
class A(object): | ||||
def __repr__(self): | ||||
return 'A()' | ||||
class B(A): | ||||
def __repr__(self): | ||||
return 'B()' | ||||
MinRK
|
r13781 | class C: | ||
pass | ||||
Robert Kern
|
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
|
r3209 | def foo_printer(obj, pp, cycle): | ||
pp.text('foo') | ||||
def test_pretty(): | ||||
MinRK
|
r3350 | f = PlainTextFormatter() | ||
Robert Kern
|
r3209 | f.for_type(A, foo_printer) | ||
Bradley M. Froehle
|
r7875 | nt.assert_equal(f(A()), 'foo') | ||
nt.assert_equal(f(B()), 'foo') | ||||
nt.assert_equal(f(GoodPretty()), 'foo') | ||||
Robert Kern
|
r6268 | # Just don't raise an exception for the following: | ||
f(BadPretty()) | ||||
Robert Kern
|
r3209 | f.pprint = False | ||
Bradley M. Froehle
|
r7875 | nt.assert_equal(f(A()), 'A()') | ||
nt.assert_equal(f(B()), 'B()') | ||||
nt.assert_equal(f(GoodPretty()), 'GoodPretty()') | ||||
Robert Kern
|
r6268 | |||
Robert Kern
|
r3209 | |||
def test_deferred(): | ||||
MinRK
|
r3350 | f = PlainTextFormatter() | ||
def test_precision(): | ||||
"""test various values for float_precision.""" | ||||
f = PlainTextFormatter() | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(f(pi), repr(pi)) | ||
MinRK
|
r3350 | f.float_precision = 0 | ||
if numpy: | ||||
po = numpy.get_printoptions() | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(po['precision'], 0) | ||
nt.assert_equal(f(pi), '3') | ||||
MinRK
|
r3350 | f.float_precision = 2 | ||
if numpy: | ||||
po = numpy.get_printoptions() | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(po['precision'], 2) | ||
nt.assert_equal(f(pi), '3.14') | ||||
MinRK
|
r3350 | f.float_precision = '%g' | ||
if numpy: | ||||
po = numpy.get_printoptions() | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(po['precision'], 2) | ||
nt.assert_equal(f(pi), '3.14159') | ||||
MinRK
|
r3350 | f.float_precision = '%e' | ||
Bradley M. Froehle
|
r7875 | nt.assert_equal(f(pi), '3.141593e+00') | ||
MinRK
|
r3350 | f.float_precision = '' | ||
if numpy: | ||||
po = numpy.get_printoptions() | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(po['precision'], 8) | ||
nt.assert_equal(f(pi), repr(pi)) | ||||
MinRK
|
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
|
r3209 | |||
MinRK
|
r13655 | def test_for_type(): | ||
f = PlainTextFormatter() | ||||
# initial return is None | ||||
MinRK
|
r13781 | assert f.for_type(C, foo_printer) is None | ||
MinRK
|
r13655 | # no func queries | ||
MinRK
|
r13781 | assert f.for_type(C) is foo_printer | ||
MinRK
|
r13655 | # shouldn't change anything | ||
MinRK
|
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
|
r13655 | |||
MinRK
|
r13781 | def test_for_type_string(): | ||
MinRK
|
r13655 | f = PlainTextFormatter() | ||
mod = C.__module__ | ||||
MinRK
|
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
|
r13655 | |||
# initial return is None | ||||
MinRK
|
r13781 | assert f.for_type_by_name(mod, 'C', foo_printer) is None | ||
MinRK
|
r13655 | # no func queries | ||
MinRK
|
r13781 | assert f.for_type_by_name(mod, 'C') is foo_printer | ||
MinRK
|
r13655 | # shouldn't change anything | ||
MinRK
|
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
|
r13655 | |||
MinRK
|
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
|
r13655 | |||