forked from openlp/openlp
Added extra validation checks and matching tests to __recalculate_layout(), row_resized(), replace_service_item() & change_slide()
This commit is contained in:
parent
665a35b085
commit
f8718ee1cb
@ -87,7 +87,7 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties):
|
|||||||
height = self.viewport().width() // self.screen_ratio
|
height = self.viewport().width() // self.screen_ratio
|
||||||
max_img_row_height = Settings().value('advanced/slide max height')
|
max_img_row_height = Settings().value('advanced/slide max height')
|
||||||
# Adjust for row height cap if in use.
|
# Adjust for row height cap if in use.
|
||||||
if max_img_row_height > 0 and height > max_img_row_height:
|
if isinstance(max_img_row_height, int) and max_img_row_height > 0 and height > max_img_row_height:
|
||||||
height = max_img_row_height
|
height = max_img_row_height
|
||||||
# Apply new height to slides
|
# Apply new height to slides
|
||||||
for frame_number in range(len(self.service_item.get_frames())):
|
for frame_number in range(len(self.service_item.get_frames())):
|
||||||
@ -98,7 +98,8 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties):
|
|||||||
Will scale non-image slides.
|
Will scale non-image slides.
|
||||||
"""
|
"""
|
||||||
# Only for non-text slides when row height cap in use
|
# 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:
|
max_img_row_height = Settings().value('advanced/slide max height')
|
||||||
|
if self.service_item.is_text() or not isinstance(max_img_row_height, int) or max_img_row_height <= 0:
|
||||||
return
|
return
|
||||||
# Get and validate label widget containing slide & adjust max width
|
# Get and validate label widget containing slide & adjust max width
|
||||||
try:
|
try:
|
||||||
@ -160,9 +161,9 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties):
|
|||||||
pixmap.setDevicePixelRatio(label.devicePixelRatio())
|
pixmap.setDevicePixelRatio(label.devicePixelRatio())
|
||||||
label.setPixmap(pixmap)
|
label.setPixmap(pixmap)
|
||||||
slide_height = width // self.screen_ratio
|
slide_height = width // self.screen_ratio
|
||||||
# Setup row height cap if in use.
|
# Setup and validate row height cap if in use.
|
||||||
max_img_row_height = Settings().value('advanced/slide max height')
|
max_img_row_height = Settings().value('advanced/slide max height')
|
||||||
if max_img_row_height > 0:
|
if isinstance(max_img_row_height, int) and max_img_row_height > 0:
|
||||||
if slide_height > max_img_row_height:
|
if slide_height > max_img_row_height:
|
||||||
slide_height = max_img_row_height
|
slide_height = max_img_row_height
|
||||||
label.setMaximumWidth(max_img_row_height * self.screen_ratio)
|
label.setMaximumWidth(max_img_row_height * self.screen_ratio)
|
||||||
@ -199,7 +200,8 @@ class ListPreviewWidget(QtWidgets.QTableWidget, RegistryProperties):
|
|||||||
# Check if auto-scroll disabled (None) and validate value as dict containing 'dist' and 'pos'
|
# Check if auto-scroll disabled (None) and validate value as dict containing 'dist' and 'pos'
|
||||||
# 'dist' represents the slide to scroll to relative to the new slide (-1 = previous, 0 = current, 1 = next)
|
# 'dist' represents the slide to scroll to relative to the new slide (-1 = previous, 0 = current, 1 = next)
|
||||||
# 'pos' represents the vert position of of the slide (0 = in view, 1 = top, 2 = middle, 3 = bottom)
|
# 'pos' represents the vert position of of the slide (0 = in view, 1 = top, 2 = middle, 3 = bottom)
|
||||||
if not isinstance(autoscrolling, dict) or 'dist' not in autoscrolling or 'pos' not in autoscrolling:
|
if not (isinstance(autoscrolling, dict) and 'dist' in autoscrolling and 'pos' in autoscrolling and
|
||||||
|
isinstance(autoscrolling['dist'], int) and isinstance(autoscrolling['pos'], int)):
|
||||||
return
|
return
|
||||||
# prevent scrolling past list bounds
|
# prevent scrolling past list bounds
|
||||||
scroll_to_slide = slide + autoscrolling['dist']
|
scroll_to_slide = slide + autoscrolling['dist']
|
||||||
|
@ -130,12 +130,14 @@ class TestListPreviewWidget(TestCase):
|
|||||||
|
|
||||||
# WHEN: __recalculate_layout() is called (via resizeEvent)
|
# WHEN: __recalculate_layout() is called (via resizeEvent)
|
||||||
list_preview_widget.resizeEvent(None)
|
list_preview_widget.resizeEvent(None)
|
||||||
|
self.mocked_Settings_obj.value.return_value = None
|
||||||
|
list_preview_widget.resizeEvent(None)
|
||||||
|
|
||||||
# THEN: resizeRowsToContents() should not be called, while setRowHeight() should be called
|
# THEN: resizeRowsToContents() should not be called, while setRowHeight() should be called
|
||||||
# twice for each slide.
|
# twice for each slide.
|
||||||
self.assertEquals(mocked_resizeRowsToContents.call_count, 0, 'Should not be called')
|
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')
|
self.assertEquals(mocked_setRowHeight.call_count, 6, 'Should be called 3 times 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), call(0, 400), call(1, 400)]
|
||||||
mocked_setRowHeight.assert_has_calls(calls)
|
mocked_setRowHeight.assert_has_calls(calls)
|
||||||
|
|
||||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.resizeRowsToContents')
|
||||||
@ -236,6 +238,8 @@ class TestListPreviewWidget(TestCase):
|
|||||||
|
|
||||||
# WHEN: row_resized() is called
|
# WHEN: row_resized() is called
|
||||||
list_preview_widget.row_resized(0, 100, 150)
|
list_preview_widget.row_resized(0, 100, 150)
|
||||||
|
self.mocked_Settings_obj.value.return_value = None
|
||||||
|
list_preview_widget.row_resized(0, 100, 150)
|
||||||
|
|
||||||
# THEN: self.cellWidget(row, 0).children()[1].setMaximumWidth() should not be called
|
# 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')
|
self.assertEquals(mocked_cellWidget_child.setMaximumWidth.call_count, 0, 'Should not be called')
|
||||||
@ -295,16 +299,20 @@ class TestListPreviewWidget(TestCase):
|
|||||||
list_preview_widget.change_slide(0)
|
list_preview_widget.change_slide(0)
|
||||||
self.mocked_Settings_obj.value.return_value = 1
|
self.mocked_Settings_obj.value.return_value = 1
|
||||||
list_preview_widget.change_slide(0)
|
list_preview_widget.change_slide(0)
|
||||||
self.mocked_Settings_obj.value.return_value = {'test': 1}
|
self.mocked_Settings_obj.value.return_value = {'fail': 1}
|
||||||
list_preview_widget.change_slide(0)
|
list_preview_widget.change_slide(0)
|
||||||
self.mocked_Settings_obj.value.return_value = {'dist': 1, 'test': 1}
|
self.mocked_Settings_obj.value.return_value = {'dist': 1, 'fail': 1}
|
||||||
|
list_preview_widget.change_slide(0)
|
||||||
|
self.mocked_Settings_obj.value.return_value = {'dist': 'fail', 'pos': 1}
|
||||||
|
list_preview_widget.change_slide(0)
|
||||||
|
self.mocked_Settings_obj.value.return_value = {'dist': 1, 'pos': 'fail'}
|
||||||
list_preview_widget.change_slide(0)
|
list_preview_widget.change_slide(0)
|
||||||
|
|
||||||
# THEN: no further functions should be called
|
# THEN: no further functions should be called
|
||||||
self.assertEquals(mocked_slide_count.call_count, 0, 'Should not be called')
|
self.assertEquals(mocked_slide_count.call_count, 0, 'Should not be called')
|
||||||
self.assertEquals(mocked_item.call_count, 0, 'Should not be called')
|
|
||||||
self.assertEquals(mocked_scrollToItem.call_count, 0, 'Should not be called')
|
self.assertEquals(mocked_scrollToItem.call_count, 0, 'Should not be called')
|
||||||
self.assertEquals(mocked_selectRow.call_count, 0, 'Should not be called')
|
self.assertEquals(mocked_selectRow.call_count, 0, 'Should not be called')
|
||||||
|
self.assertEquals(mocked_item.call_count, 0, 'Should not be called')
|
||||||
|
|
||||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.selectRow')
|
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.selectRow')
|
||||||
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
@patch(u'openlp.core.ui.listpreviewwidget.ListPreviewWidget.scrollToItem')
|
||||||
@ -332,6 +340,7 @@ class TestListPreviewWidget(TestCase):
|
|||||||
self.assertEquals(mocked_slide_count.call_count, 3, 'Should be called')
|
self.assertEquals(mocked_slide_count.call_count, 3, 'Should be called')
|
||||||
self.assertEquals(mocked_scrollToItem.call_count, 2, 'Should be called')
|
self.assertEquals(mocked_scrollToItem.call_count, 2, 'Should be called')
|
||||||
self.assertEquals(mocked_selectRow.call_count, 2, 'Should be called')
|
self.assertEquals(mocked_selectRow.call_count, 2, 'Should be called')
|
||||||
|
self.assertEquals(mocked_item.call_count, 2, 'Should be called')
|
||||||
calls = [call(0, 0), call(0, 0)]
|
calls = [call(0, 0), call(0, 0)]
|
||||||
mocked_item.assert_has_calls(calls)
|
mocked_item.assert_has_calls(calls)
|
||||||
|
|
||||||
@ -363,5 +372,6 @@ class TestListPreviewWidget(TestCase):
|
|||||||
self.assertEquals(mocked_slide_count.call_count, 3, 'Should be called')
|
self.assertEquals(mocked_slide_count.call_count, 3, 'Should be called')
|
||||||
self.assertEquals(mocked_scrollToItem.call_count, 3, 'Should be called')
|
self.assertEquals(mocked_scrollToItem.call_count, 3, 'Should be called')
|
||||||
self.assertEquals(mocked_selectRow.call_count, 3, 'Should be called')
|
self.assertEquals(mocked_selectRow.call_count, 3, 'Should be called')
|
||||||
|
self.assertEquals(mocked_item.call_count, 3, 'Should be called')
|
||||||
calls = [call(0, 0), call(1, 0), call(2, 0)]
|
calls = [call(0, 0), call(1, 0), call(2, 0)]
|
||||||
mocked_item.assert_has_calls(calls)
|
mocked_item.assert_has_calls(calls)
|
||||||
|
Loading…
Reference in New Issue
Block a user