|
4 | 4 | frommatplotlib.backend_basesimport (
|
5 | 5 | FigureCanvasBase,LocationEvent,MouseButton,MouseEvent,
|
6 | 6 | NavigationToolbar2,RendererBase)
|
| 7 | +frommatplotlib.backend_toolsimportRubberbandBase |
7 | 8 | frommatplotlib.figureimportFigure
|
8 | 9 | frommatplotlib.testing._markersimportneeds_pgf_xelatex
|
9 | 10 | importmatplotlib.pyplotasplt
|
|
12 | 13 | importpytest
|
13 | 14 |
|
14 | 15 |
|
| 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 | + |
15 | 22 | deftest_uses_per_path():
|
16 | 23 | id=transforms.Affine2D()
|
17 | 24 | paths= [path.Path.unit_regular_polygon(i)foriinrange(3,7)]
|
@@ -247,11 +254,7 @@ def test_interactive_colorbar(plot_func, orientation, tool, button, expected):
|
247 | 254 |
|
248 | 255 |
|
249 | 256 | deftest_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 |
| -withpytest.warns(UserWarning,match=expected_warning_regex): |
| 257 | +withpytest.warns(UserWarning,match=_EXPECTED_WARNING_TOOLMANAGER): |
255 | 258 | plt.rcParams['toolbar']='toolmanager'
|
256 | 259 | ax=plt.gca()
|
257 | 260 | assertax.get_navigate_mode()isNone
|
@@ -349,3 +352,44 @@ def test_interactive_pan(key, mouseend, expectedxlim, expectedylim):
|
349 | 352 | # Should be close, but won't be exact due to screen integer resolution
|
350 | 353 | asserttuple(ax.get_xlim())==pytest.approx(expectedxlim,abs=0.02)
|
351 | 354 | asserttuple(ax.get_ylim())==pytest.approx(expectedylim,abs=0.02)
|
| 355 | + |
| 356 | + |
| 357 | +deftest_toolmanager_remove(): |
| 358 | +withpytest.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'infig.canvas.manager.toolmanager.tools |
| 363 | +fig.canvas.manager.toolmanager.remove_tool('forward') |
| 364 | +assertlen(fig.canvas.manager.toolmanager.tools)==initial_len-1 |
| 365 | +assert'forward'notinfig.canvas.manager.toolmanager.tools |
| 366 | + |
| 367 | + |
| 368 | +deftest_toolmanager_get_tool(): |
| 369 | +withpytest.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 | +assertisinstance(rubberband,RubberbandBase) |
| 374 | +assertfig.canvas.manager.toolmanager.get_tool(rubberband)isrubberband |
| 375 | +withpytest.warns(UserWarning, |
| 376 | +match="ToolManager does not control tool 'foo'"): |
| 377 | +assertfig.canvas.manager.toolmanager.get_tool('foo')isNone |
| 378 | +assertfig.canvas.manager.toolmanager.get_tool('foo',warn=False)isNone |
| 379 | + |
| 380 | +withpytest.warns(UserWarning, |
| 381 | +match="ToolManager does not control tool 'foo'"): |
| 382 | +assertfig.canvas.manager.toolmanager.trigger_tool('foo')isNone |
| 383 | + |
| 384 | + |
| 385 | +deftest_toolmanager_update_keymap(): |
| 386 | +withpytest.warns(UserWarning,match=_EXPECTED_WARNING_TOOLMANAGER): |
| 387 | +plt.rcParams['toolbar']='toolmanager' |
| 388 | +fig=plt.gcf() |
| 389 | +assert'v'infig.canvas.manager.toolmanager.get_tool_keymap('forward') |
| 390 | +withpytest.warns(UserWarning, |
| 391 | +match="Key c changed from back to forward"): |
| 392 | +fig.canvas.manager.toolmanager.update_keymap('forward','c') |
| 393 | +assertfig.canvas.manager.toolmanager.get_tool_keymap('forward')== ['c'] |
| 394 | +withpytest.raises(KeyError,match="'foo' not in Tools"): |
| 395 | +fig.canvas.manager.toolmanager.update_keymap('foo','c') |