Skip to content

Commit

Permalink
add test coverage
Browse files Browse the repository at this point in the history
* replicating previous tests
* fix case where subset visibility should default based on parent data vis
  • Loading branch information
kecnry committed Oct 28, 2024
1 parent 43715e0 commit 1a60f9e
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 3 deletions.
8 changes: 5 additions & 3 deletions jdaviz/configs/default/plugins/data_menu/data_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def during_select_sync(self):

@observe('dm_layer_selected')
def _dm_layer_selected_changed(self, event={}):
if not hasattr(self, 'layer') or not self.layer.multiselect:
if not hasattr(self, 'layer') or not self.layer.multiselect: # pragma: no cover
return
if self._during_select_sync:
return
Expand All @@ -109,7 +109,7 @@ def _dm_layer_selected_changed(self, event={}):

@observe('layer_selected', 'layer_items')
def _update_dm_layer_selected(self, event={}):
if not hasattr(self, 'layer') or not self.layer.multiselect:
if not hasattr(self, 'layer') or not self.layer.multiselect: # pragma: no cover
return
if self._during_select_sync:
return
Expand Down Expand Up @@ -138,6 +138,8 @@ def set_layer_visibility(self, layer_label, visible=True):
for layer in self._viewer.layers:
if layer.layer.label == layer_label:
layer.visible = visible
elif hasattr(layer.layer, 'data') and layer.layer.data.label == layer_label:
layer.visible = layer.layer.label in self.visible_layers
return self.visible_layers

def toggle_layer_visibility(self, layer_label):
Expand All @@ -159,4 +161,4 @@ def toggle_layer_visibility(self, layer_label):
return visible

def vue_set_layer_visibility(self, info, *args):
return self.set_layer_visibility(info.get('layer'), info.get('value'))
return self.set_layer_visibility(info.get('layer'), info.get('value')) # pragma: no cover
68 changes: 68 additions & 0 deletions jdaviz/configs/default/tests/test_data_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import numpy as np
from specutils import SpectralRegion


def test_data_menu_toggles(specviz_helper, spectrum1d):
# NOTE: this test is adopted from core.tests.test_data_menu.test_data_menu_toggles
# which should be removed once the old data menu is removed from jdaviz

# load 2 data entries
specviz_helper.load_data(spectrum1d, data_label="test")
new_spec = specviz_helper.get_spectra(apply_slider_redshift=True)["test"]*0.9
specviz_helper.load_data(new_spec, data_label="test2")

# check that both are enabled in the data menu
sv = specviz_helper.viewers['spectrum-viewer']
dm = sv._obj.data_menu
assert len(dm._obj.layer_items) == 2
assert len(dm._obj.visible_layers) == 2

# disable (hide layer) for second entry
dm.set_layer_visibility('test2', False)
assert len(dm._obj.layer_items) == 2
assert len(dm._obj.visible_layers) == 1

# add a subset and make sure it appears for the first data entry but not the second
specviz_helper.plugins['Subset Tools']._obj.import_region(
SpectralRegion(6000 * spectrum1d.spectral_axis.unit, 6500 * spectrum1d.spectral_axis.unit))

assert len(dm._obj.layer_items) == 3
assert len(dm._obj.visible_layers) == 2
assert len(sv._obj.layers) == 4
assert sv._obj.layers[2].visible is True # subset corresponding to first (visible) data entry
assert sv._obj.layers[3].visible is False # subset corresponding to second (hidden) data entry

# enable data layer from menu and subset should also become visible
dm.toggle_layer_visibility('test2')
assert np.all([layer.visible for layer in sv._obj.layers])


def test_data_menu_selection(specviz_helper, spectrum1d):
# load 2 data entries
specviz_helper.load_data(spectrum1d, data_label="test")
new_spec = specviz_helper.get_spectra(apply_slider_redshift=True)["test"]*0.9
specviz_helper.load_data(new_spec, data_label="test2")

sv = specviz_helper.viewers['spectrum-viewer']
dm = sv._obj.data_menu

# no selection by default
assert len(dm._obj.dm_layer_selected) == 0
assert len(dm.layer.selected) == 0

# test layer -> UI sync
dm.layer.selected = dm.layer.choices[0]
assert len(dm._obj.dm_layer_selected) == len(dm.layer.selected)

# test UI -> layer sync
dm._obj.dm_layer_selected = [0, 1]
assert len(dm._obj.dm_layer_selected) == len(dm.layer.selected)

# test that sync remains during layer deletion
dm._obj.dm_layer_selected = [1]
assert dm.layer.selected == ['test']
specviz_helper.app.remove_data_from_viewer("spectrum-viewer", "test2")
specviz_helper.app.vue_data_item_remove({"item_name": "test2"})
assert len(dm._obj.layer_items) == 1
assert dm._obj.dm_layer_selected == [0]
assert dm.layer.selected == ['test']

0 comments on commit 1a60f9e

Please # to comment.