Source code for crikit.io.lazy5.tests.test_ui

""" Test inspection of HDF5 files """
import os
import sys
import h5py

import numpy as np
import pytest

try:
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtTest import QTest
    import PyQt5.QtCore
    from PyQt5.QtCore import Qt
except Exception:
    HAS_PYQT5 = False
else:
    HAS_PYQT5 = True
    import crikit.io.lazy5 as lazy5
    from crikit.io.lazy5.ui.QtHdfLoad import HdfLoad

from crikit.io.lazy5.utils import hdf_is_open

[docs]@pytest.mark.skipif(not HAS_PYQT5, reason='PyQt5 not installed, skipping.') class TestUI: """ Test the HDF5 PyQt5 Viewer """
[docs] @pytest.fixture(scope="module") def hdf_dataset(self): """ Setups and tears down a sample HDF5 file """ filename = 'temp_test_ui.h5' fid = h5py.File(filename, 'w') data_m, data_n, data_p = [20, 22, 24] data = np.random.randn(data_m, data_n, data_p) fid.create_dataset('base', data=data) grp1 = fid.create_group('Group1') grp3 = fid.create_group('Group2/Group3') grp6 = fid.create_group('Group4/Group5/Group6') grp1.create_dataset('ingroup1_1', data=data) grp1.create_dataset('ingroup1_2', data=data) fid.create_dataset('Group2/ingroup2', data=data) grp3.create_dataset('ingroup3', data=data) grp6.create_dataset('ingroup6', data=data) fid['base'].attrs['Attribute_str'] = 'Test' fid['base'].attrs['Attribute_bytes'] = b'Test' fid['base'].attrs['Attribute_np_bytes'] = np.bytes_('Test') # pylint: disable=no-member fid['base'].attrs.create('Attribute_int', 1) fid['base'].attrs.create('Attribute_float', 1.1) fid['base'].attrs.create('Attribute_np_1d', np.array([1, 2, 3])) fid['base'].attrs.create('Attribute_np_2d', np.array([[1, 2, 3], [4, 5, 6]])) app = QApplication(sys.argv) # pylint: disable=C0103, W0612 yield filename # Tear-down if hdf_is_open(fid): fid.close() os.remove(filename)
# sys.exit()
[docs] def test_ui_win_title_empty_load_dataset(self, hdf_dataset): """ Test whether load dataset dialog is titled properly with no title provided""" self.filename = hdf_dataset dialog = HdfLoad() _ = dialog.fileOpen(self.filename) assert dialog.windowTitle() == 'Select a dataset...'
[docs] def test_ui_win_title_load_dataset(self, hdf_dataset): """ Test whether load dataset dialog is titled properly """ self.filename = hdf_dataset dialog = HdfLoad(title='TEST') _ = dialog.fileOpen(self.filename) assert dialog.windowTitle() == 'TEST: Select a dataset...'
[docs] def test_ui_load_file(self, hdf_dataset): """ Load test file and check groups """ self.filename = hdf_dataset dialog = HdfLoad() _ = dialog.fileOpen(self.filename) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] list_grps = [dialog.ui.comboBoxGroupSelect.itemText(num) for num in range(dialog.ui.comboBoxGroupSelect.count())] assert list_dsets == ['base'] assert '/Group1' in list_grps assert '/Group2/Group3' in list_grps assert '/Group4/Group5/Group6' in list_grps assert '/Group5' not in list_grps
[docs] def test_ui_change_grp_and_filter_include(self, hdf_dataset): """ Load test file, change to Group1, filter for _1 """ self.filename = hdf_dataset dialog = HdfLoad() _ = dialog.fileOpen(self.filename) # Change group to Group1 dialog.ui.comboBoxGroupSelect.setCurrentIndex(1) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] assert dialog.ui.comboBoxGroupSelect.currentText() == '/Group1' assert list_dsets == ['ingroup1_1', 'ingroup1_2'] dialog.ui.filterIncludeString.setText('_1') QTest.mouseClick(dialog.ui.pushButtonFilter, Qt.LeftButton) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] assert list_dsets == ['ingroup1_1']
[docs] def test_ui_change_grp_and_filter_exclude(self, hdf_dataset): """ Load test file, change to Group1, filter for _1 """ self.filename = hdf_dataset dialog = HdfLoad() _ = dialog.fileOpen(self.filename) # Change group to Group1 dialog.ui.comboBoxGroupSelect.setCurrentIndex(1) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] assert dialog.ui.comboBoxGroupSelect.currentText() == '/Group1' assert list_dsets == ['ingroup1_1', 'ingroup1_2'] dialog.ui.filterExcludeString.setText('_1') QTest.mouseClick(dialog.ui.pushButtonFilter, Qt.LeftButton) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] assert list_dsets == ['ingroup1_2']
[docs] def test_ui_attrs(self, hdf_dataset): """ Load test file, change to base group (/), check attributes """ self.filename = hdf_dataset dialog = HdfLoad() _ = dialog.fileOpen(self.filename) # Change group to Group1 dialog.ui.comboBoxGroupSelect.setCurrentIndex(0) list_dsets = [dialog.ui.listDataSet.item(num).text() for num in range(dialog.ui.listDataSet.count())] assert dialog.ui.comboBoxGroupSelect.currentText() == '/' assert list_dsets == ['base'] # Select dataset base dialog.ui.listDataSet.item(0).setSelected(True) QTest.mouseClick(dialog.ui.listDataSet.viewport(), Qt.LeftButton) assert (dialog.ui.tableAttributes.findItems('Attribute_str', Qt.MatchExactly)[0].text() == 'Attribute_str') assert not dialog.ui.tableAttributes.findItems('fake', Qt.MatchExactly) # Empty
[docs] def test_ui_wrongfile(self, hdf_dataset): """ Load test file, change to base group (/), check attributes """ self.filename = hdf_dataset dialog = HdfLoad() with pytest.raises(FileNotFoundError): _ = dialog.fileOpen('does_not_exist.h5')