File: test_abstract.py

package info (click to toggle)
python-mne 1.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 131,492 kB
  • sloc: python: 213,302; javascript: 12,910; sh: 447; makefile: 144
file content (133 lines) | stat: -rw-r--r-- 4,176 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Authors: The MNE-Python contributors.
# License: BSD-3-Clause
# Copyright the MNE-Python contributors.

from pathlib import Path

from mne.viz.backends.renderer import _get_backend
from mne.viz.backends.tests._utils import skips_if_not_pyvistaqt


def _do_widget_tests(backend):
    # testing utils
    widget_checks = set()

    def callback(x=None):
        add = x
        if add is None:
            add = "click"
        elif isinstance(add, str):
            add = add.lstrip("&")  # new notebooks can add this
        widget_checks.add(add)

    window = backend._AppWindow()
    central_layout = backend._VBoxLayout(scroll=(500, 500))
    renderer = backend._3DRenderer(name="test", size=(200, 200))
    renderer.sphere([0, 0, 0], "red", 1)
    central_layout._add_widget(renderer.plotter)
    canvas = backend._Canvas(5, 5, 96)
    canvas.ax.plot(range(10), range(10), label="plot")
    central_layout._add_widget(canvas)
    central_layout._add_widget(backend._Label("test"))
    text = backend._Text("test", "placeholder", callback)
    central_layout._add_widget(text)
    button = backend._Button("test2", callback)
    central_layout._add_widget(button)
    slider = backend._Slider(0, (0, 100), callback)
    central_layout._add_widget(slider)
    checkbox = backend._CheckBox(0, callback)
    central_layout._add_widget(checkbox)
    spinbox = backend._SpinBox(10, (5, 50), callback, step=4)
    central_layout._add_widget(spinbox)
    combobox = backend._ComboBox("40", ("5", "50", "40"), callback)
    central_layout._add_widget(combobox)
    radio_buttons = backend._RadioButtons("40", ("5", "50", "40"), callback)
    central_layout._add_widget(radio_buttons)
    groupbox = backend._GroupBox(
        "menu", [backend._Button(f"{i}", callback) for i in range(5)]
    )
    central_layout._add_widget(groupbox)
    groupbox._set_enabled(False)
    groupbox._set_enabled(True)
    file_button = backend._FileButton(callback, window=window)
    central_layout._add_widget(file_button)
    play_menu = backend._PlayMenu(0, (0, 100), callback)
    central_layout._add_widget(play_menu)
    progress_bar = backend._ProgressBar(100)
    progress_bar._increment()
    central_layout._add_widget(progress_bar)
    window._add_keypress(callback)
    window._set_central_layout(central_layout)
    window._set_focus()
    window._show()
    # pop up
    popup = backend._Popup("Info", "this is a message", "test", callback)

    # do tests
    # first, test popup
    popup._click("Ok")
    assert "Ok" in widget_checks

    window._trigger_keypress("a")
    assert "a" in widget_checks
    window._trigger_keypress("escape")
    assert "escape" in widget_checks

    # test each widget
    text._set_value("foo")
    assert "foo" in widget_checks

    button._click()
    assert "click" in widget_checks

    slider._set_value(10)
    assert 10 in widget_checks

    checkbox._set_checked(True)
    assert True in widget_checks

    spinbox._set_value(20)
    assert 20 in widget_checks

    combobox._set_value("5")
    assert "5" in widget_checks

    radio_buttons._set_value("50")
    assert "50" in widget_checks

    # this was tested manually but creates a blocking window so can't
    # be tested here
    # file_button.click()
    assert hasattr(file_button, "click")

    play_menu._set_value(99)
    assert 99 in widget_checks

    window._close()


@skips_if_not_pyvistaqt
def test_widget_abstraction_pyvistaqt(renderer_pyvistaqt):
    """Test the GUI widgets abstraction."""
    backend = _get_backend()
    assert Path(backend.__file__).stem == "_qt"
    _do_widget_tests(backend)


def test_widget_abstraction_notebook(renderer_notebook, nbexec):
    """Test the GUI widgets abstraction in notebook."""
    from pathlib import Path

    from IPython import get_ipython

    from mne.viz import set_3d_backend
    from mne.viz.backends.renderer import _get_backend
    from mne.viz.backends.tests.test_abstract import _do_widget_tests

    set_3d_backend("notebook")
    backend = _get_backend()
    assert Path(backend.__file__).stem == "_notebook"

    ipython = get_ipython()
    ipython.magic("%matplotlib widget")
    _do_widget_tests(backend)