[fix 1385979] Check if the item is valid first

This commit is contained in:
Raoul Snyman 2014-10-28 21:02:06 +02:00
parent c19613ce82
commit ae7c863333
2 changed files with 25 additions and 3 deletions

View File

@ -143,6 +143,9 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog, RegistryProperties):
""" """
# Get the item we clicked on # Get the item we clicked on
list_item = self.setting_list_widget.item(item_index) list_item = self.setting_list_widget.item(item_index)
# Quick exit to the left if the item doesn't exist (maybe -1?)
if not list_item:
return
# Loop through the list of tabs in the stacked layout # Loop through the list of tabs in the stacked layout
for tab_index in range(self.stacked_layout.count()): for tab_index in range(self.stacked_layout.count()):
# Get the widget # Get the widget

View File

@ -29,10 +29,10 @@
""" """
Package to test the openlp.core.ui.settingsform package. Package to test the openlp.core.ui.settingsform package.
""" """
from PyQt4 import QtGui
from unittest import TestCase from unittest import TestCase
from openlp.core.common import Registry from openlp.core.common import Registry
from openlp.core.ui.generaltab import GeneralTab
from openlp.core.ui.settingsform import SettingsForm from openlp.core.ui.settingsform import SettingsForm
from tests.functional import MagicMock, patch from tests.functional import MagicMock, patch
@ -62,7 +62,7 @@ class TestSettingsForm(TestCase):
patch.object(settings_form.setting_list_widget, 'addItem') as mocked_add_item: patch.object(settings_form.setting_list_widget, 'addItem') as mocked_add_item:
settings_form.insert_tab(general_tab, is_visible=True) settings_form.insert_tab(general_tab, is_visible=True)
# THEN: Stuff should happen # THEN: The general tab should have been inserted into the stacked layout and an item inserted into the list
mocked_add_widget.assert_called_with(general_tab) mocked_add_widget.assert_called_with(general_tab)
self.assertEqual(1, mocked_add_item.call_count, 'addItem should have been called') self.assertEqual(1, mocked_add_item.call_count, 'addItem should have been called')
@ -80,6 +80,25 @@ class TestSettingsForm(TestCase):
patch.object(settings_form.setting_list_widget, 'addItem') as mocked_add_item: patch.object(settings_form.setting_list_widget, 'addItem') as mocked_add_item:
settings_form.insert_tab(general_tab, is_visible=False) settings_form.insert_tab(general_tab, is_visible=False)
# THEN: Stuff should happen # THEN: The general tab should have been inserted, but no list item should have been inserted into the list
mocked_add_widget.assert_called_with(general_tab) mocked_add_widget.assert_called_with(general_tab)
self.assertEqual(0, mocked_add_item.call_count, 'addItem should not have been called') self.assertEqual(0, mocked_add_item.call_count, 'addItem should not have been called')
def list_item_changed_invalid_item_test(self):
"""
Test that the list_item_changed() slot handles a non-existent item
"""
# GIVEN: A mocked tab inserted into a Settings Form
settings_form = SettingsForm(None)
general_tab = QtGui.QWidget(None)
general_tab.tab_title = 'mock'
general_tab.tab_title_visible = 'Mock'
general_tab.icon_path = ':/icon/openlp-logo-16x16.png'
settings_form.insert_tab(general_tab, is_visible=True)
with patch.object(settings_form.stacked_layout, 'count') as mocked_count:
# WHEN: The list_item_changed() slot is called with an invalid item index
settings_form.list_item_changed(100)
# THEN: The rest of the method should not have been called
self.assertEqual(0, mocked_count.call_count, 'The count method of the stacked layout should not be called')