Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 946b116

Browse files
oscarguschahak13
authored andcommitted
Add tests for ToolManager
1 parent e25b8bb commit 946b116

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

lib/matplotlib/backend_managers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def update_keymap(self, name, key):
185185
Keys to associate with the tool.
186186
"""
187187
if name not in self._tools:
188-
raise KeyError(f'{name} not in Tools')
188+
raise KeyError(f'{name!r} not in Tools')
189189
self._remove_keys(name)
190190
if isinstance(key, str):
191191
key = [key]
@@ -394,6 +394,7 @@ def get_tool(self, name, warn=True):
394394
return name
395395
if name not in self._tools:
396396
if warn:
397-
_api.warn_external(f"ToolManager does not control tool {name}")
397+
_api.warn_external(
398+
f"ToolManager does not control tool {name!r}")
398399
return None
399400
return self._tools[name]

lib/matplotlib/tests/test_backend_bases.py

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from matplotlib.backend_bases import (
55
FigureCanvasBase, LocationEvent, MouseButton, MouseEvent,
66
NavigationToolbar2, RendererBase)
7+
from matplotlib.backend_tools import RubberbandBase
78
from matplotlib.figure import Figure
89
from matplotlib.testing._markers import needs_pgf_xelatex
910
import matplotlib.pyplot as plt
@@ -12,6 +13,12 @@
1213
import pytest
1314

1415

16+
_EXPECTED_WARNING_TOOLMANAGER = (
17+
r"Treat the new Tool classes introduced in "
18+
r"v[0-9]*.[0-9]* as experimental for now; "
19+
"the API and rcParam may change in future versions.")
20+
21+
1522
def test_uses_per_path():
1623
id = transforms.Affine2D()
1724
paths = [path.Path.unit_regular_polygon(i) for i in range(3, 7)]
@@ -247,11 +254,7 @@ def test_interactive_colorbar(plot_func, orientation, tool, button, expected):
247254

248255

249256
def test_toolbar_zoompan():
250-
expected_warning_regex = (
251-
r"Treat the new Tool classes introduced in "
252-
r"v[0-9]*.[0-9]* as experimental for now; "
253-
"the API and rcParam may change in future versions.")
254-
with pytest.warns(UserWarning, match=expected_warning_regex):
257+
with pytest.warns(UserWarning, match=_EXPECTED_WARNING_TOOLMANAGER):
255258
plt.rcParams['toolbar'] = 'toolmanager'
256259
ax = plt.gca()
257260
assert ax.get_navigate_mode() is None
@@ -349,3 +352,44 @@ def test_interactive_pan(key, mouseend, expectedxlim, expectedylim):
349352
# Should be close, but won't be exact due to screen integer resolution
350353
assert tuple(ax.get_xlim()) == pytest.approx(expectedxlim, abs=0.02)
351354
assert tuple(ax.get_ylim()) == pytest.approx(expectedylim, abs=0.02)
355+
356+
357+
def test_toolmanager_remove():
358+
with pytest.warns(UserWarning, match=_EXPECTED_WARNING_TOOLMANAGER):
359+
plt.rcParams['toolbar'] = 'toolmanager'
360+
fig = plt.gcf()
361+
initial_len = len(fig.canvas.manager.toolmanager.tools)
362+
assert 'forward' in fig.canvas.manager.toolmanager.tools
363+
fig.canvas.manager.toolmanager.remove_tool('forward')
364+
assert len(fig.canvas.manager.toolmanager.tools) == initial_len - 1
365+
assert 'forward' not in fig.canvas.manager.toolmanager.tools
366+
367+
368+
def test_toolmanager_get_tool():
369+
with pytest.warns(UserWarning, match=_EXPECTED_WARNING_TOOLMANAGER):
370+
plt.rcParams['toolbar'] = 'toolmanager'
371+
fig = plt.gcf()
372+
rubberband = fig.canvas.manager.toolmanager.get_tool('rubberband')
373+
assert isinstance(rubberband, RubberbandBase)
374+
assert fig.canvas.manager.toolmanager.get_tool(rubberband) is rubberband
375+
with pytest.warns(UserWarning,
376+
match="ToolManager does not control tool 'foo'"):
377+
assert fig.canvas.manager.toolmanager.get_tool('foo') is None
378+
assert fig.canvas.manager.toolmanager.get_tool('foo', warn=False) is None
379+
380+
with pytest.warns(UserWarning,
381+
match="ToolManager does not control tool 'foo'"):
382+
assert fig.canvas.manager.toolmanager.trigger_tool('foo') is None
383+
384+
385+
def test_toolmanager_update_keymap():
386+
with pytest.warns(UserWarning, match=_EXPECTED_WARNING_TOOLMANAGER):
387+
plt.rcParams['toolbar'] = 'toolmanager'
388+
fig = plt.gcf()
389+
assert 'v' in fig.canvas.manager.toolmanager.get_tool_keymap('forward')
390+
with pytest.warns(UserWarning,
391+
match="Key c changed from back to forward"):
392+
fig.canvas.manager.toolmanager.update_keymap('forward', 'c')
393+
assert fig.canvas.manager.toolmanager.get_tool_keymap('forward') == ['c']
394+
with pytest.raises(KeyError, match="'foo' not in Tools"):
395+
fig.canvas.manager.toolmanager.update_keymap('foo', 'c')

0 commit comments

Comments
 (0)