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

Skip to content

Commit 900a6ea

Browse files
committed
Add tests for the selection widgets
1 parent ea732ef commit 900a6ea

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed

lib/matplotlib/tests/test_widgets.py

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
from __future__ import (absolute_import, division, print_function,
2+
unicode_literals)
3+
4+
try:
5+
# mock in python 3.3+
6+
from unittest import mock
7+
except ImportError:
8+
import mock
9+
10+
import matplotlib.widgets as widgets
11+
import matplotlib.pyplot as plt
12+
13+
14+
def get_event(ax, button=1, xdata=0, ydata=0, key=None, step=1):
15+
"""
16+
*name*
17+
the event name
18+
19+
*canvas*
20+
the FigureCanvas instance generating the event
21+
22+
*guiEvent*
23+
the GUI event that triggered the matplotlib event
24+
25+
*x*
26+
x position - pixels from left of canvas
27+
28+
*y*
29+
y position - pixels from bottom of canvas
30+
31+
*inaxes*
32+
the :class:`~matplotlib.axes.Axes` instance if mouse is over axes
33+
34+
*xdata*
35+
x coord of mouse in data coords
36+
37+
*ydata*
38+
y coord of mouse in data coords
39+
40+
*button*
41+
button pressed None, 1, 2, 3, 'up', 'down' (up and down are used
42+
for scroll events)
43+
44+
*key*
45+
the key depressed when the mouse event triggered (see
46+
:class:`KeyEvent`)
47+
48+
*step*
49+
number of scroll steps (positive for 'up', negative for 'down')
50+
"""
51+
event = mock.Mock()
52+
event.button = button
53+
event.x, event.y = ax.transData.transform((xdata, ydata))
54+
event.xdata, event.ydata = xdata, ydata
55+
event.inaxes = ax
56+
event.canvas = ax.figure.canvas
57+
event.key = key
58+
event.step = step
59+
event.guiEvent = None
60+
event.name = 'Custom'
61+
return event
62+
63+
64+
def check_rectangle(**kwargs):
65+
ax = plt.gca()
66+
ax.plot([0, 200], [0, 200])
67+
68+
def onselect(epress, erelease):
69+
ax._got_onselect = True
70+
assert epress.xdata == 100
71+
assert epress.ydata == 100
72+
assert erelease.xdata == 150
73+
assert erelease.ydata == 150
74+
75+
tool = widgets.RectangleSelector(ax, onselect, **kwargs)
76+
event = get_event(ax, xdata=100, ydata=100, button=1)
77+
tool._press(event)
78+
79+
event = get_event(ax, xdata=125, ydata=125, button=1)
80+
tool._onmove(event)
81+
82+
event = get_event(ax, xdata=150, ydata=150, button=1)
83+
tool._release(event)
84+
85+
assert ax._got_onselect
86+
87+
88+
def test_rectangle_selector():
89+
check_rectangle()
90+
check_rectangle(drawtype='line', useblit=False)
91+
check_rectangle(useblit=True, button=1)
92+
check_rectangle(drawtype='none', minspanx=10, minspany=10)
93+
check_rectangle(minspanx=10, minspany=10, spancoords='pixels')
94+
check_rectangle(rectprops=dict(fill=True))
95+
96+
97+
def check_span(*args, **kwargs):
98+
ax = plt.gca()
99+
ax.plot([0, 200], [0, 200])
100+
101+
def onselect(vmin, vmax):
102+
ax._got_onselect = True
103+
assert vmin == 100
104+
assert vmax == 150
105+
106+
def onmove(vmin, vmax):
107+
assert vmin == 100
108+
assert vmax == 125
109+
ax._got_on_move = True
110+
111+
if 'onmove_callback' in kwargs:
112+
kwargs['onmove_callback'] = onmove
113+
114+
tool = widgets.SpanSelector(ax, onselect, *args, **kwargs)
115+
event = get_event(ax, xdata=100, ydata=100, button=1)
116+
tool._press(event)
117+
118+
event = get_event(ax, xdata=125, ydata=125, button=1)
119+
tool._onmove(event)
120+
121+
event = get_event(ax, xdata=150, ydata=150, button=1)
122+
tool._release(event)
123+
124+
assert ax._got_onselect
125+
126+
if 'onmove_callback' in kwargs:
127+
assert ax._got_on_move
128+
129+
130+
def test_span_selector():
131+
check_span('horizontal', minspan=10, useblit=True)
132+
check_span('vertical', onmove_callback=True, button=1)
133+
check_span('horizontal', rectprops=dict(fill=True))
134+
135+
136+
def check_lasso_selector(**kwargs):
137+
ax = plt.gca()
138+
ax.plot([0, 200], [0, 200])
139+
140+
def onselect(verts):
141+
ax._got_onselect = True
142+
assert verts == [(100, 100), (125, 125), (150, 150)]
143+
144+
tool = widgets.LassoSelector(ax, onselect, **kwargs)
145+
event = get_event(ax, xdata=100, ydata=100, button=1)
146+
tool._press(event)
147+
148+
event = get_event(ax, xdata=125, ydata=125, button=1)
149+
tool._onmove(event)
150+
151+
event = get_event(ax, xdata=150, ydata=150, button=1)
152+
tool._release(event)
153+
154+
assert ax._got_onselect
155+
156+
157+
def test_lasso_selector():
158+
check_lasso_selector()
159+
check_lasso_selector(useblit=False, lineprops=dict(color='red'))
160+
check_lasso_selector(useblit=True, button=1)

0 commit comments

Comments
 (0)