Skip to content

Commit 04383e0

Browse files
authored
Merge pull request #162 from dstansby/scatter-layer-change
Test layer changes for ScatterWidget
2 parents 964ce24 + 46ee64f commit 04383e0

File tree

1 file changed

+36
-28
lines changed

1 file changed

+36
-28
lines changed

Diff for: src/napari_matplotlib/tests/test_layer_changes.py

+36-28
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from napari_matplotlib import (
1010
FeaturesScatterWidget,
1111
HistogramWidget,
12+
ScatterWidget,
1213
SliceWidget,
1314
)
1415
from napari_matplotlib.base import NapariMPLWidget
@@ -18,34 +19,32 @@
1819
)
1920

2021

21-
@pytest.mark.parametrize("widget_cls", [HistogramWidget, SliceWidget])
22+
@pytest.mark.parametrize(
23+
"widget_cls, n_layers",
24+
[(HistogramWidget, 1), (SliceWidget, 1), (ScatterWidget, 2)],
25+
)
2226
def test_change_one_layer(
23-
make_napari_viewer, brain_data, astronaut_data, widget_cls
27+
make_napari_viewer,
28+
brain_data,
29+
astronaut_data,
30+
widget_cls,
31+
n_layers,
2432
):
2533
"""
2634
Test all widgets that take one layer as input to make sure the plot changes
2735
when the napari layer selection changes.
2836
"""
2937
viewer = make_napari_viewer()
30-
assert_one_layer_plot_changes(
31-
viewer, widget_cls, brain_data, astronaut_data
32-
)
33-
3438

35-
def assert_one_layer_plot_changes(
36-
viewer: Viewer,
37-
widget_cls: Type[NapariMPLWidget],
38-
data1: Tuple[npt.NDArray[np.generic], Dict[str, Any]],
39-
data2: Tuple[npt.NDArray[np.generic], Dict[str, Any]],
40-
) -> None:
41-
"""
42-
When the selected layer is changed, make sure the plot generated
43-
by `widget_cls` also changes.
44-
"""
4539
widget = widget_cls(viewer)
46-
viewer.add_image(data1[0], **data1[1])
47-
viewer.add_image(data2[0], **data2[1])
48-
assert_plot_changes(viewer, widget)
40+
# Add n copies of two different datasets
41+
for _ in range(n_layers):
42+
viewer.add_image(brain_data[0], **brain_data[1])
43+
for _ in range(n_layers):
44+
viewer.add_image(astronaut_data[0], **astronaut_data[1])
45+
46+
assert len(viewer.layers) == 2 * n_layers
47+
assert_plot_changes(viewer, widget, n_layers=n_layers)
4948

5049

5150
@pytest.mark.parametrize("widget_cls", [FeaturesScatterWidget])
@@ -76,26 +75,35 @@ def assert_features_plot_changes(
7675
name: data + 1 for name, data in data[1]["features"].items()
7776
}
7877
viewer.add_points(data[0], **data[1])
79-
assert_plot_changes(viewer, widget)
78+
assert_plot_changes(viewer, widget, n_layers=1)
8079

8180

82-
def assert_plot_changes(viewer: Viewer, widget: NapariMPLWidget) -> None:
81+
def assert_plot_changes(
82+
viewer: Viewer, widget: NapariMPLWidget, *, n_layers: int
83+
) -> None:
8384
"""
8485
Assert that a widget plot changes when the layer selection
85-
is changed. The passed viewer must already have two layers
86+
is changed. The passed viewer must already have (2 * n_layers) layers
8687
loaded.
8788
"""
88-
# Select first layer
89+
# Select first layer(s)
8990
viewer.layers.selection.clear()
90-
viewer.layers.selection.add(viewer.layers[0])
91+
92+
for i in range(n_layers):
93+
viewer.layers.selection.add(viewer.layers[i])
94+
assert len(viewer.layers.selection) == n_layers
9195
fig1 = deepcopy(widget.figure)
9296

93-
# Re-selecting first layer should produce identical plot
97+
# Re-selecting first layer(s) should produce identical plot
9498
viewer.layers.selection.clear()
95-
viewer.layers.selection.add(viewer.layers[0])
99+
for i in range(n_layers):
100+
viewer.layers.selection.add(viewer.layers[i])
101+
assert len(viewer.layers.selection) == n_layers
96102
assert_figures_equal(widget.figure, fig1)
97103

98-
# Plotting the second layer should produce a different plot
104+
# Plotting the second layer(s) should produce a different plot
99105
viewer.layers.selection.clear()
100-
viewer.layers.selection.add(viewer.layers[1])
106+
for i in range(n_layers):
107+
viewer.layers.selection.add(viewer.layers[n_layers + i])
108+
assert len(viewer.layers.selection) == n_layers
101109
assert_figures_not_equal(widget.figure, fig1)

0 commit comments

Comments
 (0)