From df636c92067b818ede51ce6875a8ca280f82150d Mon Sep 17 00:00:00 2001 From: Dimitar Tasev <dimtasev@gmail.com> Date: Mon, 29 Oct 2018 13:25:56 +0000 Subject: [PATCH] Tests for model, presenter and TableViewModel, re #21593 --- .../test/test_matrixworkspacedisplay_model.py | 86 +++------- .../test_matrixworkspacedisplay_presenter.py | 153 +++++++++--------- ...t_matrixworkspacedisplay_tableviewmodel.py | 2 +- 3 files changed, 95 insertions(+), 146 deletions(-) diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py index 49d9af3489e..c6b5cea5bff 100644 --- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py +++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py @@ -9,81 +9,37 @@ # from __future__ import (absolute_import, division, print_function) -from mantid.simpleapi import LoadEventNexus, CreateMDWorkspace -from mantidqt.widgets.samplelogs.model import SampleLogsModel - import unittest +from mock import Mock -class MatrixWorkspaceDisplayModelTest(unittest.TestCase): - - def test_model(self): - ws = LoadEventNexus('CNCS_7860', MetaDataOnly=True) - model = SampleLogsModel(ws) - - self.assertEqual(model.get_exp(), 0) - self.assertEqual(model.get_name(), 'ws') - self.assertEqual(model.getNumExperimentInfo(), 0) - - log = model.get_log("Speed5") - self.assertEqual(log.name, "Speed5") - self.assertEqual(log.size(), 4) +from mantidqt.widgets.matrixworkspacedisplay.model import MatrixWorkspaceDisplayModel +from mantidqt.widgets.matrixworkspacedisplay.table_view_model import MatrixWorkspaceTableViewModelType +from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import \ + MockWorkspace - log_names = model.get_log_names() - self.assertEqual(len(log_names), 48) - self.assertIn("Speed5", log_names) - values = model.get_log_display_values("Speed5") - self.assertEqual(values[0], "Speed5") - self.assertEqual(values[1], "float series") - self.assertEqual(values[2], "(4 entries)") - self.assertEqual(values[3], "Hz") - - self.assertTrue(model.is_log_plottable("Speed5")) - self.assertFalse(model.is_log_plottable("duration")) - - stats = model.get_statistics("Speed5") - self.assertEqual(stats.maximum, 300.0) - - self.assertFalse(model.isMD()) +class MatrixWorkspaceDisplayModelTest(unittest.TestCase): - itemModel = model.getItemModel() - self.assertEqual(itemModel.horizontalHeaderItem(0).text(), "Name") - self.assertEqual(itemModel.horizontalHeaderItem(1).text(), "Type") - self.assertEqual(itemModel.horizontalHeaderItem(2).text(), "Value") - self.assertEqual(itemModel.horizontalHeaderItem(3).text(), "Units") - self.assertEqual(itemModel.rowCount(), 48) - self.assertEqual(itemModel.item(0,0).text(), "ChopperStatus1") - self.assertEqual(itemModel.item(0,1).text(), "float series") - self.assertEqual(itemModel.item(0,2).text(), "4.0") - self.assertEqual(itemModel.item(0,3).text(), "") + def test_get_name(self): + ws = MockWorkspace() + expected_name = "TEST_WORKSPACE" + ws.name = Mock(return_value=expected_name) + model = MatrixWorkspaceDisplayModel(ws) - def test_model_MD(self): - ws1 = LoadEventNexus("CNCS_7860", MetaDataOnly=True) - ws2 = LoadEventNexus("VIS_19351", MetaDataOnly=True) - md = CreateMDWorkspace(Dimensions=1, Extents='-1,1', Names='A', Units='U') - md.addExperimentInfo(ws1) - md.addExperimentInfo(ws2) - model = SampleLogsModel(md) + self.assertEqual(expected_name, model.get_name()) - self.assertEqual(model.get_exp(), 0) - self.assertEqual(model.get_name(), 'md') - self.assertEqual(model.getNumExperimentInfo(), 2) + def test_get_item_model(self): + ws = MockWorkspace() + expected_name = "TEST_WORKSPACE" + ws.name = Mock(return_value=expected_name) + model = MatrixWorkspaceDisplayModel(ws) - values = model.get_log_display_values("duration") - self.assertEqual(values[0], "duration") - self.assertEqual(values[1], "number") - self.assertEqual(values[2], 148.0) - self.assertEqual(values[3], "second") + x_model, y_model, e_model = model.get_item_model() - # Change exp - model.set_exp(1) - self.assertEqual(model.get_exp(), 1) - values = model.get_log_display_values("duration") - self.assertEqual(values[0], "duration") - self.assertEqual(values[1], "number") - self.assertEqual(values[2], 4.616606712341309) - self.assertEqual(values[3], "second") + self.assertEqual(x_model.type, MatrixWorkspaceTableViewModelType.x) + self.assertEqual(y_model.type, MatrixWorkspaceTableViewModelType.y) + self.assertEqual(e_model.type, MatrixWorkspaceTableViewModelType.e) if __name__ == '__main__': diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py index a2e0dacc263..f515de70aa9 100644 --- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py +++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py @@ -9,88 +9,81 @@ # from __future__ import (absolute_import, division, print_function) -import matplotlib -matplotlib.use('Agg') # noqa: E402 +import unittest -from mantidqt.widgets.samplelogs.model import SampleLogsModel -from mantidqt.widgets.samplelogs.presenter import SampleLogs -from mantidqt.widgets.samplelogs.view import SampleLogsView +from mock import Mock -import unittest -try: - from unittest import mock -except ImportError: - import mock - - -class SampleLogsTest(unittest.TestCase): - - def setUp(self): - self.view = mock.Mock(spec=SampleLogsView) - self.view.get_row_log_name = mock.Mock(return_value="Speed5") - self.view.get_selected_row_indexes = mock.Mock(return_value=[5]) - self.view.get_exp = mock.Mock(return_value=1) - - self.model = mock.Mock(spec=SampleLogsModel) - self.model.get_ws = mock.Mock(return_value='ws') - self.model.is_log_plottable = mock.Mock(return_value=True) - self.model.get_statistics = mock.Mock(return_value=[1,2,3,4]) - self.model.get_exp = mock.Mock(return_value=0) - - def test_sampleLogs(self): - - presenter = SampleLogs(None, model=self.model, view=self.view) - - # setup calls - self.assertEqual(self.view.set_model.call_count, 1) - self.assertEqual(self.model.getItemModel.call_count, 1) - - # plot_logs - presenter.plot_logs() - self.model.is_log_plottable.assert_called_once_with("Speed5") - self.assertEqual(self.model.get_ws.call_count, 1) - self.view.plot_selected_logs.assert_called_once_with('ws', 0, [5]) - - # update_stats - presenter.update_stats() - self.assertEqual(self.model.get_statistics.call_count, 1) - self.view.get_row_log_name.assert_called_with(5) - self.view.set_statistics.assert_called_once_with([1,2,3,4]) - self.assertEqual(self.view.clear_statistics.call_count, 0) - - self.view.reset_mock() - self.view.get_selected_row_indexes = mock.Mock(return_value=[2,5]) - presenter.update_stats() - self.assertEqual(self.view.set_statistics.call_count, 0) - self.assertEqual(self.view.clear_statistics.call_count, 1) - - # changeExpInfo - self.model.reset_mock() - self.view.reset_mock() - - presenter.changeExpInfo() - self.assertEqual(self.view.get_selected_row_indexes.call_count, 3) - self.assertEqual(self.view.get_exp.call_count, 1) - self.model.set_exp.assert_called_once_with(1) - self.view.set_selected_rows.assert_called_once_with([2,5]) - - # clicked - self.model.reset_mock() - self.view.reset_mock() - - presenter.clicked() - self.assertEqual(self.view.get_selected_row_indexes.call_count, 2) - - # double clicked - self.model.reset_mock() - self.view.reset_mock() - - index = mock.Mock() - index.row = mock.Mock(return_value=7) - - presenter.doubleClicked(index) - self.view.get_row_log_name.assert_called_once_with(7) - self.model.get_log.assert_called_once_with("Speed5") +from mantidqt.widgets.matrixworkspacedisplay.presenter import MatrixWorkspaceDisplay +from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import MockWorkspace, \ + MockQModelIndex, MockQModelIndexSibling +from mantidqt.widgets.matrixworkspacedisplay.test_helpers.mock_matrixworkspacedisplay_view import \ + MockMatrixWorkspaceDisplayView, MockQTableView + + +class MatrixWorkspaceDisplayPresenterTest(unittest.TestCase): + + def test_setup_table(self): + ws = MockWorkspace() + view = MockMatrixWorkspaceDisplayView() + presenter = MatrixWorkspaceDisplay(ws, view=view) + self.assertEqual(3, view.set_context_menu_actions.call_count) + self.assertEqual(1, view.set_model.call_count) + + def test_action_copy_spectrum_values(self): + ws = MockWorkspace() + view = MockMatrixWorkspaceDisplayView() + presenter = MatrixWorkspaceDisplay(ws, view=view) + + mock_table = MockQTableView() + + # two rows are selected in different positions + mock_indexes = [MockQModelIndex(0, 1), MockQModelIndex(3, 1)] + mock_table.mock_selection_model.selectedRows = Mock(return_value=mock_indexes) + mock_read = Mock(return_value=[43, 99]) + expected_string = "43 99\n43 99" + + presenter.action_copy_spectrum_values(mock_table, mock_read) + + view.copy_to_clipboard.assert_called_once_with(expected_string) + + def test_action_copy_spectrum_values_no_selection(self): + self.skipTest("Not implemented") + + def test_action_copy_bin_values(self): + ws = MockWorkspace() + view = MockMatrixWorkspaceDisplayView() + presenter = MatrixWorkspaceDisplay(ws, view=view) + mock_table = MockQTableView() + + # two columns are selected at different positions + mock_indexes = [MockQModelIndex(0, 0), MockQModelIndex(0, 3)] + mock_table.mock_selection_model.selectedColumns = Mock(return_value=mock_indexes) + # change the mock ws to have 3 histograms + ws.getNumberHistograms = Mock(return_value=3) + + mock_read = Mock(return_value=[83, 11, 33, 70]) + expected_string = "83 70\n83 70\n83 70" + + presenter.action_copy_bin_values(mock_table, mock_read) + + view.copy_to_clipboard.assert_called_once_with(expected_string) + + def test_action_copy_bin_values_no_selection(self): + self.skipTest("Not Implemented") + + def test_action_copy_cell(self): + ws = MockWorkspace() + view = MockMatrixWorkspaceDisplayView() + presenter = MatrixWorkspaceDisplay(ws, view=view) + mock_table = MockQTableView() + + # two columns are selected at different positions + mock_table.mock_selection_model.currentIndex = Mock(return_value=MockQModelIndex(0, 2)) + # change the mock ws to have 3 histograms + ws.getNumberHistograms = Mock(return_value=3) + presenter.action_copy_cell(mock_table) + + view.copy_to_clipboard.assert_called_once_with(MockQModelIndexSibling.TEST_SIBLING_DATA) if __name__ == '__main__': diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py index b6a830513cf..b6ebf54551c 100644 --- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py +++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py @@ -18,7 +18,7 @@ from qtpy.QtCore import Qt from mantidqt.widgets.matrixworkspacedisplay.table_view_model import MatrixWorkspaceTableViewModel, \ MatrixWorkspaceTableViewModelType -from mantidqt.widgets.matrixworkspacedisplay.test_helpers.test_matrixworkspacedisplay_tableviewmodel_common import \ +from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import \ MockQModelIndex, MockWorkspace, setup_common_for_test_data, AXIS_INDEX_FOR_VERTICAL, MockMantidAxis, MockSpectrum, \ MockMantidSymbol, AXIS_INDEX_FOR_HORIZONTAL, MockMantidUnit -- GitLab