##// END OF EJS Templates
Merge pull request #10875 from ipython/auto-backport-of-pr-10870...
Merge pull request #10875 from ipython/auto-backport-of-pr-10870 Backport PR #10870 on branch 5.x

File last commit:

r23986:79b98c1b
r24020:f97ed74c merge
Show More
test_display.py
354 lines | 11.3 KiB | text/x-python | PythonLexer
Min RK
JSON formatter expects JSONable dict/list...
r19557 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
import json
Jerry Fowler
Issue 2053:...
r8077 import os
Matthias Bussonnier
Fake the Python 3 keyword only arguments.
r23594 import sys
Min RK
JSON formatter expects JSONable dict/list...
r19557 import warnings
Jerry Fowler
Issue 2053:...
r8077
import nose.tools as nt
from IPython.core import display
MinRK
test display.set_matplotlib_formats...
r15395 from IPython.core.getipython import get_ipython
Matthias Bussonnier
Backport PR #10813: Adding iteration to ProgressBar to make it a more useful utility
r23986 from IPython.utils.io import capture_output
Thomas Kluyver
Don't try to open temporary file twice in video embed test...
r22130 from IPython.utils.tempdir import NamedFileInTemporaryDirectory
Min RK
update dependency imports...
r21253 from IPython import paths as ipath
Kyle Kelley
Backport PR #10596 on branch 5.x...
r23718 from IPython.testing.tools import AssertPrints, AssertNotPrints
Jerry Fowler
Issue 2053:...
r8077
MinRK
test display.set_matplotlib_formats...
r15395 import IPython.testing.decorators as dec
Matthias Bussonnier
Fake the Python 3 keyword only arguments.
r23594 if sys.version_info < (3,):
import mock
else:
from unittest import mock
Jerry Fowler
Issue 2053:...
r8077 def test_image_size():
"""Simple test for display.Image(args, width=x,height=y)"""
thisurl = 'http://www.google.fr/images/srpr/logo3w.png'
img = display.Image(url=thisurl, width=200, height=200)
nt.assert_equal(u'<img src="%s" width="200" height="200"/>' % (thisurl), img._repr_html_())
img = display.Image(url=thisurl, width=200)
nt.assert_equal(u'<img src="%s" width="200"/>' % (thisurl), img._repr_html_())
img = display.Image(url=thisurl)
nt.assert_equal(u'<img src="%s"/>' % (thisurl), img._repr_html_())
Min RK
add unconfined, raw metadata to display.Image...
r20986 img = display.Image(url=thisurl, unconfined=True)
nt.assert_equal(u'<img src="%s" class="unconfined"/>' % (thisurl), img._repr_html_())
Jerry Fowler
Issue 2053:...
r8077
MinRK
test Image(retina=True)
r10804 def test_retina_png():
here = os.path.dirname(__file__)
img = display.Image(os.path.join(here, "2x2.png"), retina=True)
nt.assert_equal(img.height, 1)
nt.assert_equal(img.width, 1)
data, md = img._repr_png_()
nt.assert_equal(md['width'], 1)
nt.assert_equal(md['height'], 1)
def test_retina_jpeg():
here = os.path.dirname(__file__)
img = display.Image(os.path.join(here, "2x2.jpg"), retina=True)
nt.assert_equal(img.height, 1)
nt.assert_equal(img.width, 1)
data, md = img._repr_jpeg_()
nt.assert_equal(md['width'], 1)
nt.assert_equal(md['height'], 1)
Matthias Bussonnier
Fix Image when passing only data, and add tests....
r22013 def test_base64image():
display.Image("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94BCRQnOqNu0b4AAAAKSURBVAjXY2AAAAACAAHiIbwzAAAAAElFTkSuQmCC")
Jerry Fowler
Issue 2053:...
r8077 def test_image_filename_defaults():
'''test format constraint, and validity of jpeg and png'''
tpath = ipath.get_ipython_package_dir()
nt.assert_raises(ValueError, display.Image, filename=os.path.join(tpath, 'testing/tests/badformat.gif'),
embed=True)
nt.assert_raises(ValueError, display.Image)
nt.assert_raises(ValueError, display.Image, data='this is not an image', format='badformat', embed=True)
Julian Taylor
check the static path for build and install locations...
r14749 # check boths paths to allow packages to test at build and install time
Min RK
update some test skips for removed packages
r21251 imgfile = os.path.join(tpath, 'core/tests/2x2.png')
Jerry Fowler
Issue 2053:...
r8077 img = display.Image(filename=imgfile)
nt.assert_equal('png', img.format)
nt.assert_is_not_none(img._repr_png_())
img = display.Image(filename=os.path.join(tpath, 'testing/tests/logo.jpg'), embed=False)
nt.assert_equal('jpeg', img.format)
nt.assert_is_none(img._repr_jpeg_())
MinRK
test display.set_matplotlib_formats...
r15395
def _get_inline_config():
Min RK
ipython_kernel is now ipykernel
r21337 from ipykernel.pylab.config import InlineBackend
MinRK
test display.set_matplotlib_formats...
r15395 return InlineBackend.instance()
@dec.skip_without('matplotlib')
def test_set_matplotlib_close():
cfg = _get_inline_config()
cfg.close_figures = False
display.set_matplotlib_close()
assert cfg.close_figures
display.set_matplotlib_close(False)
assert not cfg.close_figures
_fmt_mime_map = {
'png': 'image/png',
'jpeg': 'image/jpeg',
'pdf': 'application/pdf',
'retina': 'image/png',
'svg': 'image/svg+xml',
}
@dec.skip_without('matplotlib')
def test_set_matplotlib_formats():
from matplotlib.figure import Figure
formatters = get_ipython().display_formatter.formatters
for formats in [
('png',),
('pdf', 'svg'),
('jpeg', 'retina', 'png'),
(),
]:
active_mimes = {_fmt_mime_map[fmt] for fmt in formats}
display.set_matplotlib_formats(*formats)
for mime, f in formatters.items():
if mime in active_mimes:
nt.assert_in(Figure, f)
else:
nt.assert_not_in(Figure, f)
@dec.skip_without('matplotlib')
def test_set_matplotlib_formats_kwargs():
from matplotlib.figure import Figure
ip = get_ipython()
cfg = _get_inline_config()
cfg.print_figure_kwargs.update(dict(foo='bar'))
kwargs = dict(quality=10)
display.set_matplotlib_formats('png', **kwargs)
formatter = ip.display_formatter.formatters['image/png']
f = formatter.lookup_by_type(Figure)
cell = f.__closure__[0].cell_contents
expected = kwargs
expected.update(cfg.print_figure_kwargs)
nt.assert_equal(cell, expected)
Kyle Kelley
Backport PR #10596 on branch 5.x...
r23718 def test_display_available():
"""
Test that display is available without import
We don't really care if it's in builtin or anything else, but it should
always be available.
"""
ip = get_ipython()
with AssertNotPrints('NameError'):
ip.run_cell('display')
try:
ip.run_cell('del display')
except NameError:
pass # it's ok, it might be in builtins
# even if deleted it should be back
with AssertNotPrints('NameError'):
ip.run_cell('display')
Matthias Bussonnier
Backport PR #10625: Fix signature for IPython.core.display:Pretty #10595...
r23771 def test_textdisplayobj_pretty_repr():
p = display.Pretty("This is a simple test")
nt.assert_equal(repr(p), '<IPython.core.display.Pretty object>')
nt.assert_equal(p.data, 'This is a simple test')
p._show_mem_addr = True
nt.assert_equal(repr(p), object.__repr__(p))
Kyle Kelley
Backport PR #10596 on branch 5.x...
r23718
Jessica B. Hamrick
Add test for DisplayObject.__repr__
r16397 def test_displayobject_repr():
h = display.HTML('<br />')
nt.assert_equal(repr(h), '<IPython.core.display.HTML object>')
h._show_mem_addr = True
Jessica B. Hamrick
Test against object.__repr__, rather than hardcoded repr
r16398 nt.assert_equal(repr(h), object.__repr__(h))
Jessica B. Hamrick
Add test for DisplayObject.__repr__
r16397 h._show_mem_addr = False
nt.assert_equal(repr(h), '<IPython.core.display.HTML object>')
j = display.Javascript('')
nt.assert_equal(repr(j), '<IPython.core.display.Javascript object>')
j._show_mem_addr = True
Jessica B. Hamrick
Test against object.__repr__, rather than hardcoded repr
r16398 nt.assert_equal(repr(j), object.__repr__(j))
Jessica B. Hamrick
Add test for DisplayObject.__repr__
r16397 j._show_mem_addr = False
nt.assert_equal(repr(j), '<IPython.core.display.Javascript object>')
Min RK
JSON formatter expects JSONable dict/list...
r19557
Kyle Kelley
Merge pull request #10755 from mariusvniekerk/progressbar...
r23912 def test_progress():
p = display.ProgressBar(10)
Matthias Bussonnier
Backport PR #10813: Adding iteration to ProgressBar to make it a more useful utility
r23986 nt.assert_in('0/10',repr(p))
Kyle Kelley
Merge pull request #10755 from mariusvniekerk/progressbar...
r23912 p.html_width = '100%'
p.progress = 5
nt.assert_equal(p._repr_html_(), "<progress style='width:100%' max='10' value='5'></progress>")
Matthias Bussonnier
Backport PR #10813: Adding iteration to ProgressBar to make it a more useful utility
r23986 def test_progress_iter():
with capture_output(display=False) as captured:
for i in display.ProgressBar(5):
out = captured.stdout
nt.assert_in('{0}/5'.format(i), out)
out = captured.stdout
nt.assert_in('5/5', out)
Min RK
JSON formatter expects JSONable dict/list...
r19557 def test_json():
d = {'a': 5}
lis = [d]
j = display.JSON(d)
nt.assert_equal(j._repr_json_(), d)
Min RK
ensure warnings are raised in tests...
r19559
Min RK
JSON formatter expects JSONable dict/list...
r19557 with warnings.catch_warnings(record=True) as w:
Min RK
ensure warnings are raised in tests...
r19559 warnings.simplefilter("always")
Min RK
JSON formatter expects JSONable dict/list...
r19557 j = display.JSON(json.dumps(d))
Bussonnier Matthias
put test in content manager
r19558 nt.assert_equal(len(w), 1)
Min RK
ensure warnings are raised in tests...
r19559 nt.assert_equal(j._repr_json_(), d)
Min RK
JSON formatter expects JSONable dict/list...
r19557 j = display.JSON(lis)
nt.assert_equal(j._repr_json_(), lis)
Min RK
ensure warnings are raised in tests...
r19559
Min RK
JSON formatter expects JSONable dict/list...
r19557 with warnings.catch_warnings(record=True) as w:
Min RK
ensure warnings are raised in tests...
r19559 warnings.simplefilter("always")
Min RK
JSON formatter expects JSONable dict/list...
r19557 j = display.JSON(json.dumps(lis))
Bussonnier Matthias
put test in content manager
r19558 nt.assert_equal(len(w), 1)
Min RK
ensure warnings are raised in tests...
r19559 nt.assert_equal(j._repr_json_(), lis)
Min RK
JSON formatter expects JSONable dict/list...
r19557
sukisuki
added basic test...
r21266 def test_video_embedding():
"""use a tempfile, with dummy-data, to ensure that video embedding doesn't crash"""
Min RK
require explicit embed=True before embedding b64-encoded video
r22116 v = display.Video("http://ignored")
assert not v.embed
html = v._repr_html_()
nt.assert_not_in('src="data:', html)
nt.assert_in('src="http://ignored"', html)
with nt.assert_raises(ValueError):
v = display.Video(b'abc')
Thomas Kluyver
Don't try to open temporary file twice in video embed test...
r22130 with NamedFileInTemporaryDirectory('test.mp4') as f:
f.write(b'abc')
f.close()
sukisuki
added basic test...
r21266
Min RK
require explicit embed=True before embedding b64-encoded video
r22116 v = display.Video(f.name)
assert not v.embed
html = v._repr_html_()
nt.assert_not_in('src="data:', html)
sukisuki
added basic test...
r21266 v = display.Video(f.name, embed=True)
html = v._repr_html_()
nt.assert_in('src="data:video/mp4;base64,YWJj"',html)
Min RK
handle raw video data as input to Video
r22115
v = display.Video(f.name, embed=True, mimetype='video/other')
html = v._repr_html_()
nt.assert_in('src="data:video/other;base64,YWJj"',html)
v = display.Video(b'abc', embed=True, mimetype='video/mp4')
html = v._repr_html_()
nt.assert_in('src="data:video/mp4;base64,YWJj"',html)
v = display.Video(u'YWJj', embed=True, mimetype='video/xyz')
html = v._repr_html_()
nt.assert_in('src="data:video/xyz;base64,YWJj"',html)
Min RK
require explicit embed=True before embedding b64-encoded video
r22116
Kyle Kelley
Backport PR #10048 on branch 5.x...
r23589
def test_display_id():
ip = get_ipython()
with mock.patch.object(ip.display_pub, 'publish') as pub:
handle = display.display('x')
nt.assert_is(handle, None)
handle = display.display('y', display_id='secret')
nt.assert_is_instance(handle, display.DisplayHandle)
handle2 = display.display('z', display_id=True)
nt.assert_is_instance(handle2, display.DisplayHandle)
nt.assert_not_equal(handle.display_id, handle2.display_id)
nt.assert_equal(pub.call_count, 3)
args, kwargs = pub.call_args_list[0]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('x')
},
'metadata': {},
})
args, kwargs = pub.call_args_list[1]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('y')
},
'metadata': {},
'transient': {
'display_id': handle.display_id,
},
})
args, kwargs = pub.call_args_list[2]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('z')
},
'metadata': {},
'transient': {
'display_id': handle2.display_id,
},
})
def test_update_display():
ip = get_ipython()
with mock.patch.object(ip.display_pub, 'publish') as pub:
with nt.assert_raises(TypeError):
display.update_display('x')
display.update_display('x', display_id='1')
display.update_display('y', display_id='2')
args, kwargs = pub.call_args_list[0]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('x')
},
'metadata': {},
'transient': {
'display_id': '1',
},
'update': True,
})
args, kwargs = pub.call_args_list[1]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('y')
},
'metadata': {},
'transient': {
'display_id': '2',
},
'update': True,
})
def test_display_handle():
ip = get_ipython()
handle = display.DisplayHandle()
Matthias Bussonnier
Fake the Python 3 keyword only arguments.
r23594 if sys.version_info < (3,):
nt.assert_is_instance(handle.display_id, unicode)
else:
nt.assert_is_instance(handle.display_id, str)
Kyle Kelley
Backport PR #10048 on branch 5.x...
r23589 handle = display.DisplayHandle('my-id')
nt.assert_equal(handle.display_id, 'my-id')
with mock.patch.object(ip.display_pub, 'publish') as pub:
handle.display('x')
handle.update('y')
args, kwargs = pub.call_args_list[0]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('x')
},
'metadata': {},
'transient': {
'display_id': handle.display_id,
}
})
args, kwargs = pub.call_args_list[1]
nt.assert_equal(args, ())
nt.assert_equal(kwargs, {
'data': {
'text/plain': repr('y')
},
'metadata': {},
'transient': {
'display_id': handle.display_id,
},
'update': True,
})