Skip to content

Check that single layer widget plots change w/ layer change #151

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 0 additions & 27 deletions src/napari_matplotlib/tests/test_histogram.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@
import pytest

from napari_matplotlib import HistogramWidget
from napari_matplotlib.tests.helpers import (
assert_figures_equal,
assert_figures_not_equal,
)


@pytest.mark.mpl_image_compare
Expand All @@ -27,26 +23,3 @@ def test_histogram_3D(make_napari_viewer, brain_data):
# Need to return a copy, as original figure is too eagerley garbage
# collected by the widget
return deepcopy(fig)


def test_change_layer(make_napari_viewer, brain_data, astronaut_data):
viewer = make_napari_viewer()
widget = HistogramWidget(viewer)

viewer.add_image(brain_data[0], **brain_data[1])
viewer.add_image(astronaut_data[0], **astronaut_data[1])

# Select first layer
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[0])
fig1 = deepcopy(widget.figure)

# Re-selecting first layer should produce identical plot
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[0])
assert_figures_equal(widget.figure, fig1)

# Plotting the second layer should produce a different plot
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[1])
assert_figures_not_equal(widget.figure, fig1)
59 changes: 59 additions & 0 deletions src/napari_matplotlib/tests/test_layer_changes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from copy import deepcopy
from typing import Any, Dict, Tuple, Type

import numpy as np
import numpy.typing as npt
import pytest
from napari.viewer import Viewer

from napari_matplotlib import HistogramWidget, SliceWidget
from napari_matplotlib.base import NapariMPLWidget
from napari_matplotlib.tests.helpers import (
assert_figures_equal,
assert_figures_not_equal,
)


@pytest.mark.parametrize("widget_cls", [HistogramWidget, SliceWidget])
def test_change_one_layer(
make_napari_viewer, brain_data, astronaut_data, widget_cls
):
"""
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])

# Select first layer
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[0])
fig1 = deepcopy(widget.figure)

# Re-selecting first layer should produce identical plot
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[0])
assert_figures_equal(widget.figure, fig1)

# Plotting the second layer should produce a different plot
viewer.layers.selection.clear()
viewer.layers.selection.add(viewer.layers[1])
assert_figures_not_equal(widget.figure, fig1)