Skip to content
Snippets Groups Projects
Commit 9c190294 authored by Ewan Cook's avatar Ewan Cook
Browse files

refs #22915 update unit tests; fix periodic_table_view errors

parent 2515c7f5
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,8 @@ from PyQt4 import QtGui
import sys
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_presenter import PeriodicTable
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_view import PeriodicTableView
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_model import PeriodicTableModel
from Muon.GUI.Common import message_box
......@@ -12,7 +14,7 @@ class ElementalAnalysisGui(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ElementalAnalysisGui, self).__init__(parent)
self.ptable = PeriodicTable()
self.ptable = PeriodicTable(PeriodicTableView(), PeriodicTableModel())
self.ptable.register_table_changed(self.table_changed)
self.ptable.register_table_lclicked(self.table_left_clicked)
self.ptable.register_table_rclicked(self.table_right_clicked)
......
from __future__ import print_function
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_model import PeriodicTableModel
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_view import PeriodicTableView
class PeriodicTable(object):
def __init__(self):
self.view = PeriodicTableView()
self.model = PeriodicTableModel()
def __init__(self, view, model):
self.view = view
self.model = model
self.set_buttons()
@property
......@@ -41,19 +38,19 @@ class PeriodicTable(object):
self.view.ptable.setSelection(elements)
def register_table_changed(self, slot):
self.view.sig_table_changed.connect(slot)
self.view.on_table_changed(slot)
def unregister_table_changed(self, slot):
self.view.sig_table_changed.disconnect(slot)
self.view.unreg_on_table_changed(slot)
def register_table_lclicked(self, slot):
self.view.sig_table_lclicked.connect(slot)
self.view.on_table_lclicked(slot)
def unregister_table_lclicked(self, slot):
self.view.sig_table_lclicked.disconnect(slot)
self.view.unreg_on_table_lclicked(slot)
def register_table_rclicked(self, slot):
self.view.sig_table_rclicked.connect(slot)
self.view.on_table_rclicked(slot)
def unregister_table_rclicked(self, slot):
self.view.sig_table_rclicked.disconnect(slot)
self.view.unreg_on_table_rclicked(slot)
from __future__ import absolute_import
from PyQt4 import QtCore, QtGui
from PyQt4 import QtGui
from Muon.GUI.ElementalAnalysis.PeriodicTable import periodic_table
class PeriodicTableView(QtGui.QWidget):
sig_table_changed = QtCore.pyqtSignal(object)
sig_table_lclicked = QtCore.pyqtSignal(object)
sig_table_rclicked = QtCore.pyqtSignal(object)
def __init__(self, parent=None):
super(PeriodicTableView, self).__init__(parent)
self.ptable = periodic_table.PeriodicTable(self, selectable=True)
self.ptable.sigElementLeftClicked.connect(self.table_left_clicked)
self.ptable.sigElementRightClicked.connect(self.table_right_clicked)
self.ptable.sigSelectionChanged.connect(self.table_changed)
self.grid = QtGui.QGridLayout()
self.grid.addWidget(self.ptable)
self.setLayout(self.grid)
def table_left_clicked(self, item):
self.sig_table_lclicked.emit(item)
def on_table_lclicked(self, slot):
self.ptable.sigElementLeftClicked.connect(slot)
def unreg_on_table_lclicked(self, slot):
self.ptable.sigElementLeftClicked.disconnect(slot)
def on_table_rclicked(self, slot):
self.ptable.sigElementRightClicked.connect(slot)
def unreg_on_table_rclicked(self, slot):
self.ptable.sigElementRightClicked.disconnect(slot)
def table_right_clicked(self, item):
self.sig_table_rclicked.emit(item)
def on_table_changed(self, slot):
self.ptable.sigSelectionChanged.connect(slot)
def table_changed(self, items):
self.sig_table_changed.emit(items)
def unreg_on_table_changed(self, slot):
self.ptable.sigSelectionChanged.disconnect(slot)
......@@ -4,6 +4,7 @@ import unittest
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_presenter import PeriodicTable
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_view import PeriodicTableView
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table_model import PeriodicTableModel
from Muon.GUI.ElementalAnalysis.PeriodicTable.periodic_table import PeriodicTable as silxPT
from Muon.GUI.Common import mock_widget
......@@ -18,86 +19,80 @@ except ImportError:
class PeriodicTableWidgetTest(unittest.TestCase):
def setUp(self):
self._qapp = mock_widget.mockQapp()
self.widget = PeriodicTable()
self.view = self.widget.view
self._model = mock.create_autospec(PeriodicTableModel)
self.widget = PeriodicTable(PeriodicTableView(), self._model)
self.mock_elem = mock.Mock()
self.view.ptable = mock.create_autospec(silxPT)
self.view.ptable.getSelection = mock.Mock(
self.widget.view.ptable = mock.create_autospec(silxPT)
self.widget.view.ptable.getSelection = mock.Mock(
return_value=self.mock_elem)
self.view.ptable.setSelection = mock.Mock()
self.view.ptable.isElementSelected = mock.Mock(return_value=True)
self.view.ptable.setElementSelected = mock.Mock()
def emit_once(self, reg_func, slot,
unregister=False, unreg_func=None):
handler = mock.Mock()
reg_func(handler)
slot(mock.Mock())
if unregister and unreg_func is not None:
unreg_func(handler)
slot(mock.Mock())
assert handler.call_count == 1
def call_func_once(self, func):
self.widget.view = mock.create_autospec(PeriodicTableView)
func = mock.Mock()
self.widget.view.ptable.isElementSelected = mock.Mock(
return_value=True)
self.widget.view.ptable.setSelection = mock.Mock()
self.widget.view.ptable.setElementSelected = mock.Mock()
self.widget.is_selected = mock.Mock()
self.widget.view.on_table_lclicked = mock.Mock()
self.widget.view.on_table_rclicked = mock.Mock()
self.widget.view.on_table_changed = mock.Mock()
self.widget.view.unreg_on_table_lclicked = mock.Mock()
self.widget.view.unreg_on_table_rclicked = mock.Mock()
self.widget.view.unreg_on_table_changed = mock.Mock()
self.view = self.widget.view
# checks if subsequent function is called on func()
def check_second_func_called(self, func, sub_func):
func(mock.Mock())
assert func.call_count == 1
assert sub_func.call_count == 1
def test_register_table_lclicked(self):
self.call_func_once(self.widget.register_table_lclicked)
self.check_second_func_called(
self.widget.register_table_lclicked,
self.view.on_table_lclicked)
def test_unregister_table_lclicked(self):
self.call_func_once(self.widget.unregister_table_lclicked)
self.check_second_func_called(
self.widget.unregister_table_lclicked,
self.view.unreg_on_table_lclicked)
def test_register_table_rclicked(self):
self.call_func_once(self.widget.register_table_rclicked)
self.check_second_func_called(
self.widget.register_table_rclicked,
self.view.on_table_rclicked)
def test_unregister_table_rclicked(self):
self.call_func_once(self.widget.unregister_table_rclicked)
def test_register_lclicked_emit(self):
self.emit_once(self.widget.register_table_lclicked,
self.view.table_left_clicked)
def test_unregister_lclicked_emit(self):
self.emit_once(self.widget.register_table_lclicked,
self.view.table_left_clicked,
unregister=True,
unreg_func=self.widget.unregister_table_lclicked)
def test_register_rclicked_emit(self):
self.emit_once(self.widget.register_table_rclicked,
self.view.table_right_clicked)
def test_unregister_rclicked_emit(self):
self.emit_once(self.widget.register_table_rclicked,
self.view.table_right_clicked,
unregister=True,
unreg_func=self.widget.unregister_table_rclicked)
self.check_second_func_called(
self.widget.unregister_table_rclicked,
self.view.unreg_on_table_rclicked)
def test_register_table_changed(self):
self.emit_once(self.widget.register_table_changed,
self.view.table_changed)
self.check_second_func_called(
self.widget.register_table_changed,
self.view.on_table_changed)
def test_unregister_table_changed(self):
self.emit_once(self.widget.register_table_changed,
self.view.table_changed,
unregister=True,
unreg_func=self.widget.unregister_table_changed)
self.check_second_func_called(
self.widget.unregister_table_changed,
self.view.unreg_on_table_changed)
def test_selection(self):
assert self.widget.selection == self.mock_elem
def test_is_selected(self):
self.call_func_once(self.widget.is_selected)
assert self.widget.is_selected(mock.Mock())
def test_select_element(self):
self.call_func_once(self.widget.select_element)
self.check_second_func_called(
self.widget.select_element,
self.view.ptable.setElementSelected)
def test_add_elements(self):
self.call_func_once(self.widget.add_elements)
self.check_second_func_called(
self.widget.add_elements,
self.view.ptable.setSelection)
if __name__ == "__main__":
......
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