Skip to content
Snippets Groups Projects
Commit fa6fb93d authored by Alice Russell's avatar Alice Russell
Browse files

Re #27587 Make suggested changes

- Add test to the cmakelist
- Remove inheritance from qt widgets
- Patch view in test so QApplication is no longer needed
parent fdce27ae
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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)
......@@ -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)
......
......@@ -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)
......
......@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment