Skip to content

Commit 3d50618

Browse files
dstansbysamcunliffe
authored andcommitted
Add test for features layer changing
1 parent c7c3f06 commit 3d50618

File tree

1 file changed

+44
-2
lines changed

1 file changed

+44
-2
lines changed

src/napari_matplotlib/tests/test_layer_changes.py

+44-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
import pytest
77
from napari.viewer import Viewer
88

9-
from napari_matplotlib import HistogramWidget, SliceWidget
9+
from napari_matplotlib import (
10+
FeaturesScatterWidget,
11+
HistogramWidget,
12+
SliceWidget,
13+
)
1014
from napari_matplotlib.base import NapariMPLWidget
1115
from napari_matplotlib.tests.helpers import (
1216
assert_figures_equal,
@@ -39,10 +43,48 @@ def assert_one_layer_plot_changes(
3943
by `widget_cls` also changes.
4044
"""
4145
widget = widget_cls(viewer)
42-
4346
viewer.add_image(data1[0], **data1[1])
4447
viewer.add_image(data2[0], **data2[1])
48+
assert_plot_changes(viewer, widget)
49+
4550

51+
@pytest.mark.parametrize("widget_cls", [FeaturesScatterWidget])
52+
def test_change_features_layer(
53+
make_napari_viewer, points_with_features_data, widget_cls
54+
):
55+
"""
56+
Test all widgets that take one layer with features as input to make sure the
57+
plot changes when the napari layer selection changes.
58+
"""
59+
viewer = make_napari_viewer()
60+
assert_features_plot_changes(viewer, widget_cls, points_with_features_data)
61+
62+
63+
def assert_features_plot_changes(
64+
viewer: Viewer,
65+
widget_cls: Type[NapariMPLWidget],
66+
data: Tuple[npt.NDArray[np.generic], Dict[str, Any]],
67+
) -> None:
68+
"""
69+
When the selected layer is changed, make sure the plot generated
70+
by `widget_cls` also changes.
71+
"""
72+
widget = widget_cls(viewer)
73+
viewer.add_points(data[0], **data[1])
74+
# Change the features data for the second layer
75+
data[1]["features"] = {
76+
name: data + 1 for name, data in data[1]["features"].items()
77+
}
78+
viewer.add_points(data[0], **data[1])
79+
assert_plot_changes(viewer, widget)
80+
81+
82+
def assert_plot_changes(viewer: Viewer, widget: NapariMPLWidget) -> None:
83+
"""
84+
Assert that a widget plot changes when the layer selection
85+
is changed. The passed viewer must already have two layers
86+
loaded.
87+
"""
4688
# Select first layer
4789
viewer.layers.selection.clear()
4890
viewer.layers.selection.add(viewer.layers[0])

0 commit comments

Comments
 (0)