75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
import os
|
|
from matplotlib import pyplot as plt
|
|
|
|
import pytest
|
|
from unittest import mock
|
|
|
|
|
|
@pytest.mark.backend("gtk3agg", skip_on_importerror=True)
|
|
def test_correct_key():
|
|
pytest.xfail("test_widget_send_event is not triggering key_press_event")
|
|
|
|
from gi.repository import Gdk, Gtk # type: ignore[import]
|
|
fig = plt.figure()
|
|
buf = []
|
|
|
|
def send(event):
|
|
for key, mod in [
|
|
(Gdk.KEY_a, Gdk.ModifierType.SHIFT_MASK),
|
|
(Gdk.KEY_a, 0),
|
|
(Gdk.KEY_a, Gdk.ModifierType.CONTROL_MASK),
|
|
(Gdk.KEY_agrave, 0),
|
|
(Gdk.KEY_Control_L, Gdk.ModifierType.MOD1_MASK),
|
|
(Gdk.KEY_Alt_L, Gdk.ModifierType.CONTROL_MASK),
|
|
(Gdk.KEY_agrave,
|
|
Gdk.ModifierType.CONTROL_MASK
|
|
| Gdk.ModifierType.MOD1_MASK
|
|
| Gdk.ModifierType.MOD4_MASK),
|
|
(0xfd16, 0), # KEY_3270_Play.
|
|
(Gdk.KEY_BackSpace, 0),
|
|
(Gdk.KEY_BackSpace, Gdk.ModifierType.CONTROL_MASK),
|
|
]:
|
|
# This is not actually really the right API: it depends on the
|
|
# actual keymap (e.g. on Azerty, shift+agrave -> 0).
|
|
Gtk.test_widget_send_key(fig.canvas, key, mod)
|
|
|
|
def receive(event):
|
|
buf.append(event.key)
|
|
if buf == [
|
|
"A", "a", "ctrl+a",
|
|
"\N{LATIN SMALL LETTER A WITH GRAVE}",
|
|
"alt+control", "ctrl+alt",
|
|
"ctrl+alt+super+\N{LATIN SMALL LETTER A WITH GRAVE}",
|
|
# (No entry for KEY_3270_Play.)
|
|
"backspace", "ctrl+backspace",
|
|
]:
|
|
plt.close(fig)
|
|
|
|
fig.canvas.mpl_connect("draw_event", send)
|
|
fig.canvas.mpl_connect("key_press_event", receive)
|
|
plt.show()
|
|
|
|
|
|
@pytest.mark.backend("gtk3agg", skip_on_importerror=True)
|
|
def test_save_figure_return():
|
|
from gi.repository import Gtk
|
|
fig, ax = plt.subplots()
|
|
ax.imshow([[1]])
|
|
with mock.patch("gi.repository.Gtk.FileFilter") as fileFilter:
|
|
filt = fileFilter.return_value
|
|
filt.get_name.return_value = "Portable Network Graphics"
|
|
with mock.patch("gi.repository.Gtk.FileChooserDialog") as dialogChooser:
|
|
dialog = dialogChooser.return_value
|
|
dialog.get_filter.return_value = filt
|
|
dialog.get_filename.return_value = "foobar.png"
|
|
dialog.run.return_value = Gtk.ResponseType.OK
|
|
fname = fig.canvas.manager.toolbar.save_figure()
|
|
os.remove("foobar.png")
|
|
assert fname == "foobar.png"
|
|
|
|
with mock.patch("gi.repository.Gtk.MessageDialog"):
|
|
dialog.get_filename.return_value = None
|
|
dialog.run.return_value = Gtk.ResponseType.OK
|
|
fname = fig.canvas.manager.toolbar.save_figure()
|
|
assert fname is None
|