|
3 | 3 | import io
|
4 | 4 | from pathlib import Path
|
5 | 5 | import platform
|
| 6 | +from threading import Timer |
6 | 7 | from types import SimpleNamespace
|
7 | 8 | import warnings
|
8 | 9 |
|
@@ -1082,3 +1083,34 @@ def test_add_axes_kwargs():
|
1082 | 1083 | assert ax1.name == 'rectilinear'
|
1083 | 1084 | assert ax1 is not ax
|
1084 | 1085 | plt.close()
|
| 1086 | + |
| 1087 | + |
| 1088 | +def test_ginput(recwarn): # recwarn undoes warn filters at exit. |
| 1089 | + warnings.filterwarnings("ignore", "cannot show the figure") |
| 1090 | + fig, ax = plt.subplots() |
| 1091 | + |
| 1092 | + def single_press(): |
| 1093 | + fig.canvas.button_press_event(*ax.transData.transform((.1, .2)), 1) |
| 1094 | + |
| 1095 | + Timer(.1, single_press).start() |
| 1096 | + assert fig.ginput() == [(.1, .2)] |
| 1097 | + |
| 1098 | + def multi_presses(): |
| 1099 | + fig.canvas.button_press_event(*ax.transData.transform((.1, .2)), 1) |
| 1100 | + fig.canvas.key_press_event("backspace") |
| 1101 | + fig.canvas.button_press_event(*ax.transData.transform((.3, .4)), 1) |
| 1102 | + fig.canvas.button_press_event(*ax.transData.transform((.5, .6)), 1) |
| 1103 | + fig.canvas.button_press_event(*ax.transData.transform((0, 0)), 2) |
| 1104 | + |
| 1105 | + Timer(.1, multi_presses).start() |
| 1106 | + np.testing.assert_allclose(fig.ginput(3), [(.3, .4), (.5, .6)]) |
| 1107 | + |
| 1108 | + |
| 1109 | +def test_waitforbuttonpress(recwarn): # recwarn undoes warn filters at exit. |
| 1110 | + warnings.filterwarnings("ignore", "cannot show the figure") |
| 1111 | + fig = plt.figure() |
| 1112 | + assert fig.waitforbuttonpress(timeout=.1) is None |
| 1113 | + Timer(.1, fig.canvas.key_press_event, ("z",)).start() |
| 1114 | + assert fig.waitforbuttonpress() is True |
| 1115 | + Timer(.1, fig.canvas.button_press_event, (0, 0, 1)).start() |
| 1116 | + assert fig.waitforbuttonpress() is False |
0 commit comments