##// END OF EJS Templates
Merge pull request #13216 from Kojoley/ci-upload-coverage-from-appveyor...
Merge pull request #13216 from Kojoley/ci-upload-coverage-from-appveyor CI: Upload coverage from Appveyor

File last commit:

r26812:4a2e85fa
r26948:cbf83d65 merge
Show More
test_pylabtools.py
274 lines | 8.1 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_pylabtools.py
Fernando Perez
Add test file I forgot to commit.
r3734 """Tests for pylab tools module.
"""
Min RK
fix instantiation of shell in test_inline_twice...
r21765
# Copyright (c) IPython Development Team.
Fernando Perez
Add test file I forgot to commit.
r3734 # Distributed under the terms of the Modified BSD License.
Min RK
print_figure return base64 str instead of bytes...
r26812 from binascii import a2b_base64
from io import BytesIO
MinRK
check that PIL can save JPEG to BytesIO...
r15684
MinRK
test select_figure_formats
r15390 import matplotlib
matplotlib.use('Agg')
from matplotlib.figure import Figure
Fernando Perez
Add test file I forgot to commit.
r3734
MinRK
check that PIL can save JPEG to BytesIO...
r15684 from nose import SkipTest
Fernando Perez
Add test file I forgot to commit.
r3734 import nose.tools as nt
from matplotlib import pyplot as plt
martinRenou
Use matplotlib-inline instead of ipykernel.pylab
r26464 import matplotlib_inline
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468 import numpy as np
Fernando Perez
Add test file I forgot to commit.
r3734
MinRK
test select_figure_formats
r15390 from IPython.core.getipython import get_ipython
MinRK
update pylabtools tests
r11329 from IPython.core.interactiveshell import InteractiveShell
MinRK
test select_figure_formats
r15390 from IPython.core.display import _PNG, _JPEG
Fernando Perez
Add test file I forgot to commit.
r3734 from .. import pylabtools as pt
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 from IPython.testing import decorators as dec
Fernando Perez
Add test file I forgot to commit.
r3734
def test_figure_to_svg():
# simple empty-figure test
fig = plt.figure()
Thomas Kluyver
Remove uses of @parametric decorator
r12374 nt.assert_equal(pt.print_figure(fig, 'svg'), None)
Fernando Perez
Add test file I forgot to commit.
r3734
plt.close('all')
# simple check for at least svg-looking output
Fernando Perez
Don't use new subplots() call in matplotlib so tests pass with mpl 0.99
r3745 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
Fernando Perez
Add test file I forgot to commit.
r3734 ax.plot([1,2,3])
plt.draw()
MinRK
update pylabtools test to use new print_figure
r3984 svg = pt.print_figure(fig, 'svg')[:100].lower()
MinRK
print_figure returns unicode for svg
r16048 nt.assert_in(u'doctype svg', svg)
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468
MinRK
check that PIL can save JPEG to BytesIO...
r15684 def _check_pil_jpeg_bytes():
"""Skip if PIL can't write JPEGs to BytesIO objects"""
MinRK
add note about PIL's jpeg support
r15686 # PIL's JPEG plugin can't write to BytesIO objects
# Pillow fixes this
MinRK
check that PIL can save JPEG to BytesIO...
r15684 from PIL import Image
buf = BytesIO()
img = Image.new("RGB", (4,4))
try:
img.save(buf, 'jpeg')
except Exception as e:
ename = e.__class__.__name__
Ram Rachum
Fix exception causes all over the codebase
r25833 raise SkipTest("PIL can't write JPEG to BytesIO: %s: %s" % (ename, e)) from e
MinRK
check that PIL can save JPEG to BytesIO...
r15684
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 @dec.skip_without("PIL.Image")
MinRK
check that PIL can save JPEG to BytesIO...
r15684 def test_figure_to_jpeg():
_check_pil_jpeg_bytes()
# simple check for at least jpeg-looking output
Daniel B. Vasquez
use testing decorators to enable tests on module availability
r14777 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
Matthias Bussonnier
remove deprecated usage of matplotlib quality parameter
r25633 jpeg = pt.print_figure(fig, 'jpeg', pil_kwargs={'optimize': 50})[:100].lower()
MinRK
check that PIL can save JPEG to BytesIO...
r15684 assert jpeg.startswith(_JPEG)
Daniel B. Vasquez
add unittest for jpg, only activated if PIL/Pillow is installed
r14775
MinRK
test select_figure_formats
r15390 def test_retina_figure():
Christopher Roach
Added a fix for issue #8871
r21813 # simple empty-figure test
fig = plt.figure()
nt.assert_equal(pt.retina_figure(fig), None)
plt.close('all')
MinRK
test select_figure_formats
r15390 fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
png, md = pt.retina_figure(fig)
assert png.startswith(_PNG)
nt.assert_in('width', md)
nt.assert_in('height', md)
_fmt_mime_map = {
'png': 'image/png',
'jpeg': 'image/jpeg',
'pdf': 'application/pdf',
'retina': 'image/png',
'svg': 'image/svg+xml',
}
def test_select_figure_formats_str():
ip = get_ipython()
for fmt, active_mime in _fmt_mime_map.items():
pt.select_figure_formats(ip, fmt)
for mime, f in ip.display_formatter.formatters.items():
if mime == active_mime:
nt.assert_in(Figure, f)
else:
nt.assert_not_in(Figure, f)
def test_select_figure_formats_kwargs():
ip = get_ipython()
kwargs = dict(quality=10, bbox_inches='tight')
pt.select_figure_formats(ip, 'png', **kwargs)
formatter = ip.display_formatter.formatters['image/png']
f = formatter.lookup_by_type(Figure)
Min RK
print_figure return base64 str instead of bytes...
r26812 cell = f.keywords
expected = kwargs
expected["base64"] = True
expected["fmt"] = "png"
assert cell == expected
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
MinRK
test select_figure_formats
r15390 # check that the formatter doesn't raise
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
plt.draw()
formatter.enabled = True
png = formatter(fig)
Min RK
print_figure return base64 str instead of bytes...
r26812 assert isinstance(png, str)
png_bytes = a2b_base64(png)
assert png_bytes.startswith(_PNG)
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468
MinRK
test select_figure_formats
r15390 def test_select_figure_formats_set():
Fernando Perez
Fix critical bug with pylab support inadvertently introduced in #648....
r5468 ip = get_ipython()
MinRK
test select_figure_formats
r15390 for fmts in [
{'png', 'svg'},
['png'],
('jpeg', 'pdf', 'retina'),
{'svg'},
]:
active_mimes = {_fmt_mime_map[fmt] for fmt in fmts}
pt.select_figure_formats(ip, fmts)
for mime, f in ip.display_formatter.formatters.items():
if mime in active_mimes:
nt.assert_in(Figure, f)
else:
nt.assert_not_in(Figure, f)
def test_select_figure_formats_bad():
ip = get_ipython()
with nt.assert_raises(ValueError):
pt.select_figure_formats(ip, 'foo')
with nt.assert_raises(ValueError):
pt.select_figure_formats(ip, {'png', 'foo'})
with nt.assert_raises(ValueError):
pt.select_figure_formats(ip, ['retina', 'pdf', 'bar', 'bad'])
def test_import_pylab():
Fernando Perez
Refactor gui/pylab integration to eliminate code duplication....
r5469 ns = {}
pt.import_pylab(ns, import_all=False)
nt.assert_true('plt' in ns)
nt.assert_equal(ns['np'], np)
Ryan May
Add tests of switching logic.
r7966
Matthias Bussonnier
Finish fixing the at-exit spurious failures....
r26428 from traitlets.config import Config
Ryan May
Add tests of switching logic.
r7966 class TestPylabSwitch(object):
MinRK
update pylabtools tests
r11329 class Shell(InteractiveShell):
Matthias Bussonnier
Finish fixing the at-exit spurious failures....
r26428 def init_history(self):
"""Sets up the command history, and starts regular autosaves."""
self.config.HistoryManager.hist_file = ":memory:"
super().init_history()
MinRK
update pylabtools tests
r11329 def enable_gui(self, gui):
pass
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
Ryan May
Add tests of switching logic.
r7966 def setup(self):
Ryan May
Improve test mocking to actually capture failure mode.
r8003 import matplotlib
def act_mpl(backend):
matplotlib.rcParams['backend'] = backend
# Save rcParams since they get modified
self._saved_rcParams = matplotlib.rcParams
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 self._saved_rcParamsOrig = matplotlib.rcParamsOrig
Ryan May
Improve test mocking to actually capture failure mode.
r8003 matplotlib.rcParams = dict(backend='Qt4Agg')
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 matplotlib.rcParamsOrig = dict(backend='Qt4Agg')
Ryan May
Improve test mocking to actually capture failure mode.
r8003
# Mock out functions
Ryan May
Add tests of switching logic.
r7966 self._save_am = pt.activate_matplotlib
Ryan May
Improve test mocking to actually capture failure mode.
r8003 pt.activate_matplotlib = act_mpl
Ryan May
Add tests of switching logic.
r7966 self._save_ip = pt.import_pylab
pt.import_pylab = lambda *a,**kw:None
martinRenou
Use matplotlib-inline instead of ipykernel.pylab
r26464 self._save_cis = matplotlib_inline.backend_inline.configure_inline_support
matplotlib_inline.backend_inline.configure_inline_support = (
lambda *a, **kw: None
)
Ryan May
Add tests of switching logic.
r7966
def teardown(self):
pt.activate_matplotlib = self._save_am
pt.import_pylab = self._save_ip
martinRenou
Use matplotlib-inline instead of ipykernel.pylab
r26464 matplotlib_inline.backend_inline.configure_inline_support = self._save_cis
Ryan May
Improve test mocking to actually capture failure mode.
r8003 import matplotlib
matplotlib.rcParams = self._saved_rcParams
Thomas Kluyver
test_pylabtools also needs to modify matplotlib.rcParamsOrig...
r12924 matplotlib.rcParamsOrig = self._saved_rcParamsOrig
Ryan May
Add tests of switching logic.
r7966
def test_qt(self):
Matthias Bussonnier
Finish fixing the at-exit spurious failures....
r26428
Ryan May
Add tests of switching logic.
r7966 s = self.Shell()
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib(None)
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('inline')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'inline')
nt.assert_equal(s.pylab_gui_select, 'qt')
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('qt')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('inline')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'inline')
nt.assert_equal(s.pylab_gui_select, 'qt')
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib()
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
def test_inline(self):
s = self.Shell()
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('inline')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'inline')
nt.assert_equal(s.pylab_gui_select, None)
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('inline')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'inline')
nt.assert_equal(s.pylab_gui_select, None)
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('qt')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756 def test_inline_twice(self):
"Using '%matplotlib inline' twice should not reset formatters"
Min RK
fix instantiation of shell in test_inline_twice...
r21765 ip = self.Shell()
Jan Schulz
Prevent reset of matplotlib formatters when enabled again...
r21756 gui, backend = ip.enable_matplotlib('inline')
nt.assert_equal(gui, 'inline')
fmts = {'png'}
active_mimes = {_fmt_mime_map[fmt] for fmt in fmts}
pt.select_figure_formats(ip, fmts)
gui, backend = ip.enable_matplotlib('inline')
nt.assert_equal(gui, 'inline')
for mime, f in ip.display_formatter.formatters.items():
if mime in active_mimes:
nt.assert_in(Figure, f)
else:
nt.assert_not_in(Figure, f)
Ryan May
Add tests of switching logic.
r7966 def test_qt_gtk(self):
s = self.Shell()
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('qt')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
MinRK
update pylabtools tests
r11329 gui, backend = s.enable_matplotlib('gtk')
Ryan May
Add tests of switching logic.
r7966 nt.assert_equal(gui, 'qt')
nt.assert_equal(s.pylab_gui_select, 'qt')
Thomas A Caswell
FIX: Remove the non-interactive backends from pylabtools.backend2gui...
r24290
def test_no_gui_backends():
for k in ['agg', 'svg', 'pdf', 'ps']:
assert k not in pt.backend2gui
Thomas A Caswell
MNT: ensure we can show un-pickled figures...
r25419
def test_figure_no_canvas():
fig = Figure()
fig.canvas = None
pt.print_figure(fig)