diff --git a/qt/python/CMakeLists.txt b/qt/python/CMakeLists.txt index bb453e4c5d77a887550fb574a63b5ff8006f5cea..88c5126d5b5a36a7707dafcd8bd3d410deea5967 100644 --- a/qt/python/CMakeLists.txt +++ b/qt/python/CMakeLists.txt @@ -123,6 +123,7 @@ if(ENABLE_WORKBENCH OR ENABLE_WORKBENCH) mantidqt/widgets/codeeditor/test/test_multifileinterpreter_view.py mantidqt/widgets/codeeditor/tab_widget/test/test_codeeditor_tab_presenter.py mantidqt/widgets/codeeditor/tab_widget/test/test_codeeditor_tab_view.py + mantidqt/widgets/fitpropertybrowser/addfunctiondialog/test/test_addfunctiondialogpresenter.py mantidqt/widgets/instrumentview/test/test_instrumentview_io.py mantidqt/widgets/instrumentview/test/test_instrumentview_view.py mantidqt/widgets/plotconfigdialog/axestabwidget/test/test_axestabwidgetpresenter.py diff --git a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/presenter.py b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/presenter.py index d2ffb4ce84b048824fc6df2c2875a07d0971d9a5..73b6b8d98d23550afd42ee641af2999680d720a5 100644 --- a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/presenter.py +++ b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/presenter.py @@ -6,27 +6,22 @@ # SPDX - License - Identifier: GPL - 3.0 + from __future__ import (absolute_import, unicode_literals) -from qtpy.QtCore import Qt, Signal -from qtpy.QtWidgets import QDialog - from .view import AddFunctionDialogView -class AddFunctionDialog(QDialog): +class AddFunctionDialog(object): """ Dialog to add function to fit property browser """ - function_added = Signal(str) def __init__(self, parent = None, function_names = None, view=None): - super(AddFunctionDialog, self).__init__(parent) self.view = view if view else AddFunctionDialogView(parent, function_names) - self.view.ui.buttonBox.accepted.connect(self.action_add_function) + self.view.ui.buttonBox.accepted.connect(lambda: self.action_add_function()) def action_add_function(self): current_function = self.view.ui.functionBox.currentText() - if self.view.ui.functionBox.findText(current_function, Qt.MatchExactly) != -1: - self.function_added.emit(current_function) + if self.view.is_text_in_function_list(current_function): + self.view.function_added.emit(current_function) self.view.accept() else: self.view.set_error_message("Function %s not found " % current_function) diff --git a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/test/test_addfunctiondialogpresenter.py b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/test/test_addfunctiondialogpresenter.py index 7cafd0b5d014218e860e64229cd823c70e23669d..b954e15eb25373eb6c74b91fdc88920e59a1a0ef 100644 --- a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/test/test_addfunctiondialogpresenter.py +++ b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/test/test_addfunctiondialogpresenter.py @@ -8,36 +8,31 @@ import unittest -from mantid.py3compat.mock import MagicMock, patch -from mantidqt.utils.qt.testing import start_qapplication +from mantid.py3compat.mock import patch from mantidqt.widgets.fitpropertybrowser.addfunctiondialog.presenter import AddFunctionDialog from testhelpers import assertRaisesNothing -@start_qapplication +@patch('mantidqt.widgets.fitpropertybrowser.addfunctiondialog.view.AddFunctionDialogView') class AddFunctionDialogPresenterTest(unittest.TestCase): - def test_initialization_does_not_raise(self): - assertRaisesNothing(self, AddFunctionDialog) + def test_initialization_does_not_raise(self, mock_view): + assertRaisesNothing(self, AddFunctionDialog, view=mock_view) - @patch('mantidqt.widgets.fitpropertybrowser.addfunctiondialog.presenter.AddFunctionDialog.function_added') - def test_add_function(self, function_added_mock): - dialog = AddFunctionDialog(function_names = ["Lorenzian", "Gaussian", "FlatBackground"]) - dialog.view.accept = MagicMock() - with patch.object(dialog.view.ui.functionBox, 'currentText', lambda: "Gaussian"): - dialog.action_add_function() - function_added_mock.emit.assert_called_once_with("Gaussian") - self.assertEqual(1, dialog.view.accept.call_count) - - @patch('mantidqt.widgets.fitpropertybrowser.addfunctiondialog.presenter.AddFunctionDialog.function_added') - def test_add_function_give_error_if_function_not_valid(self, function_added_mock): - dialog = AddFunctionDialog(function_names=["Lorenzian", "Gaussian", "FlatBackground"]) - dialog.view.accept = MagicMock() - dialog.view.set_error_message = MagicMock() - with patch.object(dialog.view.ui.functionBox, 'currentText', lambda: "Function"): + def test_add_function(self, mock_view): + dialog = AddFunctionDialog(view=mock_view) + with patch.object(mock_view.ui.functionBox, 'currentText', lambda: "Gaussian"): + with patch.object(mock_view, 'is_text_in_function_list', lambda x: True): + dialog.action_add_function() + mock_view.function_added.emit.assert_called_once_with("Gaussian") + self.assertEqual(1, dialog.view.accept.call_count) + + def test_add_function_give_error_if_function_not_valid(self, mock_view): + dialog = AddFunctionDialog(view=mock_view) + with patch.object(mock_view, 'is_text_in_function_list', lambda x: False): dialog.action_add_function() self.assertEqual(1, dialog.view.set_error_message.call_count) - self.assertEqual(0, function_added_mock.emit.call_count) + self.assertEqual(0, mock_view.function_added.emit.call_count) self.assertEqual(0, dialog.view.accept.call_count) diff --git a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/view.py b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/view.py index 93a6846c9fc9a857cde4435e0232ba5cee82effe..a01676c6f8f125c58503a3ff1e18767e625f5bd6 100644 --- a/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/view.py +++ b/qt/python/mantidqt/widgets/fitpropertybrowser/addfunctiondialog/view.py @@ -6,7 +6,7 @@ # SPDX - License - Identifier: GPL - 3.0 + from __future__ import (absolute_import, unicode_literals) -from qtpy.QtCore import Qt +from qtpy.QtCore import Qt, Signal from qtpy.QtGui import QIcon from qtpy.QtWidgets import QCompleter, QDialog @@ -14,6 +14,7 @@ from mantidqt.utils.qt import load_ui class AddFunctionDialogView(QDialog): + function_added = Signal(str) def __init__(self, parent = None, function_names = None): super(AddFunctionDialogView, self).__init__(parent) @@ -30,9 +31,8 @@ class AddFunctionDialogView(QDialog): function_box.completer().setFilterMode(Qt.MatchContains) self.ui.errorMessage.hide() - def acceptFunction(self, function): - self.function_added.emit(function) - self.accept() + def is_text_in_function_list(self, function): + return self.ui.functionBox.findText(function, Qt.MatchExactly) != -1 def set_error_message(self, text): self.ui.errorMessage.setText("<span style='color:red'> %s </span>" % text) diff --git a/qt/python/mantidqt/widgets/fitpropertybrowser/interactive_tool.py b/qt/python/mantidqt/widgets/fitpropertybrowser/interactive_tool.py index d0a7c27c95e192779f2033d3f711d89857909198..721a492aa77270ce45c930a5f1e66c3cc1b8fc7e 100644 --- a/qt/python/mantidqt/widgets/fitpropertybrowser/interactive_tool.py +++ b/qt/python/mantidqt/widgets/fitpropertybrowser/interactive_tool.py @@ -204,7 +204,7 @@ class FitInteractiveTool(QObject): """ dialog = AddFunctionDialog(self.canvas, self.peak_names) dialog.view.ui.functionBox.setCurrentText(self.current_peak_type) - dialog.function_added.connect(self.action_peak_added) + dialog.view.function_added.connect(self.action_peak_added) dialog.view.open() def action_peak_added(self, function_name): @@ -217,7 +217,7 @@ class FitInteractiveTool(QObject): browser. """ dialog = AddFunctionDialog(self.canvas, self.background_names) - dialog.function_added.connect(self.add_background_requested) + dialog.view.function_added.connect(self.add_background_requested) dialog.view.open() def add_other_dialog(self): @@ -226,7 +226,7 @@ class FitInteractiveTool(QObject): function is added to the browser. """ dialog = AddFunctionDialog(self.canvas, self.other_names) - dialog.function_added.connect(self.add_other_requested) + dialog.view.function_added.connect(self.add_other_requested) dialog.view.open() def add_peak_marker(self, x, y_top, y_bottom=0.0, fwhm=None):