diff --git a/qt/python/CMakeLists.txt b/qt/python/CMakeLists.txt index b7af7cf5768b58983845f3ae75f4164d6d427bbe..bfb66b509f947a5a94818a8aad0f28836df806cb 100644 --- a/qt/python/CMakeLists.txt +++ b/qt/python/CMakeLists.txt @@ -90,6 +90,8 @@ if(ENABLE_WORKBENCH) mantidqt/widgets/test/test_fitpropertybrowser.py mantidqt/widgets/samplelogs/test/test_samplelogs_model.py mantidqt/widgets/samplelogs/test/test_samplelogs_presenter.py + mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py + mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py mantidqt/widgets/observers/test/test_ads_observer.py mantidqt/widgets/observers/test/test_observing_presenter.py mantidqt/widgets/observers/test/test_observing_view.py @@ -122,6 +124,7 @@ if(ENABLE_WORKBENCH) mantidqt/widgets/instrumentview/test/test_instrumentview_io.py mantidqt/widgets/instrumentview/test/test_instrumentview_view.py mantidqt/widgets/samplelogs/test/test_samplelogs_view.py + mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py mantidqt/widgets/test/test_jupyterconsole.py mantidqt/widgets/workspacedisplay/matrix/test/test_matrixworkspacedisplay_io.py mantidqt/widgets/workspacedisplay/table/test/test_tableworkspacedisplay_io.py diff --git a/qt/python/mantidqt/widgets/sliceviewer/__init__.py b/qt/python/mantidqt/widgets/sliceviewer/__init__.py index 57d5ae5a28a63ed0dd44886f201c25df7cac61ca..57b1565b3979c58b8e99c11e430f73f54fc80884 100644 --- a/qt/python/mantidqt/widgets/sliceviewer/__init__.py +++ b/qt/python/mantidqt/widgets/sliceviewer/__init__.py @@ -7,3 +7,13 @@ # This file is part of the mantid workbench. # # +# Can be launch from python by _e.g_ +# +# +# from mantidqt.widgets.sliceviewer.presenter import SliceViewer +# from mantid.simpleapi import LoadMD +# from qtpy.QtWidgets import QApplication +# ws = LoadMD('ExternalData/Testing/SystemTests/tests/analysis/reference/ConvertWANDSCDtoQTest_HKL.nxs') +# app = QApplication([]) +# window = SliceViewer(ws) +# app.exec_() diff --git a/qt/python/mantidqt/widgets/sliceviewer/presenter.py b/qt/python/mantidqt/widgets/sliceviewer/presenter.py index 59b6e81235aad8aef106a445a0df5a2c150c4f68..a95c67bfcac033ed09b42df6d4c931a1a6316ddb 100644 --- a/qt/python/mantidqt/widgets/sliceviewer/presenter.py +++ b/qt/python/mantidqt/widgets/sliceviewer/presenter.py @@ -13,10 +13,10 @@ from .view import SliceViewerView class SliceViewer(object): - def __init__(self, ws, parent=None): - self.model = SliceViewerModel(ws) - - self.view = SliceViewerView(self, self.model.get_dimensions_info(), parent) + def __init__(self, ws, parent=None, model=None, view=None): + # Create model and view, or accept mocked versions + self.model = model if model else SliceViewerModel(ws) + self.view = view if view else SliceViewerView(self, self.model.get_dimensions_info(), parent) self.new_plot() diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py new file mode 100644 index 0000000000000000000000000000000000000000..23aab1b4c4490ba04b6bb1af4c6598edcb44aeee --- /dev/null +++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_model.py @@ -0,0 +1,63 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +# This file is part of the mantid workbench. +# +# +from __future__ import (absolute_import, division, print_function) + +from mantid.simpleapi import CreateMDHistoWorkspace +from mantidqt.widgets.sliceviewer.model import SliceViewerModel +from numpy.testing import assert_equal +import numpy as np +import unittest + + +class SliceViewerModelTest(unittest.TestCase): + + @classmethod + def setUpClass(self): + self.ws_MD_3D = CreateMDHistoWorkspace(Dimensionality=3, + Extents='-3,3,-10,10,-1,1', + SignalInput=range(100), + ErrorInput=range(100), + NumberOfBins='5,5,4', + Names='Dim1,Dim2,Dim3', + Units='MomentumTransfer,EnergyTransfer,Angstrom', + OutputWorkspace='ws_MD_2d') + + def test_model_MDH(self): + + model = SliceViewerModel(self.ws_MD_3D) + + self.assertEqual(model.get_ws(), self.ws_MD_3D) + + assert_equal(model.get_data((None, 2, 2)), range(90,95)) + assert_equal(model.get_data((1, 2, None)), range(18,118,25)) + assert_equal(model.get_data((None, None, 0)), np.reshape(range(50,75), (5,5)).T) + + dim_info = model.get_dim_info(0) + self.assertEqual(dim_info['minimum'], -3) + self.assertEqual(dim_info['maximum'], 3) + self.assertEqual(dim_info['number_of_bins'], 5) + self.assertAlmostEqual(dim_info['width'], 1.2) + self.assertEqual(dim_info['name'], 'Dim1') + self.assertEqual(dim_info['units'], 'MomentumTransfer') + + dim_infos = model.get_dimensions_info() + self.assertEqual(len(dim_infos), 3) + + dim_info = dim_infos[2] + self.assertEqual(dim_info['minimum'], -1) + self.assertEqual(dim_info['maximum'], 1) + self.assertEqual(dim_info['number_of_bins'], 4) + self.assertAlmostEqual(dim_info['width'], 0.5) + self.assertEqual(dim_info['name'], 'Dim3') + self.assertEqual(dim_info['units'], 'Angstrom') + + +if __name__ == '__main__': + unittest.main() diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py new file mode 100644 index 0000000000000000000000000000000000000000..4755bf3fc3053045b0e8ff03ea05673c31dd2bca --- /dev/null +++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_presenter.py @@ -0,0 +1,58 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +# This file is part of the mantid workbench. +# +# +from __future__ import (absolute_import, division, print_function) + +import matplotlib +matplotlib.use('Agg') # noqa: E402 +import unittest + +from mantid.py3compat import mock +from mantidqt.widgets.sliceviewer.model import SliceViewerModel +from mantidqt.widgets.sliceviewer.presenter import SliceViewer +from mantidqt.widgets.sliceviewer.view import SliceViewerView + + +class SliceViewerTest(unittest.TestCase): + + def setUp(self): + self.view = mock.Mock(spec=SliceViewerView) + self.view.dimensions = mock.Mock() + + self.model = mock.Mock(spec=SliceViewerModel) + + def test_sliceviewer(self): + + presenter = SliceViewer(None, model=self.model, view=self.view) + + # setup calls + self.assertEqual(self.model.get_dimensions_info.call_count, 0) + self.assertEqual(self.model.get_ws.call_count, 1) + self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1) + self.assertEqual(self.view.plot.call_count, 1) + + # new_plot + self.model.reset_mock() + self.view.reset_mock() + presenter.new_plot() + self.assertEqual(self.model.get_ws.call_count, 1) + self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1) + self.assertEqual(self.view.plot.call_count, 1) + + # update_plot_data + self.model.reset_mock() + self.view.reset_mock() + presenter.update_plot_data() + self.assertEqual(self.model.get_data.call_count, 1) + self.assertEqual(self.view.dimensions.get_slicepoint.call_count, 1) + self.assertEqual(self.view.update_plot_data.call_count, 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py new file mode 100644 index 0000000000000000000000000000000000000000..3bcc48a31719c1ea1e8838be416b5ea01bf3adb6 --- /dev/null +++ b/qt/python/mantidqt/widgets/sliceviewer/test/test_sliceviewer_view.py @@ -0,0 +1,34 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +# This file is part of the mantid workbench. +from qtpy.QtWidgets import QApplication + +import matplotlib as mpl +mpl.use('Agg') # noqa +from mantid.simpleapi import CreateMDHistoWorkspace +from mantidqt.utils.qt.testing import GuiTest +from mantidqt.utils.qt.testing.qt_widget_finder import QtWidgetFinder +from mantidqt.widgets.sliceviewer.presenter import SliceViewer + + +class SliceViewerViewTest(GuiTest, QtWidgetFinder): + def test_deleted_on_close(self): + ws = CreateMDHistoWorkspace(Dimensionality=3, + Extents='-3,3,-10,10,-1,1', + SignalInput=range(100), + ErrorInput=range(100), + NumberOfBins='5,5,4', + Names='Dim1,Dim2,Dim3', + Units='MomentumTransfer,EnergyTransfer,Angstrom', + OutputWorkspace='ws_MD_2d') + pres = SliceViewer(ws) + self.assert_widget_created() + pres.view.close() + + QApplication.processEvents() + + self.assert_no_toplevel_widgets()