forked from openlp/openlp
Fixes for broken tests.
Fixed ThemeManager tests Add code and tests to support hiding the "blank to theme" for non theme service items. Add code to add config data to service items and use it if present. bzr-revno: 2324
This commit is contained in:
commit
1141658ab2
@ -342,18 +342,16 @@ def create_valign_selection_widgets(parent):
|
|||||||
return label, combo_box
|
return label, combo_box
|
||||||
|
|
||||||
|
|
||||||
def find_and_set_in_combo_box(combo_box, value_to_find):
|
def find_and_set_in_combo_box(combo_box, value_to_find, set_missing=True):
|
||||||
"""
|
"""
|
||||||
Find a string in a combo box and set it as the selected item if present
|
Find a string in a combo box and set it as the selected item if present
|
||||||
|
|
||||||
``combo_box``
|
:param combo_box: The combo box to check for selected items
|
||||||
The combo box to check for selected items
|
:param value_to_find: The value to find
|
||||||
|
:param set_missing: if not found leave value as current
|
||||||
``value_to_find``
|
|
||||||
The value to find
|
|
||||||
"""
|
"""
|
||||||
index = combo_box.findText(value_to_find, QtCore.Qt.MatchExactly)
|
index = combo_box.findText(value_to_find, QtCore.Qt.MatchExactly)
|
||||||
if index == -1:
|
if index == -1:
|
||||||
# Not Found.
|
# Not Found.
|
||||||
index = 0
|
index = 0 if set_missing else combo_box.currentIndex()
|
||||||
combo_box.setCurrentIndex(index)
|
combo_box.setCurrentIndex(index)
|
||||||
|
@ -475,6 +475,19 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
Settings().setValue('servicemanager/last file', '')
|
Settings().setValue('servicemanager/last file', '')
|
||||||
self.plugin_manager.new_service_created()
|
self.plugin_manager.new_service_created()
|
||||||
|
|
||||||
|
def create_basic_service(self):
|
||||||
|
"""
|
||||||
|
Create the initial service array with the base items to be saved.
|
||||||
|
|
||||||
|
:return service array
|
||||||
|
"""
|
||||||
|
service = []
|
||||||
|
core = {'lite-service': self._save_lite,
|
||||||
|
'service-theme': self.service_theme
|
||||||
|
}
|
||||||
|
service.append({'openlp_core': core})
|
||||||
|
return service
|
||||||
|
|
||||||
def save_file(self):
|
def save_file(self):
|
||||||
"""
|
"""
|
||||||
Save the current service file.
|
Save the current service file.
|
||||||
@ -495,7 +508,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
service_file_name = '%s.osj' % base_name
|
service_file_name = '%s.osj' % base_name
|
||||||
self.log_debug('ServiceManager.save_file - %s' % path_file_name)
|
self.log_debug('ServiceManager.save_file - %s' % path_file_name)
|
||||||
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
|
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
|
||||||
service = []
|
service = self.create_basic_service()
|
||||||
write_list = []
|
write_list = []
|
||||||
missing_list = []
|
missing_list = []
|
||||||
audio_files = []
|
audio_files = []
|
||||||
@ -607,9 +620,9 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
path, file_name = os.path.split(path_file_name)
|
path, file_name = os.path.split(path_file_name)
|
||||||
base_name = os.path.splitext(file_name)[0]
|
base_name = os.path.splitext(file_name)[0]
|
||||||
service_file_name = '%s.osj' % base_name
|
service_file_name = '%s.osj' % base_name
|
||||||
self.log_debug('ServiceManager.save_file - %s', path_file_name)
|
self.log_debug('ServiceManager.save_file - %s' % path_file_name)
|
||||||
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
|
Settings().setValue(self.main_window.service_manager_settings_section + '/last directory', path)
|
||||||
service = []
|
service = self.create_basic_service()
|
||||||
self.application.set_busy_cursor()
|
self.application.set_busy_cursor()
|
||||||
# Number of items + 1 to zip it
|
# Number of items + 1 to zip it
|
||||||
self.main_window.display_progress_bar(len(self.service_items) + 1)
|
self.main_window.display_progress_bar(len(self.service_items) + 1)
|
||||||
@ -647,7 +660,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
delete_file(temp_file_name)
|
delete_file(temp_file_name)
|
||||||
return success
|
return success
|
||||||
|
|
||||||
def save_file_as(self):
|
def save_file_as(self, field=None):
|
||||||
"""
|
"""
|
||||||
Get a file name and then call :func:`ServiceManager.save_file` to save the file.
|
Get a file name and then call :func:`ServiceManager.save_file` to save the file.
|
||||||
"""
|
"""
|
||||||
@ -748,19 +761,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
self.new_file()
|
self.new_file()
|
||||||
self.set_file_name(file_name)
|
self.set_file_name(file_name)
|
||||||
self.main_window.display_progress_bar(len(items))
|
self.main_window.display_progress_bar(len(items))
|
||||||
for item in items:
|
self.process_service_items(items)
|
||||||
self.main_window.increment_progress_bar()
|
|
||||||
service_item = ServiceItem()
|
|
||||||
if self._save_lite:
|
|
||||||
service_item.set_from_service(item)
|
|
||||||
else:
|
|
||||||
service_item.set_from_service(item, self.service_path)
|
|
||||||
service_item.validate_item(self.suffixes)
|
|
||||||
if service_item.is_capable(ItemCapabilities.OnLoadUpdate):
|
|
||||||
new_item = Registry().get(service_item.name).service_load(service_item)
|
|
||||||
if new_item:
|
|
||||||
service_item = new_item
|
|
||||||
self.add_service_item(service_item, repaint=False)
|
|
||||||
delete_file(p_file)
|
delete_file(p_file)
|
||||||
self.main_window.add_recent_file(file_name)
|
self.main_window.add_recent_file(file_name)
|
||||||
self.set_modified(False)
|
self.set_modified(False)
|
||||||
@ -794,6 +795,34 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
self.application.set_normal_cursor()
|
self.application.set_normal_cursor()
|
||||||
self.repaint_service_list(-1, -1)
|
self.repaint_service_list(-1, -1)
|
||||||
|
|
||||||
|
def process_service_items(self, service_items):
|
||||||
|
"""
|
||||||
|
Process all the array of service items loaded from the saved service
|
||||||
|
|
||||||
|
:param service_items: list of service_items
|
||||||
|
"""
|
||||||
|
for item in service_items:
|
||||||
|
self.main_window.increment_progress_bar()
|
||||||
|
service_item = ServiceItem()
|
||||||
|
if 'openlp_core' in item:
|
||||||
|
item = item.get('openlp_core')
|
||||||
|
theme = item.get('service-theme', None)
|
||||||
|
if theme:
|
||||||
|
find_and_set_in_combo_box(self.theme_combo_box, theme, set_missing=False)
|
||||||
|
if theme == self.theme_combo_box.currentText():
|
||||||
|
self.renderer.set_service_theme(theme)
|
||||||
|
else:
|
||||||
|
if self._save_lite:
|
||||||
|
service_item.set_from_service(item)
|
||||||
|
else:
|
||||||
|
service_item.set_from_service(item, self.service_path)
|
||||||
|
service_item.validate_item(self.suffixes)
|
||||||
|
if service_item.is_capable(ItemCapabilities.OnLoadUpdate):
|
||||||
|
new_item = Registry().get(service_item.name).service_load(service_item)
|
||||||
|
if new_item:
|
||||||
|
service_item = new_item
|
||||||
|
self.add_service_item(service_item, repaint=False)
|
||||||
|
|
||||||
def load_last_file(self):
|
def load_last_file(self):
|
||||||
"""
|
"""
|
||||||
Load the last service item from the service manager when the service was last closed. Can be blank if there was
|
Load the last service item from the service manager when the service was last closed. Can be blank if there was
|
||||||
@ -896,6 +925,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
def toggle_auto_play_slides_once(self, field=None):
|
def toggle_auto_play_slides_once(self, field=None):
|
||||||
"""
|
"""
|
||||||
Toggle Auto play slide once. Inverts auto play once option for the item
|
Toggle Auto play slide once. Inverts auto play once option for the item
|
||||||
|
|
||||||
:param field:
|
:param field:
|
||||||
"""
|
"""
|
||||||
item = self.find_service_item()[0]
|
item = self.find_service_item()[0]
|
||||||
@ -912,6 +942,7 @@ class ServiceManager(OpenLPMixin, RegistryMixin, QtGui.QWidget, Ui_ServiceManage
|
|||||||
def toggle_auto_play_slides_loop(self, field=None):
|
def toggle_auto_play_slides_loop(self, field=None):
|
||||||
"""
|
"""
|
||||||
Toggle Auto play slide loop.
|
Toggle Auto play slide loop.
|
||||||
|
|
||||||
:param field:
|
:param field:
|
||||||
"""
|
"""
|
||||||
item = self.find_service_item()[0]
|
item = self.find_service_item()[0]
|
||||||
|
@ -72,6 +72,11 @@ WIDE_MENU = [
|
|||||||
'desktop_screen_button'
|
'desktop_screen_button'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
NON_TEXT_MENU = [
|
||||||
|
'blank_screen_button',
|
||||||
|
'desktop_screen_button'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class DisplayController(QtGui.QWidget):
|
class DisplayController(QtGui.QWidget):
|
||||||
"""
|
"""
|
||||||
@ -116,6 +121,9 @@ class SlideController(DisplayController):
|
|||||||
self.screen_size_changed()
|
self.screen_size_changed()
|
||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
|
"""
|
||||||
|
Initialise the UI elements of the controller
|
||||||
|
"""
|
||||||
self.screens = ScreenList()
|
self.screens = ScreenList()
|
||||||
try:
|
try:
|
||||||
self.ratio = self.screens.current['size'].width() / self.screens.current['size'].height()
|
self.ratio = self.screens.current['size'].width() / self.screens.current['size'].height()
|
||||||
@ -442,6 +450,8 @@ class SlideController(DisplayController):
|
|||||||
def set_live_hot_keys(self, parent=None):
|
def set_live_hot_keys(self, parent=None):
|
||||||
"""
|
"""
|
||||||
Set the live hotkeys
|
Set the live hotkeys
|
||||||
|
|
||||||
|
:param parent: The parent UI object for actions to be added to.
|
||||||
"""
|
"""
|
||||||
self.previous_service = create_action(parent, 'previousService',
|
self.previous_service = create_action(parent, 'previousService',
|
||||||
text=translate('OpenLP.SlideController', 'Previous Service'),
|
text=translate('OpenLP.SlideController', 'Previous Service'),
|
||||||
@ -469,6 +479,8 @@ class SlideController(DisplayController):
|
|||||||
def toggle_display(self, action):
|
def toggle_display(self, action):
|
||||||
"""
|
"""
|
||||||
Toggle the display settings triggered from remote messages.
|
Toggle the display settings triggered from remote messages.
|
||||||
|
|
||||||
|
:param action: The blank action to be processed.
|
||||||
"""
|
"""
|
||||||
if action == 'blank' or action == 'hide':
|
if action == 'blank' or action == 'hide':
|
||||||
self.on_blank_display(True)
|
self.on_blank_display(True)
|
||||||
@ -544,6 +556,8 @@ class SlideController(DisplayController):
|
|||||||
def __add_actions_to_widget(self, widget):
|
def __add_actions_to_widget(self, widget):
|
||||||
"""
|
"""
|
||||||
Add actions to the widget specified by `widget`
|
Add actions to the widget specified by `widget`
|
||||||
|
|
||||||
|
:param widget: The UI widget for the actions
|
||||||
"""
|
"""
|
||||||
widget.addActions([
|
widget.addActions([
|
||||||
self.previous_item, self.next_item,
|
self.previous_item, self.next_item,
|
||||||
@ -574,6 +588,8 @@ class SlideController(DisplayController):
|
|||||||
def on_controller_size_changed(self, width):
|
def on_controller_size_changed(self, width):
|
||||||
"""
|
"""
|
||||||
Change layout of display control buttons on controller size change
|
Change layout of display control buttons on controller size change
|
||||||
|
|
||||||
|
:param width: the new width of the display
|
||||||
"""
|
"""
|
||||||
if self.is_live:
|
if self.is_live:
|
||||||
# Space used by the toolbar.
|
# Space used by the toolbar.
|
||||||
@ -581,12 +597,24 @@ class SlideController(DisplayController):
|
|||||||
# Add the threshold to prevent flickering.
|
# Add the threshold to prevent flickering.
|
||||||
if width > used_space + HIDE_MENU_THRESHOLD and self.hide_menu.isVisible():
|
if width > used_space + HIDE_MENU_THRESHOLD and self.hide_menu.isVisible():
|
||||||
self.toolbar.set_widget_visible(NARROW_MENU, False)
|
self.toolbar.set_widget_visible(NARROW_MENU, False)
|
||||||
self.toolbar.set_widget_visible(WIDE_MENU)
|
self.set_blank_menu()
|
||||||
# Take away a threshold to prevent flickering.
|
# Take away a threshold to prevent flickering.
|
||||||
elif width < used_space - HIDE_MENU_THRESHOLD and not self.hide_menu.isVisible():
|
elif width < used_space - HIDE_MENU_THRESHOLD and not self.hide_menu.isVisible():
|
||||||
self.toolbar.set_widget_visible(WIDE_MENU, False)
|
self.set_blank_menu(False)
|
||||||
self.toolbar.set_widget_visible(NARROW_MENU)
|
self.toolbar.set_widget_visible(NARROW_MENU)
|
||||||
|
|
||||||
|
def set_blank_menu(self, visible=True):
|
||||||
|
"""
|
||||||
|
Set the correct menu type dependent on the service item type
|
||||||
|
|
||||||
|
:param visible: Do I need to hide the menu?
|
||||||
|
"""
|
||||||
|
self.toolbar.set_widget_visible(WIDE_MENU, False)
|
||||||
|
if self.service_item and self.service_item.is_text():
|
||||||
|
self.toolbar.set_widget_visible(WIDE_MENU, visible)
|
||||||
|
else:
|
||||||
|
self.toolbar.set_widget_visible(NON_TEXT_MENU, visible)
|
||||||
|
|
||||||
def on_song_bar_handler(self):
|
def on_song_bar_handler(self):
|
||||||
"""
|
"""
|
||||||
Some song handler
|
Some song handler
|
||||||
@ -612,6 +640,8 @@ class SlideController(DisplayController):
|
|||||||
def enable_tool_bar(self, item):
|
def enable_tool_bar(self, item):
|
||||||
"""
|
"""
|
||||||
Allows the toolbars to be reconfigured based on Controller Type and ServiceItem Type
|
Allows the toolbars to be reconfigured based on Controller Type and ServiceItem Type
|
||||||
|
|
||||||
|
:param item: current service item being processed
|
||||||
"""
|
"""
|
||||||
if self.is_live:
|
if self.is_live:
|
||||||
self.enable_live_tool_bar(item)
|
self.enable_live_tool_bar(item)
|
||||||
@ -621,6 +651,8 @@ class SlideController(DisplayController):
|
|||||||
def enable_live_tool_bar(self, item):
|
def enable_live_tool_bar(self, item):
|
||||||
"""
|
"""
|
||||||
Allows the live toolbar to be customised
|
Allows the live toolbar to be customised
|
||||||
|
|
||||||
|
:param item: The current service item
|
||||||
"""
|
"""
|
||||||
# Work-around for OS X, hide and then show the toolbar
|
# Work-around for OS X, hide and then show the toolbar
|
||||||
# See bug #791050
|
# See bug #791050
|
||||||
@ -643,6 +675,7 @@ class SlideController(DisplayController):
|
|||||||
self.mediabar.show()
|
self.mediabar.show()
|
||||||
self.previous_item.setVisible(not item.is_media())
|
self.previous_item.setVisible(not item.is_media())
|
||||||
self.next_item.setVisible(not item.is_media())
|
self.next_item.setVisible(not item.is_media())
|
||||||
|
self.set_blank_menu()
|
||||||
# Work-around for OS X, hide and then show the toolbar
|
# Work-around for OS X, hide and then show the toolbar
|
||||||
# See bug #791050
|
# See bug #791050
|
||||||
self.toolbar.show()
|
self.toolbar.show()
|
||||||
|
@ -59,22 +59,18 @@ class TestRegistry(TestCase):
|
|||||||
with self.assertRaises(KeyError) as context:
|
with self.assertRaises(KeyError) as context:
|
||||||
Registry().register('test1', mock_1)
|
Registry().register('test1', mock_1)
|
||||||
self.assertEqual(context.exception.args[0], 'Duplicate service exception test1',
|
self.assertEqual(context.exception.args[0], 'Duplicate service exception test1',
|
||||||
'KeyError exception should have been thrown for duplicate service')
|
'KeyError exception should have been thrown for duplicate service')
|
||||||
|
|
||||||
# WHEN I try to get back a non existent component
|
# WHEN I try to get back a non existent component
|
||||||
# THEN I will get an exception
|
# THEN I will get an exception
|
||||||
with self.assertRaises(KeyError) as context:
|
temp = Registry().get('test2')
|
||||||
temp = Registry().get('test2')
|
self.assertEqual(temp, None, 'None should have been returned for missing service')
|
||||||
self.assertEqual(context.exception.args[0], 'Service test2 not found in list',
|
|
||||||
'KeyError exception should have been thrown for missing service')
|
|
||||||
|
|
||||||
# WHEN I try to replace a component I should be allowed (testing only)
|
# WHEN I try to replace a component I should be allowed (testing only)
|
||||||
Registry().remove('test1')
|
Registry().remove('test1')
|
||||||
# THEN I will get an exception
|
# THEN I will get an exception
|
||||||
with self.assertRaises(KeyError) as context:
|
temp = Registry().get('test1')
|
||||||
temp = Registry().get('test1')
|
self.assertEqual(temp, None, 'None should have been returned for deleted service')
|
||||||
self.assertEqual(context.exception.args[0], 'Service test1 not found in list',
|
|
||||||
'KeyError exception should have been thrown for deleted service')
|
|
||||||
|
|
||||||
def registry_function_test(self):
|
def registry_function_test(self):
|
||||||
"""
|
"""
|
||||||
|
85
tests/functional/openlp_core_ui/test_servicemanager.py
Normal file
85
tests/functional/openlp_core_ui/test_servicemanager.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2014 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
|
||||||
|
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
|
||||||
|
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
|
||||||
|
# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
|
||||||
|
# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
Package to test the openlp.core.ui.slidecontroller package.
|
||||||
|
"""
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from openlp.core.common import Registry
|
||||||
|
from openlp.core.ui import ServiceManager
|
||||||
|
|
||||||
|
from tests.interfaces import MagicMock, patch
|
||||||
|
|
||||||
|
|
||||||
|
class TestServiceManager(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
"""
|
||||||
|
Create the UI
|
||||||
|
"""
|
||||||
|
Registry.create()
|
||||||
|
#self.app = QtGui.QApplication([])
|
||||||
|
#ScreenList.create(self.app.desktop())
|
||||||
|
#Registry().register('application', MagicMock())
|
||||||
|
#with patch('openlp.core.lib.PluginManager'):
|
||||||
|
# self.main_window = MainWindow()
|
||||||
|
#self.service_manager = Registry().get('service_manager')
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
"""
|
||||||
|
Delete all the C++ objects at the end so that we don't have a segfault
|
||||||
|
"""
|
||||||
|
#del self.main_window
|
||||||
|
#del self.app
|
||||||
|
pass
|
||||||
|
|
||||||
|
def initial_service_manager_test(self):
|
||||||
|
"""
|
||||||
|
Test the initial of service manager.
|
||||||
|
"""
|
||||||
|
# GIVEN: A new service manager instance.
|
||||||
|
ServiceManager(None)
|
||||||
|
# WHEN: the default service manager is built.
|
||||||
|
# THEN: The the controller should be registered in the registry.
|
||||||
|
self.assertNotEqual(Registry().get('service_manager'), None, 'The base service manager should be registered')
|
||||||
|
|
||||||
|
def create_basic_service_test(self):
|
||||||
|
"""
|
||||||
|
Test the create basic service array
|
||||||
|
"""
|
||||||
|
# GIVEN: A new service manager instance.
|
||||||
|
service_manager = ServiceManager(None)
|
||||||
|
# WHEN: when the basic service array is created.
|
||||||
|
service_manager._save_lite = False
|
||||||
|
service_manager.service_theme = 'test_theme'
|
||||||
|
service = service_manager.create_basic_service()[0]
|
||||||
|
# THEN: The the controller should be registered in the registry.
|
||||||
|
self.assertNotEqual(service, None, 'The base service should be created')
|
||||||
|
self.assertEqual(service['openlp_core']['service-theme'], 'test_theme', 'The test theme should be saved')
|
||||||
|
self.assertEqual(service['openlp_core']['lite-service'], False, 'The lite service should be saved')
|
78
tests/functional/openlp_core_ui/test_slidecontroller.py
Normal file
78
tests/functional/openlp_core_ui/test_slidecontroller.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2014 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
|
||||||
|
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
|
||||||
|
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
|
||||||
|
# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
|
||||||
|
# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
Package to test the openlp.core.ui.slidecontroller package.
|
||||||
|
"""
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from openlp.core.ui import SlideController
|
||||||
|
|
||||||
|
from tests.interfaces import MagicMock, patch
|
||||||
|
|
||||||
|
|
||||||
|
class TestSlideController(TestCase):
|
||||||
|
|
||||||
|
def initial_slide_controller_test(self):
|
||||||
|
"""
|
||||||
|
Test the initial slide controller state .
|
||||||
|
"""
|
||||||
|
# GIVEN: A new slideController instance.
|
||||||
|
slide_controller = SlideController(None)
|
||||||
|
# WHEN: the default controller is built.
|
||||||
|
# THEN: The controller should not be a live controller.
|
||||||
|
self.assertEqual(slide_controller.is_live, False, 'The base slide controller should not be a live controller')
|
||||||
|
|
||||||
|
def toggle_blank_test(self):
|
||||||
|
"""
|
||||||
|
Test the setting of the display blank icons by display type.
|
||||||
|
"""
|
||||||
|
# GIVEN: A new slideController instance.
|
||||||
|
slide_controller = SlideController(None)
|
||||||
|
service_item = MagicMock()
|
||||||
|
toolbar = MagicMock()
|
||||||
|
toolbar.set_widget_visible = self.dummy_widget_visible
|
||||||
|
slide_controller.toolbar = toolbar
|
||||||
|
slide_controller.service_item = service_item
|
||||||
|
|
||||||
|
# WHEN a text based service item is used
|
||||||
|
slide_controller.service_item.is_text = MagicMock(return_value=True)
|
||||||
|
slide_controller.set_blank_menu()
|
||||||
|
|
||||||
|
# THEN: then call set up the toolbar to blank the display screen.
|
||||||
|
self.assertEqual(len(self.test_widget), 3, 'There should be three icons to display on the screen')
|
||||||
|
|
||||||
|
# WHEN a non text based service item is used
|
||||||
|
slide_controller.service_item.is_text = MagicMock(return_value=False)
|
||||||
|
slide_controller.set_blank_menu()
|
||||||
|
|
||||||
|
# THEN: then call set up the toolbar to blank the display screen.
|
||||||
|
self.assertEqual(len(self.test_widget), 2, 'There should be only two icons to display on the screen')
|
||||||
|
|
||||||
|
def dummy_widget_visible(self, widget, visible=True):
|
||||||
|
self.test_widget = widget
|
@ -38,7 +38,7 @@ class TestListPreviewWidget(TestCase):
|
|||||||
|
|
||||||
def initial_slide_count_test(self):
|
def initial_slide_count_test(self):
|
||||||
"""
|
"""
|
||||||
Test the inital slide count.
|
Test the initial slide count .
|
||||||
"""
|
"""
|
||||||
# GIVEN: A new ListPreviewWidget instance.
|
# GIVEN: A new ListPreviewWidget instance.
|
||||||
# WHEN: No SlideItem has been added yet.
|
# WHEN: No SlideItem has been added yet.
|
||||||
@ -47,7 +47,7 @@ class TestListPreviewWidget(TestCase):
|
|||||||
|
|
||||||
def initial_slide_number_test(self):
|
def initial_slide_number_test(self):
|
||||||
"""
|
"""
|
||||||
Test the inital slide number.
|
Test the initial current slide number.
|
||||||
"""
|
"""
|
||||||
# GIVEN: A new ListPreviewWidget instance.
|
# GIVEN: A new ListPreviewWidget instance.
|
||||||
# WHEN: No SlideItem has been added yet.
|
# WHEN: No SlideItem has been added yet.
|
||||||
|
@ -22,12 +22,13 @@ class TestMainWindow(TestCase):
|
|||||||
# Mock cursor busy/normal methods.
|
# Mock cursor busy/normal methods.
|
||||||
self.app.set_busy_cursor = MagicMock()
|
self.app.set_busy_cursor = MagicMock()
|
||||||
self.app.set_normal_cursor = MagicMock()
|
self.app.set_normal_cursor = MagicMock()
|
||||||
self.app.args =[]
|
self.app.args = []
|
||||||
Registry().register('application', self.app)
|
Registry().register('application', self.app)
|
||||||
# Mock classes and methods used by mainwindow.
|
# Mock classes and methods used by mainwindow.
|
||||||
with patch('openlp.core.ui.mainwindow.SettingsForm') as mocked_settings_form, \
|
with patch('openlp.core.ui.mainwindow.SettingsForm') as mocked_settings_form, \
|
||||||
patch('openlp.core.ui.mainwindow.ImageManager') as mocked_image_manager, \
|
patch('openlp.core.ui.mainwindow.ImageManager') as mocked_image_manager, \
|
||||||
patch('openlp.core.ui.mainwindow.SlideController') as mocked_slide_controller, \
|
patch('openlp.core.ui.mainwindow.LiveController') as mocked_live_controller, \
|
||||||
|
patch('openlp.core.ui.mainwindow.PreviewController') as mocked_preview_controller, \
|
||||||
patch('openlp.core.ui.mainwindow.OpenLPDockWidget') as mocked_dock_widget, \
|
patch('openlp.core.ui.mainwindow.OpenLPDockWidget') as mocked_dock_widget, \
|
||||||
patch('openlp.core.ui.mainwindow.QtGui.QToolBox') as mocked_q_tool_box_class, \
|
patch('openlp.core.ui.mainwindow.QtGui.QToolBox') as mocked_q_tool_box_class, \
|
||||||
patch('openlp.core.ui.mainwindow.QtGui.QMainWindow.addDockWidget') as mocked_add_dock_method, \
|
patch('openlp.core.ui.mainwindow.QtGui.QMainWindow.addDockWidget') as mocked_add_dock_method, \
|
||||||
@ -53,7 +54,7 @@ class TestMainWindow(TestCase):
|
|||||||
mocked_value.side_effect = [True, 2]
|
mocked_value.side_effect = [True, 2]
|
||||||
|
|
||||||
# WHEN: Call the restore method.
|
# WHEN: Call the restore method.
|
||||||
Registry().execute('bootstrap_post_set_up')
|
self.main_window.restore_current_media_manager_item()
|
||||||
|
|
||||||
# THEN: The current widget should have been set.
|
# THEN: The current widget should have been set.
|
||||||
self.main_window.media_tool_box.setCurrentIndex.assert_called_with(2)
|
self.main_window.media_tool_box.setCurrentIndex.assert_called_with(2)
|
||||||
|
@ -34,28 +34,28 @@ class TestStartTimeDialog(TestCase):
|
|||||||
"""
|
"""
|
||||||
Test StartTimeDialog are defaults correct
|
Test StartTimeDialog are defaults correct
|
||||||
"""
|
"""
|
||||||
self.assertEqual(self.form.hourSpinBox.minimum(), 0, 'The minimum hour should stay the same as the dialog')
|
self.assertEqual(self.form.hour_spin_box.minimum(), 0, 'The minimum hour should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.hourSpinBox.maximum(), 4, 'The maximum hour should stay the same as the dialog')
|
self.assertEqual(self.form.hour_spin_box.maximum(), 4, 'The maximum hour should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.minuteSpinBox.minimum(), 0,
|
self.assertEqual(self.form.minute_spin_box.minimum(), 0,
|
||||||
'The minimum minute should stay the same as the dialog')
|
'The minimum minute should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.minuteSpinBox.maximum(), 59,
|
self.assertEqual(self.form.minute_spin_box.maximum(), 59,
|
||||||
'The maximum minute should stay the same as the dialog')
|
'The maximum minute should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.secondSpinBox.minimum(), 0,
|
self.assertEqual(self.form.second_spin_box.minimum(), 0,
|
||||||
'The minimum second should stay the same as the dialog')
|
'The minimum second should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.secondSpinBox.maximum(), 59,
|
self.assertEqual(self.form.second_spin_box.maximum(), 59,
|
||||||
'The maximum second should stay the same as the dialog')
|
'The maximum second should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.hourFinishSpinBox.minimum(), 0,
|
self.assertEqual(self.form.hour_finish_spin_box.minimum(), 0,
|
||||||
'The minimum finish hour should stay the same as the dialog')
|
'The minimum finish hour should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.hourFinishSpinBox.maximum(), 4,
|
self.assertEqual(self.form.hour_finish_spin_box.maximum(), 4,
|
||||||
'The maximum finish hour should stay the same as the dialog')
|
'The maximum finish hour should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.minuteFinishSpinBox.minimum(), 0,
|
self.assertEqual(self.form.minute_finish_spin_box.minimum(), 0,
|
||||||
'The minimum finish minute should stay the same as the dialog')
|
'The minimum finish minute should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.minuteFinishSpinBox.maximum(), 59,
|
self.assertEqual(self.form.minute_finish_spin_box.maximum(), 59,
|
||||||
'The maximum finish minute should stay the same as the dialog')
|
'The maximum finish minute should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.secondFinishSpinBox.minimum(), 0,
|
self.assertEqual(self.form.second_finish_spin_box.minimum(), 0,
|
||||||
'The minimum finish second should stay the same as the dialog')
|
'The minimum finish second should stay the same as the dialog')
|
||||||
self.assertEqual(self.form.secondFinishSpinBox.maximum(), 59,
|
self.assertEqual(self.form.second_finish_spin_box.maximum(), 59,
|
||||||
'The maximum finish second should stay the same as the dialog')
|
'The maximum finish second should stay the same as the dialog')
|
||||||
|
|
||||||
def time_display_test(self):
|
def time_display_test(self):
|
||||||
"""
|
"""
|
||||||
@ -75,22 +75,22 @@ class TestStartTimeDialog(TestCase):
|
|||||||
QtTest.QTest.mouseClick(ok_widget, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(ok_widget, QtCore.Qt.LeftButton)
|
||||||
|
|
||||||
# THEN the following input values are returned
|
# THEN the following input values are returned
|
||||||
self.assertEqual(self.form.hourSpinBox.value(), 0)
|
self.assertEqual(self.form.hour_spin_box.value(), 0)
|
||||||
self.assertEqual(self.form.minuteSpinBox.value(), 1)
|
self.assertEqual(self.form.minute_spin_box.value(), 1)
|
||||||
self.assertEqual(self.form.secondSpinBox.value(), 1)
|
self.assertEqual(self.form.second_spin_box.value(), 1)
|
||||||
self.assertEqual(self.form.item['service_item'].start_time, 61, 'The start time should stay the same')
|
self.assertEqual(self.form.item['service_item'].start_time, 61, 'The start time should stay the same')
|
||||||
|
|
||||||
# WHEN displaying the UI, changing the time to 2min 3secs and pressing enter
|
# WHEN displaying the UI, changing the time to 2min 3secs and pressing enter
|
||||||
self.form.item = {'service_item': mocked_serviceitem}
|
self.form.item = {'service_item': mocked_serviceitem}
|
||||||
with patch('PyQt4.QtGui.QDialog.exec_'):
|
with patch('PyQt4.QtGui.QDialog.exec_'):
|
||||||
self.form.exec_()
|
self.form.exec_()
|
||||||
self.form.minuteSpinBox.setValue(2)
|
self.form.minute_spin_box.setValue(2)
|
||||||
self.form.secondSpinBox.setValue(3)
|
self.form.second_spin_box.setValue(3)
|
||||||
ok_widget = self.form.button_box.button(self.form.button_box.Ok)
|
ok_widget = self.form.button_box.button(self.form.button_box.Ok)
|
||||||
QtTest.QTest.mouseClick(ok_widget, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(ok_widget, QtCore.Qt.LeftButton)
|
||||||
|
|
||||||
# THEN the following values are returned
|
# THEN the following values are returned
|
||||||
self.assertEqual(self.form.hourSpinBox.value(), 0)
|
self.assertEqual(self.form.hour_spin_box.value(), 0)
|
||||||
self.assertEqual(self.form.minuteSpinBox.value(), 2)
|
self.assertEqual(self.form.minute_spin_box.value(), 2)
|
||||||
self.assertEqual(self.form.secondSpinBox.value(), 3)
|
self.assertEqual(self.form.second_spin_box.value(), 3)
|
||||||
self.assertEqual(self.form.item['service_item'].start_time, 123, 'The start time should have changed')
|
self.assertEqual(self.form.item['service_item'].start_time, 123, 'The start time should have changed')
|
||||||
|
@ -33,6 +33,8 @@ import os
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
|
|
||||||
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.common import Registry, Settings
|
from openlp.core.common import Registry, Settings
|
||||||
from openlp.core.ui import ThemeManager
|
from openlp.core.ui import ThemeManager
|
||||||
from tests.functional import patch, MagicMock
|
from tests.functional import patch, MagicMock
|
||||||
@ -48,6 +50,7 @@ class TestThemeManager(TestCase):
|
|||||||
"""
|
"""
|
||||||
fd, self.ini_file = mkstemp('.ini')
|
fd, self.ini_file = mkstemp('.ini')
|
||||||
Settings().set_filename(self.ini_file)
|
Settings().set_filename(self.ini_file)
|
||||||
|
self.app = QtGui.QApplication([])
|
||||||
Registry.create()
|
Registry.create()
|
||||||
self.theme_manager = ThemeManager()
|
self.theme_manager = ThemeManager()
|
||||||
|
|
||||||
@ -57,6 +60,7 @@ class TestThemeManager(TestCase):
|
|||||||
"""
|
"""
|
||||||
os.unlink(self.ini_file)
|
os.unlink(self.ini_file)
|
||||||
os.unlink(Settings().fileName())
|
os.unlink(Settings().fileName())
|
||||||
|
del self.app
|
||||||
|
|
||||||
def initialise_test(self):
|
def initialise_test(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user