##// END OF EJS Templates
formatter
formatter

File last commit:

r27272:e7fd431d
r27746:46fd9a39
Show More
test_formatters.py
532 lines | 13.9 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
Min RK
JSON formatter expects JSONable dict/list...
r19557 import warnings
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 from math import pi
try:
import numpy
except:
numpy = None
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 import pytest
Robert Kern
ENH: Implement and test the default pretty formatter.
r3209
Min RK
JSON formatter expects JSONable dict/list...
r19557 from IPython import get_ipython
Min RK
update dependency imports...
r21253 from traitlets.config import Config
Brian E. Granger
Adding PDFFormatter and kernel side handling of PDF display data.
r15121 from IPython.core.formatters import (
Min RK
test IPythonDisplayFormatter
r19384 PlainTextFormatter, HTMLFormatter, PDFFormatter, _mod_name_key,
Min RK
JSON formatter expects JSONable dict/list...
r19557 DisplayFormatter, JSONFormatter,
Brian E. Granger
Adding PDFFormatter and kernel side handling of PDF display data.
r15121 )
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
MinRK
show tracebacks for errors in formatters...
r18025 class BadRepr(object):
def __repr__(self):
raise ValueError("bad repr")
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)
Matthias Bussonnier
Remove some nose
r26707 assert f(A()) == "foo"
assert f(B()) == "B()"
assert 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
Matthias Bussonnier
Remove some nose
r26707 assert f(A()) == "A()"
assert f(B()) == "B()"
assert 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()
Matthias Bussonnier
Remove some nose
r26707 assert f(pi) == repr(pi)
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = 0
if numpy:
po = numpy.get_printoptions()
Matthias Bussonnier
Remove some nose
r26707 assert po["precision"] == 0
assert f(pi) == "3"
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 f.float_precision = 2
if numpy:
po = numpy.get_printoptions()
Matthias Bussonnier
Remove some nose
r26707 assert po["precision"] == 2
assert f(pi) == "3.14"
f.float_precision = "%g"
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 if numpy:
po = numpy.get_printoptions()
Matthias Bussonnier
Remove some nose
r26707 assert po["precision"] == 2
assert f(pi) == "3.14159"
f.float_precision = "%e"
assert f(pi) == "3.141593e+00"
f.float_precision = ""
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 if numpy:
po = numpy.get_printoptions()
Matthias Bussonnier
Remove some nose
r26707 assert po["precision"] == 8
assert 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):
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 f.float_precision = p
pytest.raises(ValueError, set_fp, "%")
pytest.raises(ValueError, set_fp, "%.3f%i")
pytest.raises(ValueError, set_fp, "foo")
pytest.raises(ValueError, set_fp, -1)
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
MinRK
exercise formatter.for_type in tests
r13655 def test_for_type():
f = PlainTextFormatter()
MinRK
more formatter type lookup tests
r13783 # initial return, None
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type(C, foo_printer) is None
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type(C) is foo_printer
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type(C) is foo_printer
MinRK
add lookup logic based on apptools.type_registry...
r13781 # None should do the same
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 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()
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
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type(type_str, foo_printer) is None
MinRK
add lookup logic based on apptools.type_registry...
r13781 # no func queries
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 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
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
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type_by_name(mod, "C", foo_printer) is None
MinRK
exercise formatter.for_type in tests
r13655 # no func queries
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type_by_name(mod, "C") is foo_printer
MinRK
exercise formatter.for_type in tests
r13655 # shouldn't change anything
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.for_type_by_name(mod, "C") is foo_printer
MinRK
add lookup logic based on apptools.type_registry...
r13781 # None should do the same
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 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()
MinRK
more formatter type lookup tests
r13783 f.for_type(C, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup(C()) is foo_printer
with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.lookup(A())
def test_lookup_string():
f = PlainTextFormatter()
type_str = '%s.%s' % (C.__module__, 'C')
f.for_type(type_str, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup(C()) is foo_printer
MinRK
more formatter type lookup tests
r13783 # should move from deferred to imported dict
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert _mod_name_key(C) not in f.deferred_printers
assert C in f.type_printers
MinRK
more formatter type lookup tests
r13783
def test_lookup_by_type():
f = PlainTextFormatter()
f.for_type(C, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup_by_type(C) is foo_printer
with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 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
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert _mod_name_key(C) in f.deferred_printers
assert C not in f.type_printers
MinRK
add lookup logic based on apptools.type_registry...
r13781
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup_by_type(type_str) is foo_printer
MinRK
another pass on formatter lookup...
r13788 # lookup by string doesn't cause import
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert _mod_name_key(C) in f.deferred_printers
assert C not in f.type_printers
MinRK
another pass on formatter lookup...
r13788
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup_by_type(C) is foo_printer
MinRK
more formatter type lookup tests
r13783 # should move from deferred to imported dict
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert _mod_name_key(C) not in f.deferred_printers
assert C in f.type_printers
MinRK
more formatter type lookup tests
r13783
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')
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert C in f
assert type_str in f
MinRK
another pass on formatter lookup...
r13788
def test_string_in_formatter():
f = PlainTextFormatter()
type_str = '%s.%s' % (C.__module__, 'C')
f.for_type(type_str, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert type_str in f
assert C in f
MinRK
another pass on formatter lookup...
r13788
MinRK
more formatter type lookup tests
r13783 def test_pop():
f = PlainTextFormatter()
f.for_type(C, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.lookup_by_type(C) is foo_printer
assert f.pop(C, None) is foo_printer
MinRK
another pass on formatter lookup...
r13788 f.for_type(C, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.pop(C) is foo_printer
with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.lookup_by_type(C)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.pop(C)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.pop(A)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.pop(A, None) is 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')
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.pop(type_str)
f.for_type(type_str, foo_printer)
f.pop(type_str)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.lookup_by_type(C)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.pop(type_str)
f.for_type(C, foo_printer)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.pop(type_str, None) is foo_printer
with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.lookup_by_type(C)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 with pytest.raises(KeyError):
MinRK
more formatter type lookup tests
r13783 f.pop(type_str)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert f.pop(type_str, None) is None
MinRK
another pass on formatter lookup...
r13788
MinRK
more formatter type lookup tests
r13783
MinRK
show tracebacks for errors in formatters...
r18025 def test_error_method():
MinRK
warn on failed formatter calls
r13977 f = HTMLFormatter()
class BadHTML(object):
def _repr_html_(self):
MinRK
show tracebacks for errors in formatters...
r18025 raise ValueError("Bad HTML")
MinRK
warn on failed formatter calls
r13977 bad = BadHTML()
with capture_output() as captured:
result = f(bad)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "Traceback" in captured.stdout
assert "Bad HTML" in captured.stdout
assert "_repr_html_" in captured.stdout
MinRK
warn on failed formatter calls
r13977
MinRK
test formatter raising NotImplementedError
r14636 def test_nowarn_notimplemented():
f = HTMLFormatter()
class HTMLNotImplemented(object):
def _repr_html_(self):
raise NotImplementedError
h = HTMLNotImplemented()
with capture_output() as captured:
result = f(h)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
Matthias Bussonnier
Remove some nose
r26707 assert "" == captured.stderr
assert "" == captured.stdout
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)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "Traceback" in captured.stdout
assert "NameError" in captured.stdout
assert "name_error" in captured.stdout
MinRK
warn on failed formatter calls
r13977
MinRK
show tracebacks for errors in formatters...
r18025 def test_error_pretty_method():
MinRK
warn on failed formatter calls
r13977 f = PlainTextFormatter()
class BadPretty(object):
def _repr_pretty_(self):
return "hello"
bad = BadPretty()
with capture_output() as captured:
result = f(bad)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "Traceback" in captured.stdout
assert "_repr_pretty_" in captured.stdout
assert "given" in captured.stdout
assert "argument" in captured.stdout
MinRK
show tracebacks for errors in formatters...
r18025
def test_bad_repr_traceback():
f = PlainTextFormatter()
bad = BadRepr()
with capture_output() as captured:
result = f(bad)
# catches error, returns None
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "Traceback" in captured.stdout
assert "__repr__" in captured.stdout
assert "ValueError" in captured.stdout
MinRK
show tracebacks for errors in formatters...
r18025
MinRK
warn on failed formatter calls
r13977
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()
Matthias Bussonnier
Remove some nose
r26707 assert f(pdf) == "PDF"
MinRK
require print_method to be a bound method...
r15216
def test_print_method_bound():
f = HTMLFormatter()
class MyHTML(object):
def _repr_html_(self):
return "hello"
with capture_output() as captured:
result = f(MyHTML)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "FormatterWarning" not in captured.stderr
MinRK
require print_method to be a bound method...
r15216
with capture_output() as captured:
result = f(MyHTML())
Matthias Bussonnier
Remove some nose
r26707 assert result == "hello"
assert captured.stderr == ""
MinRK
require print_method to be a bound method...
r15216
Min RK
only check for formatters on instances...
r19026 def test_print_method_weird():
class TextMagicHat(object):
def __getattr__(self, key):
return key
f = HTMLFormatter()
Matthias Bussonnier
Remove some nose
r26707
Min RK
only check for formatters on instances...
r19026 text_hat = TextMagicHat()
Matthias Bussonnier
Remove some nose
r26707 assert text_hat._repr_html_ == "_repr_html_"
Min RK
only check for formatters on instances...
r19026 with capture_output() as captured:
result = f(text_hat)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "FormatterWarning" not in captured.stderr
Min RK
only check for formatters on instances...
r19026
class CallableMagicHat(object):
def __getattr__(self, key):
return lambda : key
call_hat = CallableMagicHat()
with capture_output() as captured:
result = f(call_hat)
Matthias Bussonnier
Remove some nose
r26707
Matthias Bussonnier
Update IPython/core/tests/test_formatters.py...
r26733 assert result is None
Min RK
only check for formatters on instances...
r19026
class BadReprArgs(object):
def _repr_html_(self, extra, args):
return "html"
bad = BadReprArgs()
with capture_output() as captured:
result = f(bad)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
assert "FormatterWarning" not in captured.stderr
Min RK
only check for formatters on instances...
r19026
MinRK
require print_method to be a bound method...
r15216 def test_format_config():
"""config objects don't pretend to support fancy reprs with lazy attrs"""
f = HTMLFormatter()
cfg = Config()
with capture_output() as captured:
result = f(cfg)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
Matthias Bussonnier
Remove some nose
r26707 assert captured.stderr == ""
MinRK
require print_method to be a bound method...
r15216
with capture_output() as captured:
result = f(Config)
Samuel Gaist
[core][tests][formatters] Remove nose
r26894 assert result is None
Matthias Bussonnier
Remove some nose
r26707 assert captured.stderr == ""
Min RK
make pretty.max_seq_length configurable...
r18518
def test_pretty_max_seq_length():
f = PlainTextFormatter(max_seq_length=1)
lis = list(range(3))
text = f(lis)
Matthias Bussonnier
Remove some nose
r26707 assert text == "[0, ...]"
Min RK
make pretty.max_seq_length configurable...
r18518 f.max_seq_length = 0
text = f(lis)
Matthias Bussonnier
Remove some nose
r26707 assert text == "[0, 1, 2]"
Min RK
make pretty.max_seq_length configurable...
r18518 text = f(list(range(1024)))
lines = text.splitlines()
Matthias Bussonnier
Remove some nose
r26707 assert len(lines) == 1024
Min RK
test IPythonDisplayFormatter
r19384
def test_ipython_display_formatter():
"""Objects with _ipython_display_ defined bypass other formatters"""
f = get_ipython().display_formatter
catcher = []
class SelfDisplaying(object):
def _ipython_display_(self):
catcher.append(self)
class NotSelfDisplaying(object):
def __repr__(self):
return "NotSelfDisplaying"
def _ipython_display_(self):
raise NotImplementedError
Min RK
enable IPython formatter when testing it
r23310 save_enabled = f.ipython_display_formatter.enabled
f.ipython_display_formatter.enabled = True
Min RK
test IPythonDisplayFormatter
r19384 yes = SelfDisplaying()
no = NotSelfDisplaying()
Matthias Bussonnier
Remove some nose
r26707
Min RK
test IPythonDisplayFormatter
r19384 d, md = f.format(no)
Matthias Bussonnier
Remove some nose
r26707 assert d == {"text/plain": repr(no)}
assert md == {}
assert catcher == []
Min RK
test IPythonDisplayFormatter
r19384 d, md = f.format(yes)
Matthias Bussonnier
Remove some nose
r26707 assert d == {}
assert md == {}
assert catcher == [yes]
Min RK
test IPythonDisplayFormatter
r19384
Min RK
enable IPython formatter when testing it
r23310 f.ipython_display_formatter.enabled = save_enabled
Min RK
Define `_repr_mimebundle_`...
r23578 def test_repr_mime():
class HasReprMime(object):
Matthias Bussonnier
Pass down include and exclude as kwarg to repr_mimebundle
r23618 def _repr_mimebundle_(self, include=None, exclude=None):
Min RK
Define `_repr_mimebundle_`...
r23578 return {
'application/json+test.v2': {
'x': 'y'
Matthias Bussonnier
Respect the ignore and include keyword in display
r23612 },
'plain/text' : '<HasReprMime>',
'image/png' : 'i-overwrite'
Min RK
Define `_repr_mimebundle_`...
r23578 }
Matthias Bussonnier
Respect the ignore and include keyword in display
r23612
def _repr_png_(self):
return 'should-be-overwritten'
Min RK
Define `_repr_mimebundle_`...
r23578 def _repr_html_(self):
return '<b>hi!</b>'
f = get_ipython().display_formatter
html_f = f.formatters['text/html']
save_enabled = html_f.enabled
html_f.enabled = True
obj = HasReprMime()
d, md = f.format(obj)
html_f.enabled = save_enabled
Matthias Bussonnier
Remove some nose
r26707 assert sorted(d) == [
"application/json+test.v2",
"image/png",
"plain/text",
"text/html",
"text/plain",
]
assert md == {}
Matthias Bussonnier
Respect the ignore and include keyword in display
r23612
Matthias Bussonnier
Remove some nose
r26707 d, md = f.format(obj, include={"image/png"})
assert list(d.keys()) == [
"image/png"
], "Include should filter out even things from repr_mimebundle"
assert d["image/png"] == "i-overwrite", "_repr_mimebundle_ take precedence"
Min RK
Define `_repr_mimebundle_`...
r23578
Matthias Bussonnier
Document _repr_mimebundle_...
r23674
def test_pass_correct_include_exclude():
class Tester(object):
def __init__(self, include=None, exclude=None):
self.include = include
self.exclude = exclude
def _repr_mimebundle_(self, include, exclude, **kwargs):
if include and (include != self.include):
raise ValueError('include got modified: display() may be broken.')
if exclude and (exclude != self.exclude):
raise ValueError('exclude got modified: display() may be broken.')
return None
include = {'a', 'b', 'c'}
exclude = {'c', 'e' , 'f'}
f = get_ipython().display_formatter
f.format(Tester(include=include, exclude=exclude), include=include, exclude=exclude)
f.format(Tester(exclude=exclude), exclude=exclude)
f.format(Tester(include=include), include=include)
Min RK
Define `_repr_mimebundle_`...
r23578 def test_repr_mime_meta():
class HasReprMimeMeta(object):
Matthias Bussonnier
Pass down include and exclude as kwarg to repr_mimebundle
r23618 def _repr_mimebundle_(self, include=None, exclude=None):
Min RK
Define `_repr_mimebundle_`...
r23578 data = {
'image/png': 'base64-image-data',
}
metadata = {
'image/png': {
'width': 5,
'height': 10,
}
}
return (data, metadata)
f = get_ipython().display_formatter
obj = HasReprMimeMeta()
d, md = f.format(obj)
Matthias Bussonnier
Remove some nose
r26707 assert sorted(d) == ["image/png", "text/plain"]
assert md == {
"image/png": {
"width": 5,
"height": 10,
Min RK
Define `_repr_mimebundle_`...
r23578 }
Matthias Bussonnier
Remove some nose
r26707 }
Thomas Kluyver
Ensure that MimeBundleFormatter always returns a 2-tuple
r24042
def test_repr_mime_failure():
class BadReprMime(object):
def _repr_mimebundle_(self, include=None, exclude=None):
raise RuntimeError
f = get_ipython().display_formatter
obj = BadReprMime()
d, md = f.format(obj)
Matthias Bussonnier
Remove some nose
r26707 assert "text/plain" in d