From 1e94cd92e9e86f409fca53f8d6cdae7f89847d25 Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Mon, 29 Feb 2016 15:31:05 +1030 Subject: [PATCH 1/7] Split auto-scroll & height cap features to new branch --- openlp/core/ui/listpreviewwidget.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/listpreviewwidget.py b/openlp/core/ui/listpreviewwidget.py index fb6481e56..496c3e8ec 100644 --- a/openlp/core/ui/listpreviewwidget.py +++ b/openlp/core/ui/listpreviewwidget.py @@ -47,6 +47,9 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): """ super(QtWidgets.QTableWidget, self).__init__(parent) self._setup(screen_ratio) + + # max row height for non-text slides in pixels. If <= 0, will disable max row height. + self.max_img_row_height = 200 def _setup(self, screen_ratio): """ @@ -82,8 +85,10 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): self.resizeRowsToContents() else: # Sort out image heights. + height = self.viewport().width() // self.screen_ratio ### Moved out of loop as only needs to run once + if self.max_img_row_height > 0 and height > self.max_img_row_height: ### Apply row height cap. + height = self.max_img_row_height for frame_number in range(len(self.service_item.get_frames())): - height = self.viewport().width() // self.screen_ratio self.setRowHeight(frame_number, height) def screen_size_changed(self, screen_ratio): @@ -139,7 +144,20 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): pixmap = QtGui.QPixmap.fromImage(image) pixmap.setDevicePixelRatio(label.devicePixelRatio()) label.setPixmap(pixmap) - self.setCellWidget(frame_number, 0, label) + ### begin added/modified content + if self.max_img_row_height > 0: + label.setMaximumWidth(self.max_img_row_height * self.screen_ratio) ### set max width based on max height + label.resize(self.max_img_row_height * self.screen_ratio,self.max_img_row_height) ### resize to max width and max height; may be adjusted when setRowHeight called. + container = QtWidgets.QWidget() ### container widget + hbox = QtWidgets.QHBoxLayout() ### hbox to allow for horizonal stretch padding + hbox.setContentsMargins(0, 0, 0, 0) ### 0 contents margins to avoid extra padding + hbox.addWidget(label,stretch=1) ### add slide, stretch allows growing to max-width + hbox.addStretch(0) ### add strech padding with lowest priority; will only grow when slide has hit max-width + container.setLayout(hbox) ### populate container widget + self.setCellWidget(frame_number, 0, container) ### populate cell with container + else: + self.setCellWidget(frame_number, 0, label) ### populate cell with slide + ### end added/modified content slide_height = width // self.screen_ratio row += 1 text.append(str(row)) From 68460f5e3f5a8813481840d42a5ef727c35854c9 Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Sun, 6 Mar 2016 03:11:32 +1030 Subject: [PATCH 2/7] Added smart scaling when manually resized, integrated with settings dialog, fixed some pep8 errors --- openlp/core/common/settings.py | 1 + openlp/core/ui/advancedtab.py | 12 ++++ openlp/core/ui/listpreviewwidget.py | 64 ++++++++++++------- .../openlp_core_ui/test_listpreviewwidget.py | 4 +- 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/openlp/core/common/settings.py b/openlp/core/common/settings.py index 8ef2b3c8b..5c103ed9a 100644 --- a/openlp/core/common/settings.py +++ b/openlp/core/common/settings.py @@ -121,6 +121,7 @@ class Settings(QtCore.QSettings): 'advanced/double click live': False, 'advanced/enable exit confirmation': True, 'advanced/expand service item': False, + 'advanced/slide max height': 0, 'advanced/hide mouse': True, 'advanced/is portable': False, 'advanced/max recent files': 20, diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index 4421b432f..bc9fe520f 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -80,6 +80,13 @@ class AdvancedTab(SettingsTab): self.expand_service_item_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.expand_service_item_check_box.setObjectName('expand_service_item_check_box') self.ui_layout.addRow(self.expand_service_item_check_box) + self.slide_max_height_label = QtWidgets.QLabel(self.ui_group_box) + self.slide_max_height_label.setObjectName('slide_max_height_label') + self.slide_max_height_spin_box = QtWidgets.QSpinBox(self.ui_group_box) + self.slide_max_height_spin_box.setObjectName('slide_max_height_spin_box') + self.slide_max_height_spin_box.setRange(0,1000) + self.slide_max_height_spin_box.setSingleStep(20) + self.ui_layout.addRow(self.slide_max_height_label,self.slide_max_height_spin_box) self.search_as_type_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.search_as_type_check_box.setObjectName('SearchAsType_check_box') self.ui_layout.addRow(self.search_as_type_check_box) @@ -272,6 +279,9 @@ class AdvancedTab(SettingsTab): 'Preview items when clicked in Media Manager')) self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', 'Expand new service items on creation')) + self.slide_max_height_label.setText(translate('OpenLP.AdvancedTab', + 'Max height for non-text slides\nin slide controller:')) + self.slide_max_height_spin_box.setSpecialValueText(translate('OpenLP.AdvancedTab', 'Disabled')) self.enable_auto_close_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) self.service_name_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Default Service Name')) @@ -340,6 +350,7 @@ class AdvancedTab(SettingsTab): self.double_click_live_check_box.setChecked(settings.value('double click live')) self.single_click_preview_check_box.setChecked(settings.value('single click preview')) self.expand_service_item_check_box.setChecked(settings.value('expand service item')) + self.slide_max_height_spin_box.setValue(settings.value('slide max height')) self.enable_auto_close_check_box.setChecked(settings.value('enable exit confirmation')) self.hide_mouse_check_box.setChecked(settings.value('hide mouse')) self.service_name_day.setCurrentIndex(settings.value('default service day')) @@ -421,6 +432,7 @@ class AdvancedTab(SettingsTab): settings.setValue('double click live', self.double_click_live_check_box.isChecked()) settings.setValue('single click preview', self.single_click_preview_check_box.isChecked()) settings.setValue('expand service item', self.expand_service_item_check_box.isChecked()) + settings.setValue('slide max height', self.slide_max_height_spin_box.value()) settings.setValue('enable exit confirmation', self.enable_auto_close_check_box.isChecked()) settings.setValue('hide mouse', self.hide_mouse_check_box.isChecked()) settings.setValue('alternate rows', self.alternate_rows_check_box.isChecked()) diff --git a/openlp/core/ui/listpreviewwidget.py b/openlp/core/ui/listpreviewwidget.py index 496c3e8ec..68c983d42 100644 --- a/openlp/core/ui/listpreviewwidget.py +++ b/openlp/core/ui/listpreviewwidget.py @@ -26,7 +26,7 @@ It is based on a QTableWidget but represents its contents in list form. from PyQt5 import QtCore, QtGui, QtWidgets -from openlp.core.common import RegistryProperties +from openlp.core.common import RegistryProperties, Settings from openlp.core.lib import ImageSource, ServiceItem @@ -47,9 +47,6 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): """ super(QtWidgets.QTableWidget, self).__init__(parent) self._setup(screen_ratio) - - # max row height for non-text slides in pixels. If <= 0, will disable max row height. - self.max_img_row_height = 200 def _setup(self, screen_ratio): """ @@ -66,6 +63,8 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): # Initialize variables. self.service_item = ServiceItem() self.screen_ratio = screen_ratio + # Connect signals + self.verticalHeader().sectionResized.connect(self.row_resized) def resizeEvent(self, event): """ @@ -83,14 +82,30 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): # Sort out songs, bibles, etc. if self.service_item.is_text(): self.resizeRowsToContents() + # Sort out image heights. else: - # Sort out image heights. - height = self.viewport().width() // self.screen_ratio ### Moved out of loop as only needs to run once - if self.max_img_row_height > 0 and height > self.max_img_row_height: ### Apply row height cap. - height = self.max_img_row_height + height = self.viewport().width() // self.screen_ratio + max_img_row_height = Settings().value('advanced/slide max height') + # Adjust for row height cap if in use. + if max_img_row_height > 0 and height > max_img_row_height: + height = max_img_row_height + # Apply new height to slides for frame_number in range(len(self.service_item.get_frames())): self.setRowHeight(frame_number, height) + def row_resized(self, row, old_height, new_height): + """ + Will scale non-image slides. + """ + # Only for non-text slides when row height cap in use + if self.service_item.is_text() or Settings().value('advanced/slide max height') <= 0: + return + # Get and validate label widget containing slide & adjust max width + try: + self.cellWidget(row, 0).children()[1].setMaximumWidth(new_height * self.screen_ratio) + except: + return + def screen_size_changed(self, screen_ratio): """ This method is called whenever the live screen size changes, which then makes a layout recalculation necessary @@ -144,21 +159,26 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties): pixmap = QtGui.QPixmap.fromImage(image) pixmap.setDevicePixelRatio(label.devicePixelRatio()) label.setPixmap(pixmap) - ### begin added/modified content - if self.max_img_row_height > 0: - label.setMaximumWidth(self.max_img_row_height * self.screen_ratio) ### set max width based on max height - label.resize(self.max_img_row_height * self.screen_ratio,self.max_img_row_height) ### resize to max width and max height; may be adjusted when setRowHeight called. - container = QtWidgets.QWidget() ### container widget - hbox = QtWidgets.QHBoxLayout() ### hbox to allow for horizonal stretch padding - hbox.setContentsMargins(0, 0, 0, 0) ### 0 contents margins to avoid extra padding - hbox.addWidget(label,stretch=1) ### add slide, stretch allows growing to max-width - hbox.addStretch(0) ### add strech padding with lowest priority; will only grow when slide has hit max-width - container.setLayout(hbox) ### populate container widget - self.setCellWidget(frame_number, 0, container) ### populate cell with container - else: - self.setCellWidget(frame_number, 0, label) ### populate cell with slide - ### end added/modified content slide_height = width // self.screen_ratio + # Setup row height cap if in use. + max_img_row_height = Settings().value('advanced/slide max height') + if max_img_row_height > 0: + if slide_height > max_img_row_height: + slide_height = max_img_row_height + label.setMaximumWidth(max_img_row_height * self.screen_ratio) + label.resize(max_img_row_height * self.screen_ratio, max_img_row_height) + # Build widget with stretch padding + container = QtWidgets.QWidget() + hbox = QtWidgets.QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + hbox.addWidget(label, stretch=1) + hbox.addStretch(0) + container.setLayout(hbox) + # Add to table + self.setCellWidget(frame_number, 0, container) + else: + # Add to table + self.setCellWidget(frame_number, 0, label) row += 1 text.append(str(row)) self.setItem(frame_number, 0, item) diff --git a/tests/functional/openlp_core_ui/test_listpreviewwidget.py b/tests/functional/openlp_core_ui/test_listpreviewwidget.py index 6f27fbde3..5d1135e23 100644 --- a/tests/functional/openlp_core_ui/test_listpreviewwidget.py +++ b/tests/functional/openlp_core_ui/test_listpreviewwidget.py @@ -23,9 +23,11 @@ Package to test the openlp.core.ui.listpreviewwidget package. """ from unittest import TestCase + +from openlp.core.common import Settings from openlp.core.ui.listpreviewwidget import ListPreviewWidget -from tests.functional import patch +from tests.functional import MagicMock, patch class TestListPreviewWidget(TestCase): From 79b4c474d613c101ba125b5413002e2e299b8619 Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Sat, 19 Mar 2016 19:10:11 +1030 Subject: [PATCH 3/7] Added testing --- .../openlp_core_ui/test_listpreviewwidget.py | 263 +++++++++++++++++- 1 file changed, 258 insertions(+), 5 deletions(-) diff --git a/tests/functional/openlp_core_ui/test_listpreviewwidget.py b/tests/functional/openlp_core_ui/test_listpreviewwidget.py index 5d1135e23..e4cd334d4 100644 --- a/tests/functional/openlp_core_ui/test_listpreviewwidget.py +++ b/tests/functional/openlp_core_ui/test_listpreviewwidget.py @@ -26,19 +26,23 @@ from unittest import TestCase from openlp.core.common import Settings from openlp.core.ui.listpreviewwidget import ListPreviewWidget +from openlp.core.lib import ServiceItem -from tests.functional import MagicMock, patch +from tests.functional import MagicMock, patch, call class TestListPreviewWidget(TestCase): + def setUp(self): """ Mock out stuff for all the tests """ - self.setup_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget._setup') - self.mocked_setup = self.setup_patcher.start() - self.addCleanup(self.setup_patcher.stop) + self.parent_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget.parent') + self.mocked_parent = self.parent_patcher.start() + self.mocked_parent.width.return_value = 100 + self.addCleanup(self.parent_patcher.stop) + def new_list_preview_widget_test(self): """ @@ -51,4 +55,253 @@ class TestListPreviewWidget(TestCase): # THEN: The object is not None, and the _setup() method was called. self.assertIsNotNone(list_preview_widget, 'The ListPreviewWidget object should not be None') - self.mocked_setup.assert_called_with(1) + self.assertEquals(list_preview_widget.screen_ratio, 1, 'Should not be called') + #self.mocked_setup.assert_called_with(1) + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + def replace_recalculate_layout_test_text(self, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" enabled, text-based slides not affected in replace_service_item and __recalculate_layout. + """ + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # a text ServiceItem and a ListPreviewWidget. + + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 100 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock text service item + service_item = MagicMock() + service_item.is_text.return_value = True + service_item.get_frames.return_value = [{'title': None, 'text': None, 'verseTag': None}, + {'title': None, 'text': None, 'verseTag': None}] + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + # Change viewport width before forcing a resize + mocked_viewport_obj.width.return_value = 400 + + # WHEN: __recalculate_layout() is called (via resizeEvent) + list_preview_widget.resizeEvent(None) + + # THEN: resizeRowsToContents should be called twice + # (once each in __recalculate_layout and replace_service_item) + self.assertEquals(mocked_resizeRowsToContents.call_count, 2, 'Should be called') + self.assertEquals(mocked_setRowHeight.call_count, 0, 'Should not be called') + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + def replace_recalculate_layout_test_img(self, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" disabled, image-based slides not resized to the max-height in replace_service_item and __recalculate_layout. + """ + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # an image ServiceItem and a ListPreviewWidget. + + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 0 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock image service item + service_item = MagicMock() + service_item.is_text.return_value = False + service_item.get_frames.return_value = [{'title': None, 'path': None, 'image': None}, + {'title': None, 'path': None, 'image': None}] + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + # Change viewport width before forcing a resize + mocked_viewport_obj.width.return_value = 400 + + # WHEN: __recalculate_layout() is called (via resizeEvent) + list_preview_widget.resizeEvent(None) + + # THEN: timer should have been started + self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') + self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') + calls = [call(0,200), call(1,200),call(0,400), call(1,400)] + mocked_setRowHeight.assert_has_calls(calls) + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + def replace_recalculate_layout_test_img_max(self, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" enabled, image-based slides are resized to the max-height in replace_service_item and __recalculate_layout. + """ + + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # an image ServiceItem and a ListPreviewWidget. + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 100 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock image service item + service_item = MagicMock() + service_item.is_text.return_value = False + service_item.get_frames.return_value = [{'title': None, 'path': None, 'image': None}, + {'title': None, 'path': None, 'image': None}] + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + # Change viewport width before forcing a resize + mocked_viewport_obj.width.return_value = 400 + + # WHEN: __recalculate_layout() is called (via resizeEvent) + list_preview_widget.resizeEvent(None) + + # THEN: timer should have been started + self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') + self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') + calls = [call(0,100), call(1,100),call(0,100), call(1,100)] + mocked_setRowHeight.assert_has_calls(calls) + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') + def row_resized_test_text(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" enabled, text-based slides not affected in row_resized. + """ + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # a text ServiceItem and a ListPreviewWidget. + + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 100 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock text service item + service_item = MagicMock() + service_item.is_text.return_value = True + service_item.get_frames.return_value = [{'title': None, 'text': None, 'verseTag': None}, + {'title': None, 'text': None, 'verseTag': None}] + # Mock self.cellWidget().children().setMaximumWidth() + mocked_cellWidget_child = MagicMock() + mocked_cellWidget_obj = MagicMock() + mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget.return_value = mocked_cellWidget_obj + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + + # WHEN: row_resized() is called + list_preview_widget.row_resized(0, 100, 150) + + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called + self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') + def row_resized_test_img(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" disabled, image-based slides not affected in row_resized. + """ + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # an image ServiceItem and a ListPreviewWidget. + + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 0 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock image service item + service_item = MagicMock() + service_item.is_text.return_value = False + service_item.get_frames.return_value = [{'title': None, 'path': None, 'image': None}, + {'title': None, 'path': None, 'image': None}] + # Mock self.cellWidget().children().setMaximumWidth() + mocked_cellWidget_child = MagicMock() + mocked_cellWidget_obj = MagicMock() + mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget.return_value = mocked_cellWidget_obj + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + + # WHEN: row_resized() is called + list_preview_widget.row_resized(0, 100, 150) + + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called + self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') + + + @patch(u'openlp.core.ui.listpreviewwidget.Settings') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') + @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') + def row_resized_test_img_max(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, + mocked_viewport, mocked_Settings): + """ + Test if "Max height for non-text slides in slide controller" enabled, image-based slides are scaled in row_resized. + """ + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", + # an image ServiceItem and a ListPreviewWidget. + + # Mock Settings().value('advanced/slide max height') + mocked_Settings_obj = MagicMock() + mocked_Settings_obj.value.return_value = 100 + mocked_Settings.return_value = mocked_Settings_obj + # Mock self.viewport().width() + mocked_viewport_obj = MagicMock() + mocked_viewport_obj.width.return_value = 200 + mocked_viewport.return_value = mocked_viewport_obj + # Mock image service item + service_item = MagicMock() + service_item.is_text.return_value = False + service_item.get_frames.return_value = [{'title': None, 'path': None, 'image': None}, + {'title': None, 'path': None, 'image': None}] + # Mock self.cellWidget().children().setMaximumWidth() + mocked_cellWidget_child = MagicMock() + mocked_cellWidget_obj = MagicMock() + mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget.return_value = mocked_cellWidget_obj + # init ListPreviewWidget and load service item + list_preview_widget = ListPreviewWidget(None, 1) + list_preview_widget.replace_service_item(service_item, 200, 0) + + # WHEN: row_resized() is called + list_preview_widget.row_resized(0, 100, 150) + + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should be called + mocked_cellWidget_child.setMaximumWidth.assert_called_once_with(150) From 4f1a07454696266d70f74e5ebb5187ac7ca42fc1 Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Mon, 21 Mar 2016 01:04:52 +1030 Subject: [PATCH 4/7] Cleaned pep8 errors --- .../openlp_core_ui/test_listpreviewwidget.py | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/tests/functional/openlp_core_ui/test_listpreviewwidget.py b/tests/functional/openlp_core_ui/test_listpreviewwidget.py index e4cd334d4..df0092452 100644 --- a/tests/functional/openlp_core_ui/test_listpreviewwidget.py +++ b/tests/functional/openlp_core_ui/test_listpreviewwidget.py @@ -33,7 +33,6 @@ from tests.functional import MagicMock, patch, call class TestListPreviewWidget(TestCase): - def setUp(self): """ Mock out stuff for all the tests @@ -42,7 +41,6 @@ class TestListPreviewWidget(TestCase): self.mocked_parent = self.parent_patcher.start() self.mocked_parent.width.return_value = 100 self.addCleanup(self.parent_patcher.stop) - def new_list_preview_widget_test(self): """ @@ -56,21 +54,19 @@ class TestListPreviewWidget(TestCase): # THEN: The object is not None, and the _setup() method was called. self.assertIsNotNone(list_preview_widget, 'The ListPreviewWidget object should not be None') self.assertEquals(list_preview_widget.screen_ratio, 1, 'Should not be called') - #self.mocked_setup.assert_called_with(1) - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') def replace_recalculate_layout_test_text(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" enabled, text-based slides not affected in replace_service_item and __recalculate_layout. + Test if "Max height for non-text slides..." enabled, txt slides unchanged in replace_service_item & __recalc... """ # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # a text ServiceItem and a ListPreviewWidget. - + # Mock Settings().value('advanced/slide max height') mocked_Settings_obj = MagicMock() mocked_Settings_obj.value.return_value = 100 @@ -89,28 +85,27 @@ class TestListPreviewWidget(TestCase): list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize mocked_viewport_obj.width.return_value = 400 - + # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - + # THEN: resizeRowsToContents should be called twice # (once each in __recalculate_layout and replace_service_item) self.assertEquals(mocked_resizeRowsToContents.call_count, 2, 'Should be called') self.assertEquals(mocked_setRowHeight.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') def replace_recalculate_layout_test_img(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" disabled, image-based slides not resized to the max-height in replace_service_item and __recalculate_layout. + Test if "Max height for non-text slides..." disabled, img slides unchanged in replace_service_item & __recalc... """ # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # an image ServiceItem and a ListPreviewWidget. - + # Mock Settings().value('advanced/slide max height') mocked_Settings_obj = MagicMock() mocked_Settings_obj.value.return_value = 0 @@ -129,27 +124,26 @@ class TestListPreviewWidget(TestCase): list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize mocked_viewport_obj.width.return_value = 400 - + # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - + # THEN: timer should have been started self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') - calls = [call(0,200), call(1,200),call(0,400), call(1,400)] + calls = [call(0, 200), call(1, 200), call(0, 400), call(1, 400)] mocked_setRowHeight.assert_has_calls(calls) - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') def replace_recalculate_layout_test_img_max(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" enabled, image-based slides are resized to the max-height in replace_service_item and __recalculate_layout. + Test if "Max height for non-text slides..." enabled, img slides resized in replace_service_item & __recalc... """ - + # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # an image ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') @@ -170,30 +164,29 @@ class TestListPreviewWidget(TestCase): list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize mocked_viewport_obj.width.return_value = 400 - + # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - + # THEN: timer should have been started self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') - calls = [call(0,100), call(1,100),call(0,100), call(1,100)] + calls = [call(0, 100), call(1, 100), call(0, 100), call(1, 100)] mocked_setRowHeight.assert_has_calls(calls) - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') def row_resized_test_text(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" enabled, text-based slides not affected in row_resized. + Test if "Max height for non-text slides..." enabled, text-based slides not affected in row_resized. """ # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # a text ServiceItem and a ListPreviewWidget. - + # Mock Settings().value('advanced/slide max height') mocked_Settings_obj = MagicMock() mocked_Settings_obj.value.return_value = 100 @@ -210,7 +203,7 @@ class TestListPreviewWidget(TestCase): # Mock self.cellWidget().children().setMaximumWidth() mocked_cellWidget_child = MagicMock() mocked_cellWidget_obj = MagicMock() - mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget_obj.children.return_value = [None, mocked_cellWidget_child] mocked_cellWidget.return_value = mocked_cellWidget_obj # init ListPreviewWidget and load service item list_preview_widget = ListPreviewWidget(None, 1) @@ -218,24 +211,23 @@ class TestListPreviewWidget(TestCase): # WHEN: row_resized() is called list_preview_widget.row_resized(0, 100, 150) - + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') def row_resized_test_img(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" disabled, image-based slides not affected in row_resized. + Test if "Max height for non-text slides..." disabled, image-based slides not affected in row_resized. """ # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # an image ServiceItem and a ListPreviewWidget. - + # Mock Settings().value('advanced/slide max height') mocked_Settings_obj = MagicMock() mocked_Settings_obj.value.return_value = 0 @@ -252,7 +244,7 @@ class TestListPreviewWidget(TestCase): # Mock self.cellWidget().children().setMaximumWidth() mocked_cellWidget_child = MagicMock() mocked_cellWidget_obj = MagicMock() - mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget_obj.children.return_value = [None, mocked_cellWidget_child] mocked_cellWidget.return_value = mocked_cellWidget_obj # init ListPreviewWidget and load service item list_preview_widget = ListPreviewWidget(None, 1) @@ -260,24 +252,23 @@ class TestListPreviewWidget(TestCase): # WHEN: row_resized() is called list_preview_widget.row_resized(0, 100, 150) - + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') def row_resized_test_img_max(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + mocked_viewport, mocked_Settings): """ - Test if "Max height for non-text slides in slide controller" enabled, image-based slides are scaled in row_resized. + Test if "Max height for non-text slides..." enabled, image-based slides are scaled in row_resized. """ # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # an image ServiceItem and a ListPreviewWidget. - + # Mock Settings().value('advanced/slide max height') mocked_Settings_obj = MagicMock() mocked_Settings_obj.value.return_value = 100 @@ -294,7 +285,7 @@ class TestListPreviewWidget(TestCase): # Mock self.cellWidget().children().setMaximumWidth() mocked_cellWidget_child = MagicMock() mocked_cellWidget_obj = MagicMock() - mocked_cellWidget_obj.children.return_value = [None,mocked_cellWidget_child] + mocked_cellWidget_obj.children.return_value = [None, mocked_cellWidget_child] mocked_cellWidget.return_value = mocked_cellWidget_obj # init ListPreviewWidget and load service item list_preview_widget = ListPreviewWidget(None, 1) @@ -302,6 +293,6 @@ class TestListPreviewWidget(TestCase): # WHEN: row_resized() is called list_preview_widget.row_resized(0, 100, 150) - + # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should be called mocked_cellWidget_child.setMaximumWidth.assert_called_once_with(150) From 4980465f983cfe973c71df084f50a0650071746b Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Mon, 21 Mar 2016 01:14:00 +1030 Subject: [PATCH 5/7] Cleaned pep8 errors --- openlp/core/ui/advancedtab.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index bc9fe520f..6b9f9e3cf 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -84,9 +84,9 @@ class AdvancedTab(SettingsTab): self.slide_max_height_label.setObjectName('slide_max_height_label') self.slide_max_height_spin_box = QtWidgets.QSpinBox(self.ui_group_box) self.slide_max_height_spin_box.setObjectName('slide_max_height_spin_box') - self.slide_max_height_spin_box.setRange(0,1000) + self.slide_max_height_spin_box.setRange(0, 1000) self.slide_max_height_spin_box.setSingleStep(20) - self.ui_layout.addRow(self.slide_max_height_label,self.slide_max_height_spin_box) + self.ui_layout.addRow(self.slide_max_height_label, self.slide_max_height_spin_box) self.search_as_type_check_box = QtWidgets.QCheckBox(self.ui_group_box) self.search_as_type_check_box.setObjectName('SearchAsType_check_box') self.ui_layout.addRow(self.search_as_type_check_box) @@ -280,7 +280,7 @@ class AdvancedTab(SettingsTab): self.expand_service_item_check_box.setText(translate('OpenLP.AdvancedTab', 'Expand new service items on creation')) self.slide_max_height_label.setText(translate('OpenLP.AdvancedTab', - 'Max height for non-text slides\nin slide controller:')) + 'Max height for non-text slides\nin slide controller:')) self.slide_max_height_spin_box.setSpecialValueText(translate('OpenLP.AdvancedTab', 'Disabled')) self.enable_auto_close_check_box.setText(translate('OpenLP.AdvancedTab', 'Enable application exit confirmation')) From a98e62ed5dd787b798b9996a3f9be021405c7af1 Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Mon, 21 Mar 2016 16:11:46 +1030 Subject: [PATCH 6/7] Corrected comments --- tests/functional/openlp_core_ui/test_listpreviewwidget.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/functional/openlp_core_ui/test_listpreviewwidget.py b/tests/functional/openlp_core_ui/test_listpreviewwidget.py index df0092452..6cbf565b2 100644 --- a/tests/functional/openlp_core_ui/test_listpreviewwidget.py +++ b/tests/functional/openlp_core_ui/test_listpreviewwidget.py @@ -89,7 +89,7 @@ class TestListPreviewWidget(TestCase): # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - # THEN: resizeRowsToContents should be called twice + # THEN: setRowHeight() should not be called, while resizeRowsToContents() should be called twice # (once each in __recalculate_layout and replace_service_item) self.assertEquals(mocked_resizeRowsToContents.call_count, 2, 'Should be called') self.assertEquals(mocked_setRowHeight.call_count, 0, 'Should not be called') @@ -128,7 +128,8 @@ class TestListPreviewWidget(TestCase): # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - # THEN: timer should have been started + # THEN: resizeRowsToContents() should not be called, while setRowHeight() should be called + # twice for each slide. self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') calls = [call(0, 200), call(1, 200), call(0, 400), call(1, 400)] @@ -168,7 +169,8 @@ class TestListPreviewWidget(TestCase): # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) - # THEN: timer should have been started + # THEN: resizeRowsToContents() should not be called, while setRowHeight() should be called + # twice for each slide. self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called') self.assertEquals(mocked_setRowHeight.call_count, 4, 'Should be called twice for each slide') calls = [call(0, 100), call(1, 100), call(0, 100), call(1, 100)] From 1667363abdaf84dc1664306053c117c058441f6c Mon Sep 17 00:00:00 2001 From: Ian Knight Date: Thu, 24 Mar 2016 00:44:37 +1030 Subject: [PATCH 7/7] Shifted common test code into setup. --- .../openlp_core_ui/test_listpreviewwidget.py | 103 +++++++----------- 1 file changed, 39 insertions(+), 64 deletions(-) diff --git a/tests/functional/openlp_core_ui/test_listpreviewwidget.py b/tests/functional/openlp_core_ui/test_listpreviewwidget.py index 6cbf565b2..a222189e6 100644 --- a/tests/functional/openlp_core_ui/test_listpreviewwidget.py +++ b/tests/functional/openlp_core_ui/test_listpreviewwidget.py @@ -37,11 +37,28 @@ class TestListPreviewWidget(TestCase): """ Mock out stuff for all the tests """ + # Mock self.parent().width() self.parent_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget.parent') self.mocked_parent = self.parent_patcher.start() self.mocked_parent.width.return_value = 100 self.addCleanup(self.parent_patcher.stop) + # Mock Settings().value() + self.Settings_patcher = patch('openlp.core.ui.listpreviewwidget.Settings') + self.mocked_Settings = self.Settings_patcher.start() + self.mocked_Settings_obj = MagicMock() + self.mocked_Settings_obj.value.return_value = None + self.mocked_Settings.return_value = self.mocked_Settings_obj + self.addCleanup(self.Settings_patcher.stop) + + # Mock self.viewport().width() + self.viewport_patcher = patch('openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') + self.mocked_viewport = self.viewport_patcher.start() + self.mocked_viewport_obj = MagicMock() + self.mocked_viewport_obj.width.return_value = 200 + self.mocked_viewport.return_value = self.mocked_viewport_obj + self.addCleanup(self.viewport_patcher.stop) + def new_list_preview_widget_test(self): """ Test that creating an instance of ListPreviewWidget works @@ -55,12 +72,9 @@ class TestListPreviewWidget(TestCase): self.assertIsNotNone(list_preview_widget, 'The ListPreviewWidget object should not be None') self.assertEquals(list_preview_widget.screen_ratio, 1, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') - def replace_recalculate_layout_test_text(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def replace_recalculate_layout_test_text(self, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." enabled, txt slides unchanged in replace_service_item & __recalc... """ @@ -68,13 +82,9 @@ class TestListPreviewWidget(TestCase): # a text ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 100 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 100 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock text service item service_item = MagicMock() service_item.is_text.return_value = True @@ -84,7 +94,7 @@ class TestListPreviewWidget(TestCase): list_preview_widget = ListPreviewWidget(None, 1) list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize - mocked_viewport_obj.width.return_value = 400 + self.mocked_viewport_obj.width.return_value = 400 # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) @@ -94,12 +104,9 @@ class TestListPreviewWidget(TestCase): self.assertEquals(mocked_resizeRowsToContents.call_count, 2, 'Should be called') self.assertEquals(mocked_setRowHeight.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') - def replace_recalculate_layout_test_img(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def replace_recalculate_layout_test_img(self, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." disabled, img slides unchanged in replace_service_item & __recalc... """ @@ -107,13 +114,9 @@ class TestListPreviewWidget(TestCase): # an image ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 0 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 0 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock image service item service_item = MagicMock() service_item.is_text.return_value = False @@ -123,7 +126,7 @@ class TestListPreviewWidget(TestCase): list_preview_widget = ListPreviewWidget(None, 1) list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize - mocked_viewport_obj.width.return_value = 400 + self.mocked_viewport_obj.width.return_value = 400 # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) @@ -135,26 +138,19 @@ class TestListPreviewWidget(TestCase): calls = [call(0, 200), call(1, 200), call(0, 400), call(1, 400)] mocked_setRowHeight.assert_has_calls(calls) - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') - def replace_recalculate_layout_test_img_max(self, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def replace_recalculate_layout_test_img_max(self, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." enabled, img slides resized in replace_service_item & __recalc... """ - # GIVEN: A setting to adjust "Max height for non-text slides in slide controller", # an image ServiceItem and a ListPreviewWidget. + # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 100 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 100 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock image service item service_item = MagicMock() service_item.is_text.return_value = False @@ -164,7 +160,7 @@ class TestListPreviewWidget(TestCase): list_preview_widget = ListPreviewWidget(None, 1) list_preview_widget.replace_service_item(service_item, 200, 0) # Change viewport width before forcing a resize - mocked_viewport_obj.width.return_value = 400 + self.mocked_viewport_obj.width.return_value = 400 # WHEN: __recalculate_layout() is called (via resizeEvent) list_preview_widget.resizeEvent(None) @@ -176,13 +172,10 @@ class TestListPreviewWidget(TestCase): calls = [call(0, 100), call(1, 100), call(0, 100), call(1, 100)] mocked_setRowHeight.assert_has_calls(calls) - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') - def row_resized_test_text(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def row_resized_test_text(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." enabled, text-based slides not affected in row_resized. """ @@ -190,13 +183,9 @@ class TestListPreviewWidget(TestCase): # a text ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 100 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 100 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock text service item service_item = MagicMock() service_item.is_text.return_value = True @@ -217,13 +206,10 @@ class TestListPreviewWidget(TestCase): # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') - def row_resized_test_img(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def row_resized_test_img(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." disabled, image-based slides not affected in row_resized. """ @@ -231,13 +217,9 @@ class TestListPreviewWidget(TestCase): # an image ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 0 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 0 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock image service item service_item = MagicMock() service_item.is_text.return_value = False @@ -258,13 +240,10 @@ class TestListPreviewWidget(TestCase): # THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called') - @patch(u'openlp.core.ui.listpreviewwidget.Settings') - @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.viewport') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.setRowHeight') @patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.cellWidget') - def row_resized_test_img_max(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents, - mocked_viewport, mocked_Settings): + def row_resized_test_img_max(self, mocked_cellWidget, mocked_setRowHeight, mocked_resizeRowsToContents): """ Test if "Max height for non-text slides..." enabled, image-based slides are scaled in row_resized. """ @@ -272,13 +251,9 @@ class TestListPreviewWidget(TestCase): # an image ServiceItem and a ListPreviewWidget. # Mock Settings().value('advanced/slide max height') - mocked_Settings_obj = MagicMock() - mocked_Settings_obj.value.return_value = 100 - mocked_Settings.return_value = mocked_Settings_obj + self.mocked_Settings_obj.value.return_value = 100 # Mock self.viewport().width() - mocked_viewport_obj = MagicMock() - mocked_viewport_obj.width.return_value = 200 - mocked_viewport.return_value = mocked_viewport_obj + self.mocked_viewport_obj.width.return_value = 200 # Mock image service item service_item = MagicMock() service_item.is_text.return_value = False