From 46ee64f29dd5552ae92a7047c29faf2f37c480f9 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 12 Jun 2023 17:37:33 +0100 Subject: [PATCH] Test layer changes for ScatterWidget --- .../tests/test_layer_changes.py | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/napari_matplotlib/tests/test_layer_changes.py b/src/napari_matplotlib/tests/test_layer_changes.py index 87baebfd..bdd6c600 100644 --- a/src/napari_matplotlib/tests/test_layer_changes.py +++ b/src/napari_matplotlib/tests/test_layer_changes.py @@ -9,6 +9,7 @@ from napari_matplotlib import ( FeaturesScatterWidget, HistogramWidget, + ScatterWidget, SliceWidget, ) from napari_matplotlib.base import NapariMPLWidget @@ -18,34 +19,32 @@ ) -@pytest.mark.parametrize("widget_cls", [HistogramWidget, SliceWidget]) +@pytest.mark.parametrize( + "widget_cls, n_layers", + [(HistogramWidget, 1), (SliceWidget, 1), (ScatterWidget, 2)], +) def test_change_one_layer( - make_napari_viewer, brain_data, astronaut_data, widget_cls + make_napari_viewer, + brain_data, + astronaut_data, + widget_cls, + n_layers, ): """ Test all widgets that take one layer as input to make sure the plot changes when the napari layer selection changes. """ viewer = make_napari_viewer() - assert_one_layer_plot_changes( - viewer, widget_cls, brain_data, astronaut_data - ) - -def assert_one_layer_plot_changes( - viewer: Viewer, - widget_cls: Type[NapariMPLWidget], - data1: Tuple[npt.NDArray[np.generic], Dict[str, Any]], - data2: Tuple[npt.NDArray[np.generic], Dict[str, Any]], -) -> None: - """ - When the selected layer is changed, make sure the plot generated - by `widget_cls` also changes. - """ widget = widget_cls(viewer) - viewer.add_image(data1[0], **data1[1]) - viewer.add_image(data2[0], **data2[1]) - assert_plot_changes(viewer, widget) + # Add n copies of two different datasets + for _ in range(n_layers): + viewer.add_image(brain_data[0], **brain_data[1]) + for _ in range(n_layers): + viewer.add_image(astronaut_data[0], **astronaut_data[1]) + + assert len(viewer.layers) == 2 * n_layers + assert_plot_changes(viewer, widget, n_layers=n_layers) @pytest.mark.parametrize("widget_cls", [FeaturesScatterWidget]) @@ -76,26 +75,35 @@ def assert_features_plot_changes( name: data + 1 for name, data in data[1]["features"].items() } viewer.add_points(data[0], **data[1]) - assert_plot_changes(viewer, widget) + assert_plot_changes(viewer, widget, n_layers=1) -def assert_plot_changes(viewer: Viewer, widget: NapariMPLWidget) -> None: +def assert_plot_changes( + viewer: Viewer, widget: NapariMPLWidget, *, n_layers: int +) -> None: """ Assert that a widget plot changes when the layer selection - is changed. The passed viewer must already have two layers + is changed. The passed viewer must already have (2 * n_layers) layers loaded. """ - # Select first layer + # Select first layer(s) viewer.layers.selection.clear() - viewer.layers.selection.add(viewer.layers[0]) + + for i in range(n_layers): + viewer.layers.selection.add(viewer.layers[i]) + assert len(viewer.layers.selection) == n_layers fig1 = deepcopy(widget.figure) - # Re-selecting first layer should produce identical plot + # Re-selecting first layer(s) should produce identical plot viewer.layers.selection.clear() - viewer.layers.selection.add(viewer.layers[0]) + for i in range(n_layers): + viewer.layers.selection.add(viewer.layers[i]) + assert len(viewer.layers.selection) == n_layers assert_figures_equal(widget.figure, fig1) - # Plotting the second layer should produce a different plot + # Plotting the second layer(s) should produce a different plot viewer.layers.selection.clear() - viewer.layers.selection.add(viewer.layers[1]) + for i in range(n_layers): + viewer.layers.selection.add(viewer.layers[n_layers + i]) + assert len(viewer.layers.selection) == n_layers assert_figures_not_equal(widget.figure, fig1) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy