|
1 | 1 | from typing import Any |
2 | 2 |
|
| 3 | +import numpy as np |
3 | 4 | import pytest |
4 | 5 | from napari.utils.events import EventedList |
5 | 6 | from napari_spatialdata._sdata_widgets import SdataWidget |
6 | 7 | from napari_spatialdata._view import QtAdataViewWidget |
7 | 8 | from napari_spatialdata.utils._test_utils import click_list_widget_item, get_center_pos_listitem |
8 | 9 | from spatialdata.datasets import blobs |
| 10 | +from spatialdata.transformations import Affine, set_transformation |
9 | 11 |
|
10 | 12 |
|
11 | 13 | @pytest.mark.parametrize("widget", [QtAdataViewWidget]) |
12 | 14 | @pytest.mark.parametrize("n_channels", [3, 5]) |
13 | | -def test_channel_slider_images(qtbot, make_napari_viewer: any, widget: Any, n_channels: int): |
| 15 | +def test_channel_slider_images_bug_282(qtbot, make_napari_viewer: any, widget: Any, n_channels: int): |
| 16 | + # https://github.com/scverse/napari-spatialdata/issues/282 |
14 | 17 | channels = [f"channel_{i}" for i in range(n_channels)] |
15 | 18 | sdata_blobs = blobs(c_coords=channels) |
16 | 19 | viewer = make_napari_viewer() |
@@ -63,3 +66,38 @@ def test_plot_dataframe_annotation_on_points(qtbot, make_napari_viewer: any, wid |
63 | 66 | ) |
64 | 67 | widget.dataframe_columns_widget._onAction([column]) |
65 | 68 | viewer.close() |
| 69 | + |
| 70 | + |
| 71 | +@pytest.mark.parametrize("multiscale", [True, False]) |
| 72 | +@pytest.mark.parametrize("widget", [QtAdataViewWidget]) |
| 73 | +def test_channel_slider_images_bug_302(qtbot, make_napari_viewer: any, widget: Any, multiscale: bool): |
| 74 | + # https://github.com/scverse/napari-spatialdata/issues/302 |
| 75 | + channels = [f"channel_{i}" for i in range(3)] |
| 76 | + sdata_blobs = blobs(c_coords=channels) |
| 77 | + |
| 78 | + # set a transformation to the single-scale and multi-scale images |
| 79 | + element_name = "blobs_image" if not multiscale else "blobs_multiscale_image" |
| 80 | + affine = Affine(np.array([[10, 20, 30], [40, 50, 60], [0, 0, 1]]), input_axes=("x", "y"), output_axes=("x", "y")) |
| 81 | + set_transformation(sdata_blobs[element_name], transformation=affine, to_coordinate_system="global") |
| 82 | + |
| 83 | + viewer = make_napari_viewer() |
| 84 | + sdata_widget = SdataWidget(viewer, EventedList([sdata_blobs])) |
| 85 | + |
| 86 | + viewer.window.add_dock_widget(sdata_widget, name="SpatialData") |
| 87 | + sdata_widget.viewer_model.add_sdata_image(sdata_blobs, element_name, "global", False) |
| 88 | + |
| 89 | + # this connects the slider to the viewer (done in __init__) |
| 90 | + _ = widget(viewer) |
| 91 | + |
| 92 | + # check if the slider is present |
| 93 | + start, stop, step = viewer.dims.range[0] |
| 94 | + assert start == 0 |
| 95 | + assert step == 1 |
| 96 | + |
| 97 | + # simulate position change of the slider |
| 98 | + viewer.dims.set_current_step(0, 0) |
| 99 | + qtbot.wait(50) # wait for a short time to simulate user interaction |
| 100 | + viewer.dims.set_current_step(0, 1) |
| 101 | + qtbot.wait(50) # wait for a short time to simulate user interaction |
| 102 | + |
| 103 | + viewer.close() |
0 commit comments