forked from openlp/openlp
Update the tests to use mock from unittest in Python 3, plus various other small fixes to the tests.
bzr-revno: 2301
This commit is contained in:
commit
9cedbc1968
@ -82,10 +82,17 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
Constructor to create the media manager item.
|
Constructor to create the media manager item.
|
||||||
"""
|
"""
|
||||||
super(MediaManagerItem, self).__init__()
|
super(MediaManagerItem, self).__init__(parent)
|
||||||
|
self.plugin = plugin
|
||||||
|
self._setup()
|
||||||
|
self.setup_item()
|
||||||
|
|
||||||
|
def _setup(self):
|
||||||
|
"""
|
||||||
|
Run some initial setup. This method is separate from __init__ in order to mock it out in tests.
|
||||||
|
"""
|
||||||
self.hide()
|
self.hide()
|
||||||
self.whitespace = re.compile(r'[\W_]+', re.UNICODE)
|
self.whitespace = re.compile(r'[\W_]+', re.UNICODE)
|
||||||
self.plugin = plugin
|
|
||||||
visible_title = self.plugin.get_string(StringContent.VisibleName)
|
visible_title = self.plugin.get_string(StringContent.VisibleName)
|
||||||
self.title = str(visible_title['title'])
|
self.title = str(visible_title['title'])
|
||||||
Registry().register(self.plugin.name, self)
|
Registry().register(self.plugin.name, self)
|
||||||
@ -106,6 +113,12 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
QtCore.QObject.connect(self, QtCore.SIGNAL('%s_go_live' % self.plugin.name), self.go_live_remote)
|
QtCore.QObject.connect(self, QtCore.SIGNAL('%s_go_live' % self.plugin.name), self.go_live_remote)
|
||||||
QtCore.QObject.connect(self, QtCore.SIGNAL('%s_add_to_service' % self.plugin.name), self.add_to_service_remote)
|
QtCore.QObject.connect(self, QtCore.SIGNAL('%s_add_to_service' % self.plugin.name), self.add_to_service_remote)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Override this for additional Plugin setup
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def required_icons(self):
|
def required_icons(self):
|
||||||
"""
|
"""
|
||||||
This method is called to define the icons for the plugin. It provides a default set and the plugin is able to
|
This method is called to define the icons for the plugin. It provides a default set and the plugin is able to
|
||||||
|
@ -67,6 +67,9 @@ __default_settings__ = {
|
|||||||
|
|
||||||
|
|
||||||
class BiblePlugin(Plugin):
|
class BiblePlugin(Plugin):
|
||||||
|
"""
|
||||||
|
The Bible plugin provides a plugin for managing and displaying Bibles.
|
||||||
|
"""
|
||||||
log.info('Bible Plugin loaded')
|
log.info('Bible Plugin loaded')
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -74,13 +77,14 @@ class BiblePlugin(Plugin):
|
|||||||
self.weight = -9
|
self.weight = -9
|
||||||
self.icon_path = ':/plugins/plugin_bibles.png'
|
self.icon_path = ':/plugins/plugin_bibles.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.icon_path)
|
||||||
self.manager = None
|
self.manager = BibleManager(self)
|
||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
|
"""
|
||||||
|
Initialise the Bible plugin.
|
||||||
|
"""
|
||||||
log.info('bibles Initialising')
|
log.info('bibles Initialising')
|
||||||
if self.manager is None:
|
super(BiblePlugin, self).initialise()
|
||||||
self.manager = BibleManager(self)
|
|
||||||
Plugin.initialise(self)
|
|
||||||
self.import_bible_item.setVisible(True)
|
self.import_bible_item.setVisible(True)
|
||||||
action_list = ActionList.get_instance()
|
action_list = ActionList.get_instance()
|
||||||
action_list.add_action(self.import_bible_item, UiStrings().Import)
|
action_list.add_action(self.import_bible_item, UiStrings().Import)
|
||||||
@ -107,7 +111,7 @@ class BiblePlugin(Plugin):
|
|||||||
"""
|
"""
|
||||||
Perform tasks on application startup
|
Perform tasks on application startup
|
||||||
"""
|
"""
|
||||||
Plugin.app_startup(self)
|
super(BiblePlugin, self).app_startup()
|
||||||
if self.manager.old_bible_databases:
|
if self.manager.old_bible_databases:
|
||||||
if QtGui.QMessageBox.information(self.main_window,
|
if QtGui.QMessageBox.information(self.main_window,
|
||||||
translate('OpenLP', 'Information'),
|
translate('OpenLP', 'Information'),
|
||||||
|
@ -64,6 +64,11 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.lock_icon = build_icon(':/bibles/bibles_search_lock.png')
|
self.lock_icon = build_icon(':/bibles/bibles_search_lock.png')
|
||||||
self.unlock_icon = build_icon(':/bibles/bibles_search_unlock.png')
|
self.unlock_icon = build_icon(':/bibles/bibles_search_unlock.png')
|
||||||
MediaManagerItem.__init__(self, parent, plugin)
|
MediaManagerItem.__init__(self, parent, plugin)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
# Place to store the search results for both bibles.
|
# Place to store the search results for both bibles.
|
||||||
self.settings = self.plugin.settings_tab
|
self.settings = self.plugin.settings_tab
|
||||||
self.quick_preview_allowed = True
|
self.quick_preview_allowed = True
|
||||||
|
@ -58,6 +58,11 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
def __init__(self, parent, plugin):
|
def __init__(self, parent, plugin):
|
||||||
self.icon_path = 'custom/custom'
|
self.icon_path = 'custom/custom'
|
||||||
super(CustomMediaItem, self).__init__(parent, plugin)
|
super(CustomMediaItem, self).__init__(parent, plugin)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
self.edit_custom_form = EditCustomForm(self, self.main_window, self.plugin.manager)
|
self.edit_custom_form = EditCustomForm(self, self.main_window, self.plugin.manager)
|
||||||
self.single_service_item = False
|
self.single_service_item = False
|
||||||
self.quick_preview_allowed = True
|
self.quick_preview_allowed = True
|
||||||
@ -65,7 +70,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
# Holds information about whether the edit is remotely triggered and
|
# Holds information about whether the edit is remotely triggered and
|
||||||
# which Custom is required.
|
# which Custom is required.
|
||||||
self.remote_custom = -1
|
self.remote_custom = -1
|
||||||
self.manager = plugin.manager
|
self.manager = self.plugin.manager
|
||||||
|
|
||||||
def add_end_header_bar(self):
|
def add_end_header_bar(self):
|
||||||
self.toolbar.addSeparator()
|
self.toolbar.addSeparator()
|
||||||
|
@ -52,10 +52,18 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
|
|
||||||
def __init__(self, parent, plugin):
|
def __init__(self, parent, plugin):
|
||||||
self.icon_path = 'images/image'
|
self.icon_path = 'images/image'
|
||||||
|
self.manager = None
|
||||||
|
self.choose_group_form = None
|
||||||
|
self.add_group_form = None
|
||||||
super(ImageMediaItem, self).__init__(parent, plugin)
|
super(ImageMediaItem, self).__init__(parent, plugin)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
self.quick_preview_allowed = True
|
self.quick_preview_allowed = True
|
||||||
self.has_search = True
|
self.has_search = True
|
||||||
self.manager = plugin.manager
|
self.manager = self.plugin.manager
|
||||||
self.choose_group_form = ChooseGroupForm(self)
|
self.choose_group_form = ChooseGroupForm(self)
|
||||||
self.add_group_form = AddGroupForm(self)
|
self.add_group_form = AddGroupForm(self)
|
||||||
self.fill_groups_combobox(self.choose_group_form.group_combobox)
|
self.fill_groups_combobox(self.choose_group_form.group_combobox)
|
||||||
@ -91,8 +99,8 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
||||||
self.list_view.setIndentation(self.list_view.default_indentation)
|
self.list_view.setIndentation(self.list_view.default_indentation)
|
||||||
self.list_view.allow_internal_dnd = True
|
self.list_view.allow_internal_dnd = True
|
||||||
self.servicePath = os.path.join(AppLocation.get_section_data_path(self.settings_section), 'thumbnails')
|
self.service_path = os.path.join(AppLocation.get_section_data_path(self.settings_section), 'thumbnails')
|
||||||
check_directory_exists(self.servicePath)
|
check_directory_exists(self.service_path)
|
||||||
# Load images from the database
|
# Load images from the database
|
||||||
self.load_full_list(
|
self.load_full_list(
|
||||||
self.manager.get_all_objects(ImageFilenames, order_by_ref=ImageFilenames.filename), initial_load=True)
|
self.manager.get_all_objects(ImageFilenames, order_by_ref=ImageFilenames.filename), initial_load=True)
|
||||||
@ -193,7 +201,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
"""
|
"""
|
||||||
images = self.manager.get_all_objects(ImageFilenames, ImageFilenames.group_id == image_group.id)
|
images = self.manager.get_all_objects(ImageFilenames, ImageFilenames.group_id == image_group.id)
|
||||||
for image in images:
|
for image in images:
|
||||||
delete_file(os.path.join(self.servicePath, os.path.split(image.filename)[1]))
|
delete_file(os.path.join(self.service_path, os.path.split(image.filename)[1]))
|
||||||
self.manager.delete_object(ImageFilenames, image.id)
|
self.manager.delete_object(ImageFilenames, image.id)
|
||||||
image_groups = self.manager.get_all_objects(ImageGroups, ImageGroups.parent_id == image_group.id)
|
image_groups = self.manager.get_all_objects(ImageGroups, ImageGroups.parent_id == image_group.id)
|
||||||
for group in image_groups:
|
for group in image_groups:
|
||||||
@ -215,7 +223,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
if row_item:
|
if row_item:
|
||||||
item_data = row_item.data(0, QtCore.Qt.UserRole)
|
item_data = row_item.data(0, QtCore.Qt.UserRole)
|
||||||
if isinstance(item_data, ImageFilenames):
|
if isinstance(item_data, ImageFilenames):
|
||||||
delete_file(os.path.join(self.servicePath, row_item.text(0)))
|
delete_file(os.path.join(self.service_path, row_item.text(0)))
|
||||||
if item_data.group_id == 0:
|
if item_data.group_id == 0:
|
||||||
self.list_view.takeTopLevelItem(self.list_view.indexOfTopLevelItem(row_item))
|
self.list_view.takeTopLevelItem(self.list_view.indexOfTopLevelItem(row_item))
|
||||||
else:
|
else:
|
||||||
@ -339,7 +347,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
for imageFile in images:
|
for imageFile in images:
|
||||||
log.debug('Loading image: %s', imageFile.filename)
|
log.debug('Loading image: %s', imageFile.filename)
|
||||||
filename = os.path.split(imageFile.filename)[1]
|
filename = os.path.split(imageFile.filename)[1]
|
||||||
thumb = os.path.join(self.servicePath, filename)
|
thumb = os.path.join(self.service_path, filename)
|
||||||
if not os.path.exists(imageFile.filename):
|
if not os.path.exists(imageFile.filename):
|
||||||
icon = build_icon(':/general/general_delete.png')
|
icon = build_icon(':/general/general_delete.png')
|
||||||
else:
|
else:
|
||||||
@ -672,7 +680,16 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
translate('ImagePlugin.MediaItem', 'There was a problem replacing your background, '
|
translate('ImagePlugin.MediaItem', 'There was a problem replacing your background, '
|
||||||
'the image file "%s" no longer exists.') % filename)
|
'the image file "%s" no longer exists.') % filename)
|
||||||
|
|
||||||
def search(self, string, showError):
|
def search(self, string, show_error=True):
|
||||||
|
"""
|
||||||
|
Perform a search on the image file names.
|
||||||
|
|
||||||
|
``string``
|
||||||
|
The glob to search for
|
||||||
|
|
||||||
|
``show_error``
|
||||||
|
Unused.
|
||||||
|
"""
|
||||||
files = self.manager.get_all_objects(ImageFilenames, filter_clause=ImageFilenames.filename.contains(string),
|
files = self.manager.get_all_objects(ImageFilenames, filter_clause=ImageFilenames.filename.contains(string),
|
||||||
order_by_ref=ImageFilenames.filename)
|
order_by_ref=ImageFilenames.filename)
|
||||||
results = []
|
results = []
|
||||||
|
@ -61,10 +61,15 @@ class MediaMediaItem(MediaManagerItem):
|
|||||||
self.background = False
|
self.background = False
|
||||||
self.automatic = ''
|
self.automatic = ''
|
||||||
super(MediaMediaItem, self).__init__(parent, plugin)
|
super(MediaMediaItem, self).__init__(parent, plugin)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
self.single_service_item = False
|
self.single_service_item = False
|
||||||
self.has_search = True
|
self.has_search = True
|
||||||
self.media_object = None
|
self.media_object = None
|
||||||
self.display_controller = DisplayController(parent)
|
self.display_controller = DisplayController(self.parent())
|
||||||
self.display_controller.controller_layout = QtGui.QVBoxLayout()
|
self.display_controller.controller_layout = QtGui.QVBoxLayout()
|
||||||
self.media_controller.register_controller(self.display_controller)
|
self.media_controller.register_controller(self.display_controller)
|
||||||
self.media_controller.set_controls_visible(self.display_controller, False)
|
self.media_controller.set_controls_visible(self.display_controller, False)
|
||||||
|
@ -52,14 +52,26 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
"""
|
"""
|
||||||
log.info('Presentations Media Item loaded')
|
log.info('Presentations Media Item loaded')
|
||||||
|
|
||||||
def __init__(self, parent, plugin, icon, controllers):
|
def __init__(self, parent, plugin, controllers):
|
||||||
"""
|
"""
|
||||||
Constructor. Setup defaults
|
Constructor. Setup defaults
|
||||||
"""
|
"""
|
||||||
self.controllers = controllers
|
|
||||||
self.icon_path = 'presentations/presentation'
|
self.icon_path = 'presentations/presentation'
|
||||||
self.Automatic = ''
|
self.controllers = controllers
|
||||||
super(PresentationMediaItem, self).__init__(parent, plugin)
|
super(PresentationMediaItem, self).__init__(parent, plugin)
|
||||||
|
|
||||||
|
def retranslateUi(self):
|
||||||
|
"""
|
||||||
|
The name of the plugin media displayed in UI
|
||||||
|
"""
|
||||||
|
self.on_new_prompt = translate('PresentationPlugin.MediaItem', 'Select Presentation(s)')
|
||||||
|
self.automatic = translate('PresentationPlugin.MediaItem', 'Automatic')
|
||||||
|
self.display_type_label.setText(translate('PresentationPlugin.MediaItem', 'Present using:'))
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
self.message_listener = MessageListener(self)
|
self.message_listener = MessageListener(self)
|
||||||
self.has_search = True
|
self.has_search = True
|
||||||
self.single_service_item = False
|
self.single_service_item = False
|
||||||
@ -68,14 +80,6 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
# Allow DnD from the desktop
|
# Allow DnD from the desktop
|
||||||
self.list_view.activateDnD()
|
self.list_view.activateDnD()
|
||||||
|
|
||||||
def retranslateUi(self):
|
|
||||||
"""
|
|
||||||
The name of the plugin media displayed in UI
|
|
||||||
"""
|
|
||||||
self.on_new_prompt = translate('PresentationPlugin.MediaItem', 'Select Presentation(s)')
|
|
||||||
self.Automatic = translate('PresentationPlugin.MediaItem', 'Automatic')
|
|
||||||
self.display_type_label.setText(translate('PresentationPlugin.MediaItem', 'Present using:'))
|
|
||||||
|
|
||||||
def build_file_mask_string(self):
|
def build_file_mask_string(self):
|
||||||
"""
|
"""
|
||||||
Build the list of file extensions to be used in the Open file dialog.
|
Build the list of file extensions to be used in the Open file dialog.
|
||||||
@ -137,7 +141,7 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
if self.controllers[item].enabled():
|
if self.controllers[item].enabled():
|
||||||
self.display_type_combo_box.addItem(item)
|
self.display_type_combo_box.addItem(item)
|
||||||
if self.display_type_combo_box.count() > 1:
|
if self.display_type_combo_box.count() > 1:
|
||||||
self.display_type_combo_box.insertItem(0, self.Automatic)
|
self.display_type_combo_box.insertItem(0, self.automatic)
|
||||||
self.display_type_combo_box.setCurrentIndex(0)
|
self.display_type_combo_box.setCurrentIndex(0)
|
||||||
if Settings().value(self.settings_section + '/override app') == QtCore.Qt.Checked:
|
if Settings().value(self.settings_section + '/override app') == QtCore.Qt.Checked:
|
||||||
self.presentation_widget.show()
|
self.presentation_widget.show()
|
||||||
@ -253,7 +257,7 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
(path, name) = os.path.split(filename)
|
(path, name) = os.path.split(filename)
|
||||||
service_item.title = name
|
service_item.title = name
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
if service_item.processor == self.Automatic:
|
if service_item.processor == self.automatic:
|
||||||
service_item.processor = self.findControllerByType(filename)
|
service_item.processor = self.findControllerByType(filename)
|
||||||
if not service_item.processor:
|
if not service_item.processor:
|
||||||
return False
|
return False
|
||||||
|
@ -109,8 +109,7 @@ class PresentationPlugin(Plugin):
|
|||||||
"""
|
"""
|
||||||
Create the Media Manager List.
|
Create the Media Manager List.
|
||||||
"""
|
"""
|
||||||
self.media_item = PresentationMediaItem(
|
self.media_item = PresentationMediaItem(self.main_window.media_dock_manager.media_dock, self, self.controllers)
|
||||||
self.main_window.media_dock_manager.media_dock, self, self.icon, self.controllers)
|
|
||||||
|
|
||||||
def register_controllers(self, controller):
|
def register_controllers(self, controller):
|
||||||
"""
|
"""
|
||||||
|
@ -72,6 +72,11 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
def __init__(self, parent, plugin):
|
def __init__(self, parent, plugin):
|
||||||
self.icon_path = 'songs/song'
|
self.icon_path = 'songs/song'
|
||||||
super(SongMediaItem, self).__init__(parent, plugin)
|
super(SongMediaItem, self).__init__(parent, plugin)
|
||||||
|
|
||||||
|
def setup_item(self):
|
||||||
|
"""
|
||||||
|
Do some additional setup.
|
||||||
|
"""
|
||||||
self.single_service_item = False
|
self.single_service_item = False
|
||||||
# Holds information about whether the edit is remotely triggered and which Song is required.
|
# Holds information about whether the edit is remotely triggered and which Song is required.
|
||||||
self.remote_song = -1
|
self.remote_song = -1
|
||||||
|
@ -44,7 +44,7 @@ from distutils.version import LooseVersion
|
|||||||
try:
|
try:
|
||||||
import nose
|
import nose
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
nose = None
|
||||||
|
|
||||||
IS_WIN = sys.platform.startswith('win')
|
IS_WIN = sys.platform.startswith('win')
|
||||||
|
|
||||||
@ -90,21 +90,34 @@ MODULES = [
|
|||||||
|
|
||||||
|
|
||||||
OPTIONAL_MODULES = [
|
OPTIONAL_MODULES = [
|
||||||
('MySQLdb', ' (MySQL support)'),
|
('MySQLdb', '(MySQL support)', True),
|
||||||
('psycopg2', ' (PostgreSQL support)'),
|
('psycopg2', '(PostgreSQL support)', True),
|
||||||
('nose', ' (testing framework)'),
|
('nose', '(testing framework)', True),
|
||||||
('mock', ' (testing module)'),
|
('mock', '(testing module)', sys.version_info[1] < 3),
|
||||||
]
|
]
|
||||||
|
|
||||||
w = sys.stdout.write
|
w = sys.stdout.write
|
||||||
|
|
||||||
|
|
||||||
def check_vers(version, required, text):
|
def check_vers(version, required, text):
|
||||||
|
"""
|
||||||
|
Check the version of a dependency. Returns ``True`` if the version is greater than or equal, or False if less than.
|
||||||
|
|
||||||
|
``version``
|
||||||
|
The actual version of the dependency
|
||||||
|
|
||||||
|
``required``
|
||||||
|
The required version of the dependency
|
||||||
|
|
||||||
|
``text``
|
||||||
|
The dependency's name
|
||||||
|
"""
|
||||||
|
space = (27 - len(required) - len(text)) * ' '
|
||||||
if not isinstance(version, str):
|
if not isinstance(version, str):
|
||||||
version = '.'.join(map(str, version))
|
version = '.'.join(map(str, version))
|
||||||
if not isinstance(required, str):
|
if not isinstance(required, str):
|
||||||
required = '.'.join(map(str, required))
|
required = '.'.join(map(str, required))
|
||||||
w(' %s >= %s ... ' % (text, required))
|
w(' %s >= %s ... ' % (text, required) + space)
|
||||||
if LooseVersion(version) >= LooseVersion(required):
|
if LooseVersion(version) >= LooseVersion(required):
|
||||||
w(version + os.linesep)
|
w(version + os.linesep)
|
||||||
return True
|
return True
|
||||||
@ -113,6 +126,29 @@ def check_vers(version, required, text):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def check_module(mod, text='', indent=' '):
|
||||||
|
"""
|
||||||
|
Check that a module is installed.
|
||||||
|
|
||||||
|
``mod``
|
||||||
|
The module to check for.
|
||||||
|
|
||||||
|
``text``
|
||||||
|
The text to display.
|
||||||
|
|
||||||
|
``indent``
|
||||||
|
How much to indent the text by.
|
||||||
|
"""
|
||||||
|
space = (31 - len(mod) - len(text)) * ' '
|
||||||
|
w(indent + '%s %s... ' % (mod, text) + space)
|
||||||
|
try:
|
||||||
|
__import__(mod)
|
||||||
|
w('OK')
|
||||||
|
except ImportError:
|
||||||
|
w('FAIL')
|
||||||
|
w(os.linesep)
|
||||||
|
|
||||||
|
|
||||||
def print_vers_fail(required, text):
|
def print_vers_fail(required, text):
|
||||||
print(' %s >= %s ... FAIL' % (text, required))
|
print(' %s >= %s ... FAIL' % (text, required))
|
||||||
|
|
||||||
@ -143,18 +179,10 @@ def verify_versions():
|
|||||||
print_vers_fail(VERS['enchant'], 'enchant')
|
print_vers_fail(VERS['enchant'], 'enchant')
|
||||||
|
|
||||||
|
|
||||||
def check_module(mod, text='', indent=' '):
|
def print_enchant_backends_and_languages():
|
||||||
space = (30 - len(mod) - len(text)) * ' '
|
"""
|
||||||
w(indent + '%s%s... ' % (mod, text) + space)
|
Check if PyEnchant is installed.
|
||||||
try:
|
"""
|
||||||
__import__(mod)
|
|
||||||
w('OK')
|
|
||||||
except ImportError:
|
|
||||||
w('FAIL')
|
|
||||||
w(os.linesep)
|
|
||||||
|
|
||||||
|
|
||||||
def verify_pyenchant():
|
|
||||||
w('Enchant (spell checker)... ')
|
w('Enchant (spell checker)... ')
|
||||||
try:
|
try:
|
||||||
import enchant
|
import enchant
|
||||||
@ -167,14 +195,15 @@ def verify_pyenchant():
|
|||||||
w('FAIL' + os.linesep)
|
w('FAIL' + os.linesep)
|
||||||
|
|
||||||
|
|
||||||
def verify_pyqt():
|
def print_qt_image_formats():
|
||||||
|
"""
|
||||||
|
Print out the image formats that Qt4 supports.
|
||||||
|
"""
|
||||||
w('Qt4 image formats... ')
|
w('Qt4 image formats... ')
|
||||||
try:
|
try:
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtGui
|
||||||
read_f = ', '.join([str(format).lower()
|
read_f = ', '.join([bytes(fmt).decode().lower() for fmt in QtGui.QImageReader.supportedImageFormats()])
|
||||||
for format in QtGui.QImageReader.supportedImageFormats()])
|
write_f = ', '.join([bytes(fmt).decode().lower() for fmt in QtGui.QImageWriter.supportedImageFormats()])
|
||||||
write_f = ', '.join([str(format).lower()
|
|
||||||
for format in QtGui.QImageWriter.supportedImageFormats()])
|
|
||||||
w(os.linesep)
|
w(os.linesep)
|
||||||
print(' read: %s' % read_f)
|
print(' read: %s' % read_f)
|
||||||
print(' write: %s' % write_f)
|
print(' write: %s' % write_f)
|
||||||
@ -183,20 +212,25 @@ def verify_pyqt():
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
"""
|
||||||
|
Run the dependency checker.
|
||||||
|
"""
|
||||||
|
print('Checking Python version...')
|
||||||
verify_python()
|
verify_python()
|
||||||
print('Checking for modules...')
|
print('Checking for modules...')
|
||||||
for m in MODULES:
|
for m in MODULES:
|
||||||
check_module(m)
|
check_module(m)
|
||||||
print('Checking for optional modules...')
|
print('Checking for optional modules...')
|
||||||
for m in OPTIONAL_MODULES:
|
for m in OPTIONAL_MODULES:
|
||||||
|
if m[2]:
|
||||||
check_module(m[0], text=m[1])
|
check_module(m[0], text=m[1])
|
||||||
if IS_WIN:
|
if IS_WIN:
|
||||||
print('Checking for Windows specific modules...')
|
print('Checking for Windows specific modules...')
|
||||||
for m in WIN32_MODULES:
|
for m in WIN32_MODULES:
|
||||||
check_module(m)
|
check_module(m)
|
||||||
verify_versions()
|
verify_versions()
|
||||||
verify_pyqt()
|
print_qt_image_formats()
|
||||||
verify_pyenchant()
|
print_enchant_backends_and_languages()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
@ -7,7 +7,13 @@ sip.setapi('QTime', 2)
|
|||||||
sip.setapi('QUrl', 2)
|
sip.setapi('QUrl', 2)
|
||||||
sip.setapi('QVariant', 2)
|
sip.setapi('QVariant', 2)
|
||||||
|
|
||||||
|
import sys
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
|
if sys.version_info[1] >= 3:
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
else:
|
||||||
|
from mock import patch, MagicMock
|
||||||
|
|
||||||
# Only one QApplication can be created. Use QtGui.QApplication.instance() when you need to "create" a QApplication.
|
# Only one QApplication can be created. Use QtGui.QApplication.instance() when you need to "create" a QApplication.
|
||||||
application = QtGui.QApplication([])
|
application = QtGui.QApplication([])
|
||||||
|
@ -1,14 +1,42 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib package.
|
Package to test the openlp.core.lib package.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import MagicMock, patch
|
|
||||||
from sqlalchemy.pool import NullPool
|
from sqlalchemy.pool import NullPool
|
||||||
from sqlalchemy.orm.scoping import ScopedSession
|
from sqlalchemy.orm.scoping import ScopedSession
|
||||||
from sqlalchemy import MetaData
|
from sqlalchemy import MetaData
|
||||||
|
|
||||||
from openlp.core.lib.db import init_db, get_upgrade_op
|
from openlp.core.lib.db import init_db, get_upgrade_op
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestDB(TestCase):
|
class TestDB(TestCase):
|
||||||
|
@ -1,12 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib.formattingtags package.
|
Package to test the openlp.core.lib.formattingtags package.
|
||||||
"""
|
"""
|
||||||
import copy
|
import copy
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch
|
|
||||||
|
|
||||||
from openlp.core.lib import FormattingTags
|
from openlp.core.lib import FormattingTags
|
||||||
|
from tests.functional import patch
|
||||||
|
|
||||||
|
|
||||||
TAG = {
|
TAG = {
|
||||||
|
@ -1,15 +1,41 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 package.
|
Package to test the openlp.core.ui package.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Registry, ImageManager, ScreenList
|
from openlp.core.lib import Registry, ImageManager, ScreenList
|
||||||
|
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib package.
|
Package to test the openlp.core.lib package.
|
||||||
"""
|
"""
|
||||||
@ -6,22 +34,20 @@ import os
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from mock import MagicMock, patch
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import str_to_bool, create_thumb, translate, check_directory_exists, get_text_file_string, \
|
from openlp.core.lib import str_to_bool, create_thumb, translate, check_directory_exists, get_text_file_string, \
|
||||||
build_icon, image_to_byte, check_item_selected, validate_thumb, create_separated_list, clean_tags, expand_tags
|
build_icon, image_to_byte, check_item_selected, validate_thumb, create_separated_list, clean_tags, expand_tags
|
||||||
|
from tests.functional import MagicMock, patch
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TestLib(TestCase):
|
class TestLib(TestCase):
|
||||||
|
|
||||||
def str_to_bool_with_bool_test(self):
|
def str_to_bool_with_bool_true_test(self):
|
||||||
"""
|
"""
|
||||||
Test the str_to_bool function with boolean input
|
Test the str_to_bool function with boolean input of True
|
||||||
"""
|
"""
|
||||||
# GIVEN: A boolean value set to true
|
# GIVEN: A boolean value set to true
|
||||||
true_boolean = True
|
true_boolean = True
|
||||||
@ -30,9 +56,13 @@ class TestLib(TestCase):
|
|||||||
true_result = str_to_bool(true_boolean)
|
true_result = str_to_bool(true_boolean)
|
||||||
|
|
||||||
# THEN: We should get back a True bool
|
# THEN: We should get back a True bool
|
||||||
assert isinstance(true_result, bool), 'The result should be a boolean'
|
self.assertIsInstance(true_result, bool, 'The result should be a boolean')
|
||||||
assert true_result is True, 'The result should be True'
|
self.assertTrue(true_result, 'The result should be True')
|
||||||
|
|
||||||
|
def str_to_bool_with_bool_false_test(self):
|
||||||
|
"""
|
||||||
|
Test the str_to_bool function with boolean input of False
|
||||||
|
"""
|
||||||
# GIVEN: A boolean value set to false
|
# GIVEN: A boolean value set to false
|
||||||
false_boolean = False
|
false_boolean = False
|
||||||
|
|
||||||
@ -40,12 +70,12 @@ class TestLib(TestCase):
|
|||||||
false_result = str_to_bool(false_boolean)
|
false_result = str_to_bool(false_boolean)
|
||||||
|
|
||||||
# THEN: We should get back a True bool
|
# THEN: We should get back a True bool
|
||||||
assert isinstance(false_result, bool), 'The result should be a boolean'
|
self.assertIsInstance(false_result, bool, 'The result should be a boolean')
|
||||||
assert false_result is False, 'The result should be True'
|
self.assertFalse(false_result, 'The result should be True')
|
||||||
|
|
||||||
def str_to_bool_with_invalid_test(self):
|
def str_to_bool_with_integer_test(self):
|
||||||
"""
|
"""
|
||||||
Test the str_to_bool function with a set of invalid inputs
|
Test the str_to_bool function with an integer input
|
||||||
"""
|
"""
|
||||||
# GIVEN: An integer value
|
# GIVEN: An integer value
|
||||||
int_string = 1
|
int_string = 1
|
||||||
@ -54,8 +84,12 @@ class TestLib(TestCase):
|
|||||||
int_result = str_to_bool(int_string)
|
int_result = str_to_bool(int_string)
|
||||||
|
|
||||||
# THEN: we should get back a false
|
# THEN: we should get back a false
|
||||||
assert int_result is False, 'The result should be False'
|
self.assertFalse(int_result, 'The result should be False')
|
||||||
|
|
||||||
|
def str_to_bool_with_invalid_string_test(self):
|
||||||
|
"""
|
||||||
|
Test the str_to_bool function with an invalid string
|
||||||
|
"""
|
||||||
# GIVEN: An string value with completely invalid input
|
# GIVEN: An string value with completely invalid input
|
||||||
invalid_string = 'my feet are wet'
|
invalid_string = 'my feet are wet'
|
||||||
|
|
||||||
@ -63,11 +97,11 @@ class TestLib(TestCase):
|
|||||||
str_result = str_to_bool(invalid_string)
|
str_result = str_to_bool(invalid_string)
|
||||||
|
|
||||||
# THEN: we should get back a false
|
# THEN: we should get back a false
|
||||||
assert str_result is False, 'The result should be False'
|
self.assertFalse(str_result, 'The result should be False')
|
||||||
|
|
||||||
def str_to_bool_with_false_values_test(self):
|
def str_to_bool_with_string_false_test(self):
|
||||||
"""
|
"""
|
||||||
Test the str_to_bool function with a set of false inputs
|
Test the str_to_bool function with a string saying "false"
|
||||||
"""
|
"""
|
||||||
# GIVEN: A string set to "false"
|
# GIVEN: A string set to "false"
|
||||||
false_string = 'false'
|
false_string = 'false'
|
||||||
@ -76,8 +110,12 @@ class TestLib(TestCase):
|
|||||||
false_result = str_to_bool(false_string)
|
false_result = str_to_bool(false_string)
|
||||||
|
|
||||||
# THEN: we should get back a false
|
# THEN: we should get back a false
|
||||||
assert false_result is False, 'The result should be False'
|
self.assertFalse(false_result, 'The result should be False')
|
||||||
|
|
||||||
|
def str_to_bool_with_string_no_test(self):
|
||||||
|
"""
|
||||||
|
Test the str_to_bool function with a string saying "NO"
|
||||||
|
"""
|
||||||
# GIVEN: An string set to "NO"
|
# GIVEN: An string set to "NO"
|
||||||
no_string = 'NO'
|
no_string = 'NO'
|
||||||
|
|
||||||
@ -85,11 +123,11 @@ class TestLib(TestCase):
|
|||||||
str_result = str_to_bool(no_string)
|
str_result = str_to_bool(no_string)
|
||||||
|
|
||||||
# THEN: we should get back a false
|
# THEN: we should get back a false
|
||||||
assert str_result is False, 'The result should be False'
|
self.assertFalse(str_result, 'The result should be False')
|
||||||
|
|
||||||
def str_to_bool_with_true_values_test(self):
|
def str_to_bool_with_true_string_value_test(self):
|
||||||
"""
|
"""
|
||||||
Test the str_to_bool function with a set of true inputs
|
Test the str_to_bool function with a string set to "True"
|
||||||
"""
|
"""
|
||||||
# GIVEN: A string set to "True"
|
# GIVEN: A string set to "True"
|
||||||
true_string = 'True'
|
true_string = 'True'
|
||||||
@ -98,8 +136,12 @@ class TestLib(TestCase):
|
|||||||
true_result = str_to_bool(true_string)
|
true_result = str_to_bool(true_string)
|
||||||
|
|
||||||
# THEN: we should get back a true
|
# THEN: we should get back a true
|
||||||
assert true_result is True, 'The result should be True'
|
self.assertTrue(true_result, 'The result should be True')
|
||||||
|
|
||||||
|
def str_to_bool_with_yes_string_value_test(self):
|
||||||
|
"""
|
||||||
|
Test the str_to_bool function with a string set to "yes"
|
||||||
|
"""
|
||||||
# GIVEN: An string set to "yes"
|
# GIVEN: An string set to "yes"
|
||||||
yes_string = 'yes'
|
yes_string = 'yes'
|
||||||
|
|
||||||
@ -107,7 +149,7 @@ class TestLib(TestCase):
|
|||||||
str_result = str_to_bool(yes_string)
|
str_result = str_to_bool(yes_string)
|
||||||
|
|
||||||
# THEN: we should get back a true
|
# THEN: we should get back a true
|
||||||
assert str_result is True, 'The result should be True'
|
self.assertTrue(str_result, 'The result should be True')
|
||||||
|
|
||||||
def translate_test(self):
|
def translate_test(self):
|
||||||
"""
|
"""
|
||||||
@ -126,7 +168,7 @@ class TestLib(TestCase):
|
|||||||
|
|
||||||
# THEN: the translated string should be returned, and the mocked function should have been called
|
# THEN: the translated string should be returned, and the mocked function should have been called
|
||||||
mocked_translate.assert_called_with(context, text, comment, encoding, n)
|
mocked_translate.assert_called_with(context, text, comment, encoding, n)
|
||||||
assert result == 'Translated string', 'The translated string should have been returned'
|
self.assertEqual('Translated string', result, 'The translated string should have been returned')
|
||||||
|
|
||||||
def check_directory_exists_test(self):
|
def check_directory_exists_test(self):
|
||||||
"""
|
"""
|
||||||
@ -143,7 +185,7 @@ class TestLib(TestCase):
|
|||||||
|
|
||||||
# THEN: Only os.path.exists should have been called
|
# THEN: Only os.path.exists should have been called
|
||||||
mocked_exists.assert_called_with(directory_to_check)
|
mocked_exists.assert_called_with(directory_to_check)
|
||||||
assert not mocked_makedirs.called, 'os.makedirs should not have been called'
|
self.assertIsNot(mocked_makedirs.called, 'os.makedirs should not have been called')
|
||||||
|
|
||||||
# WHEN: os.path.exists returns False and we check the directory exists
|
# WHEN: os.path.exists returns False and we check the directory exists
|
||||||
mocked_exists.return_value = False
|
mocked_exists.return_value = False
|
||||||
@ -181,13 +223,14 @@ class TestLib(TestCase):
|
|||||||
|
|
||||||
# THEN: The result should be False
|
# THEN: The result should be False
|
||||||
mocked_isfile.assert_called_with(filename)
|
mocked_isfile.assert_called_with(filename)
|
||||||
assert result is False, 'False should be returned if no file exists'
|
self.assertFalse(result, 'False should be returned if no file exists')
|
||||||
|
|
||||||
def get_text_file_string_read_error_test(self):
|
def get_text_file_string_read_error_test(self):
|
||||||
"""
|
"""
|
||||||
Test the get_text_file_string() method when a read error happens
|
Test the get_text_file_string() method when a read error happens
|
||||||
"""
|
"""
|
||||||
with patch('openlp.core.lib.os.path.isfile') as mocked_isfile, patch('openlp.core.lib.open', create=True) as mocked_open:
|
with patch('openlp.core.lib.os.path.isfile') as mocked_isfile, \
|
||||||
|
patch('openlp.core.lib.open', create=True) as mocked_open:
|
||||||
# GIVEN: A mocked-out open() which raises an exception and isfile returns True
|
# GIVEN: A mocked-out open() which raises an exception and isfile returns True
|
||||||
filename = 'testfile.txt'
|
filename = 'testfile.txt'
|
||||||
mocked_isfile.return_value = True
|
mocked_isfile.return_value = True
|
||||||
@ -199,13 +242,13 @@ class TestLib(TestCase):
|
|||||||
# THEN: None should be returned
|
# THEN: None should be returned
|
||||||
mocked_isfile.assert_called_with(filename)
|
mocked_isfile.assert_called_with(filename)
|
||||||
mocked_open.assert_called_with(filename, 'r')
|
mocked_open.assert_called_with(filename, 'r')
|
||||||
assert result is None, 'None should be returned if the file cannot be opened'
|
self.assertIsNone(result, 'None should be returned if the file cannot be opened')
|
||||||
|
|
||||||
def get_text_file_string_decode_error_test(self):
|
def get_text_file_string_decode_error_test(self):
|
||||||
"""
|
"""
|
||||||
Test the get_text_file_string() method when the contents cannot be decoded
|
Test the get_text_file_string() method when the contents cannot be decoded
|
||||||
"""
|
"""
|
||||||
assert True, 'Impossible to test due to conflicts when mocking out the "open" function'
|
self.skipTest('Impossible to test due to conflicts when mocking out the "open" function')
|
||||||
|
|
||||||
def build_icon_with_qicon_test(self):
|
def build_icon_with_qicon_test(self):
|
||||||
"""
|
"""
|
||||||
@ -220,7 +263,7 @@ class TestLib(TestCase):
|
|||||||
result = build_icon(mocked_icon)
|
result = build_icon(mocked_icon)
|
||||||
|
|
||||||
# THEN: The result should be our mocked QIcon
|
# THEN: The result should be our mocked QIcon
|
||||||
assert result is mocked_icon, 'The result should be the mocked QIcon'
|
self.assertIs(mocked_icon, result, 'The result should be the mocked QIcon')
|
||||||
|
|
||||||
def build_icon_with_resource_test(self):
|
def build_icon_with_resource_test(self):
|
||||||
"""
|
"""
|
||||||
@ -242,7 +285,7 @@ class TestLib(TestCase):
|
|||||||
MockedQPixmap.assert_called_with(resource_uri)
|
MockedQPixmap.assert_called_with(resource_uri)
|
||||||
# There really should be more assert statements here but due to type checking and things they all break. The
|
# There really should be more assert statements here but due to type checking and things they all break. The
|
||||||
# best we can do is to assert that we get back a MagicMock object.
|
# best we can do is to assert that we get back a MagicMock object.
|
||||||
assert isinstance(result, MagicMock), 'The result should be a MagicMock, because we mocked it out'
|
self.assertIsInstance(result, MagicMock, 'The result should be a MagicMock, because we mocked it out')
|
||||||
|
|
||||||
def image_to_byte_test(self):
|
def image_to_byte_test(self):
|
||||||
"""
|
"""
|
||||||
@ -267,7 +310,8 @@ class TestLib(TestCase):
|
|||||||
mocked_buffer.open.assert_called_with('writeonly')
|
mocked_buffer.open.assert_called_with('writeonly')
|
||||||
mocked_image.save.assert_called_with(mocked_buffer, "PNG")
|
mocked_image.save.assert_called_with(mocked_buffer, "PNG")
|
||||||
mocked_byte_array.toBase64.assert_called_with()
|
mocked_byte_array.toBase64.assert_called_with()
|
||||||
assert result == 'base64mock', 'The result should be the return value of the mocked out base64 method'
|
self.assertEqual('base64mock', result,
|
||||||
|
'The result should be the return value of the mocked out base64 method')
|
||||||
|
|
||||||
def create_thumb_with_size_test(self):
|
def create_thumb_with_size_test(self):
|
||||||
"""
|
"""
|
||||||
@ -286,16 +330,16 @@ class TestLib(TestCase):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
# Only continue when the thumb does not exist.
|
# Only continue when the thumb does not exist.
|
||||||
assert not os.path.exists(thumb_path), 'Test was not ran, because the thumb already exists.'
|
self.assertFalse(os.path.exists(thumb_path), 'Test was not run, because the thumb already exists.')
|
||||||
|
|
||||||
# WHEN: Create the thumb.
|
# WHEN: Create the thumb.
|
||||||
icon = create_thumb(image_path, thumb_path, size=thumb_size)
|
icon = create_thumb(image_path, thumb_path, size=thumb_size)
|
||||||
|
|
||||||
# THEN: Check if the thumb was created.
|
# THEN: Check if the thumb was created.
|
||||||
assert os.path.exists(thumb_path), 'Test was not ran, because the thumb already exists.'
|
self.assertTrue(os.path.exists(thumb_path), 'Test was not ran, because the thumb already exists')
|
||||||
assert isinstance(icon, QtGui.QIcon), 'The icon should be a QIcon.'
|
self.assertIsInstance(icon, QtGui.QIcon, 'The icon should be a QIcon')
|
||||||
assert not icon.isNull(), 'The icon should not be null.'
|
self.assertFalse(icon.isNull(), 'The icon should not be null')
|
||||||
assert QtGui.QImageReader(thumb_path).size() == thumb_size, 'The thumb should have the given size.'
|
self.assertEqual(thumb_size, QtGui.QImageReader(thumb_path).size(), 'The thumb should have the given size')
|
||||||
|
|
||||||
# Remove the thumb so that the test actually tests if the thumb will be created.
|
# Remove the thumb so that the test actually tests if the thumb will be created.
|
||||||
try:
|
try:
|
||||||
@ -318,7 +362,7 @@ class TestLib(TestCase):
|
|||||||
|
|
||||||
# THEN: The selectedIndexes function should have been called and the result should be true
|
# THEN: The selectedIndexes function should have been called and the result should be true
|
||||||
mocked_list_widget.selectedIndexes.assert_called_with()
|
mocked_list_widget.selectedIndexes.assert_called_with()
|
||||||
assert result, 'The result should be True'
|
self.assertTrue(result, 'The result should be True')
|
||||||
|
|
||||||
def check_item_selected_false_test(self):
|
def check_item_selected_false_test(self):
|
||||||
"""
|
"""
|
||||||
@ -339,7 +383,7 @@ class TestLib(TestCase):
|
|||||||
# THEN: The selectedIndexes function should have been called and the result should be true
|
# THEN: The selectedIndexes function should have been called and the result should be true
|
||||||
mocked_list_widget.selectedIndexes.assert_called_with()
|
mocked_list_widget.selectedIndexes.assert_called_with()
|
||||||
MockedQtGui.QMessageBox.information.assert_called_with('parent', 'mocked translate', 'message')
|
MockedQtGui.QMessageBox.information.assert_called_with('parent', 'mocked translate', 'message')
|
||||||
assert not result, 'The result should be False'
|
self.assertFalse(result, 'The result should be False')
|
||||||
|
|
||||||
def clean_tags_test(self):
|
def clean_tags_test(self):
|
||||||
"""
|
"""
|
||||||
@ -361,7 +405,7 @@ class TestLib(TestCase):
|
|||||||
result_string = clean_tags(string_to_pass)
|
result_string = clean_tags(string_to_pass)
|
||||||
|
|
||||||
# THEN: The strings should be identical.
|
# THEN: The strings should be identical.
|
||||||
assert result_string == wanted_string, 'The strings should be identical.'
|
self.assertEqual(wanted_string, result_string, 'The strings should be identical')
|
||||||
|
|
||||||
def expand_tags_test(self):
|
def expand_tags_test(self):
|
||||||
"""
|
"""
|
||||||
@ -400,7 +444,7 @@ class TestLib(TestCase):
|
|||||||
result_string = expand_tags(string_to_pass)
|
result_string = expand_tags(string_to_pass)
|
||||||
|
|
||||||
# THEN: The strings should be identical.
|
# THEN: The strings should be identical.
|
||||||
assert result_string == wanted_string, 'The strings should be identical.'
|
self.assertEqual(wanted_string, result_string, 'The strings should be identical.')
|
||||||
|
|
||||||
def validate_thumb_file_does_not_exist_test(self):
|
def validate_thumb_file_does_not_exist_test(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,12 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib.pluginmanager package.
|
Package to test the openlp.core.lib.pluginmanager package.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import MagicMock
|
|
||||||
|
|
||||||
from openlp.core.lib.pluginmanager import PluginManager
|
from openlp.core.lib.pluginmanager import PluginManager
|
||||||
from openlp.core.lib import Settings, Registry, PluginStatus
|
from openlp.core.lib import Settings, Registry, PluginStatus
|
||||||
|
from tests.functional import MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestPluginManager(TestCase):
|
class TestPluginManager(TestCase):
|
||||||
@ -42,8 +69,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_media_manager()
|
plugin_manager.hook_media_manager()
|
||||||
|
|
||||||
# THEN: The create_media_manager_item() method should have been called
|
# THEN: The create_media_manager_item() method should have been called
|
||||||
assert mocked_plugin.create_media_manager_item.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.create_media_manager_item.call_count,
|
||||||
'The create_media_manager_item() method should not have been called.'
|
'The create_media_manager_item() method should not have been called.')
|
||||||
|
|
||||||
def hook_media_manager_with_active_plugin_test(self):
|
def hook_media_manager_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -75,8 +102,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_settings_tabs()
|
plugin_manager.hook_settings_tabs()
|
||||||
|
|
||||||
# THEN: The hook_settings_tabs() method should have been called
|
# THEN: The hook_settings_tabs() method should have been called
|
||||||
assert mocked_plugin.create_media_manager_item.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.create_media_manager_item.call_count,
|
||||||
'The create_media_manager_item() method should not have been called.'
|
'The create_media_manager_item() method should not have been called.')
|
||||||
|
|
||||||
def hook_settings_tabs_with_disabled_plugin_and_mocked_form_test(self):
|
def hook_settings_tabs_with_disabled_plugin_and_mocked_form_test(self):
|
||||||
"""
|
"""
|
||||||
@ -95,8 +122,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_settings_tabs()
|
plugin_manager.hook_settings_tabs()
|
||||||
|
|
||||||
# THEN: The create_settings_tab() method should not have been called, but the plugins lists should be the same
|
# THEN: The create_settings_tab() method should not have been called, but the plugins lists should be the same
|
||||||
assert mocked_plugin.create_settings_tab.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.create_settings_tab.call_count,
|
||||||
'The create_media_manager_item() method should not have been called.'
|
'The create_media_manager_item() method should not have been called.')
|
||||||
self.assertEqual(mocked_settings_form.plugin_manager.plugins, plugin_manager.plugins,
|
self.assertEqual(mocked_settings_form.plugin_manager.plugins, plugin_manager.plugins,
|
||||||
'The plugins on the settings form should be the same as the plugins in the plugin manager')
|
'The plugins on the settings form should be the same as the plugins in the plugin manager')
|
||||||
|
|
||||||
@ -117,9 +144,9 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_settings_tabs()
|
plugin_manager.hook_settings_tabs()
|
||||||
|
|
||||||
# THEN: The create_media_manager_item() method should have been called with the mocked settings form
|
# THEN: The create_media_manager_item() method should have been called with the mocked settings form
|
||||||
assert mocked_plugin.create_settings_tab.call_count == 1, \
|
self.assertEqual(1, mocked_plugin.create_settings_tab.call_count,
|
||||||
'The create_media_manager_item() method should have been called once.'
|
'The create_media_manager_item() method should have been called once.')
|
||||||
self.assertEqual(mocked_settings_form.plugin_manager.plugins, plugin_manager.plugins,
|
self.assertEqual(plugin_manager.plugins, mocked_settings_form.plugin_manager.plugins,
|
||||||
'The plugins on the settings form should be the same as the plugins in the plugin manager')
|
'The plugins on the settings form should be the same as the plugins in the plugin manager')
|
||||||
|
|
||||||
def hook_settings_tabs_with_active_plugin_and_no_form_test(self):
|
def hook_settings_tabs_with_active_plugin_and_no_form_test(self):
|
||||||
@ -152,8 +179,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_import_menu()
|
plugin_manager.hook_import_menu()
|
||||||
|
|
||||||
# THEN: The create_media_manager_item() method should have been called
|
# THEN: The create_media_manager_item() method should have been called
|
||||||
assert mocked_plugin.add_import_menu_item.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.add_import_menu_item.call_count,
|
||||||
'The add_import_menu_item() method should not have been called.'
|
'The add_import_menu_item() method should not have been called.')
|
||||||
|
|
||||||
def hook_import_menu_with_active_plugin_test(self):
|
def hook_import_menu_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -185,8 +212,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_export_menu()
|
plugin_manager.hook_export_menu()
|
||||||
|
|
||||||
# THEN: The add_export_menu_Item() method should not have been called
|
# THEN: The add_export_menu_Item() method should not have been called
|
||||||
assert mocked_plugin.add_export_menu_Item.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.add_export_menu_Item.call_count,
|
||||||
'The add_export_menu_Item() method should not have been called.'
|
'The add_export_menu_Item() method should not have been called.')
|
||||||
|
|
||||||
def hook_export_menu_with_active_plugin_test(self):
|
def hook_export_menu_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -219,8 +246,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_upgrade_plugin_settings(settings)
|
plugin_manager.hook_upgrade_plugin_settings(settings)
|
||||||
|
|
||||||
# THEN: The upgrade_settings() method should not have been called
|
# THEN: The upgrade_settings() method should not have been called
|
||||||
assert mocked_plugin.upgrade_settings.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.upgrade_settings.call_count,
|
||||||
'The upgrade_settings() method should not have been called.'
|
'The upgrade_settings() method should not have been called.')
|
||||||
|
|
||||||
def hook_upgrade_plugin_settings_with_active_plugin_test(self):
|
def hook_upgrade_plugin_settings_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -253,8 +280,8 @@ class TestPluginManager(TestCase):
|
|||||||
plugin_manager.hook_tools_menu()
|
plugin_manager.hook_tools_menu()
|
||||||
|
|
||||||
# THEN: The add_tools_menu_item() method should have been called
|
# THEN: The add_tools_menu_item() method should have been called
|
||||||
assert mocked_plugin.add_tools_menu_item.call_count == 0, \
|
self.assertEqual(0, mocked_plugin.add_tools_menu_item.call_count,
|
||||||
'The add_tools_menu_item() method should not have been called.'
|
'The add_tools_menu_item() method should not have been called.')
|
||||||
|
|
||||||
def hook_tools_menu_with_active_plugin_test(self):
|
def hook_tools_menu_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -288,7 +315,7 @@ class TestPluginManager(TestCase):
|
|||||||
|
|
||||||
# THEN: The is_active() method should have been called, and initialise() method should NOT have been called
|
# THEN: The is_active() method should have been called, and initialise() method should NOT have been called
|
||||||
mocked_plugin.is_active.assert_called_with()
|
mocked_plugin.is_active.assert_called_with()
|
||||||
assert mocked_plugin.initialise.call_count == 0, 'The initialise() method should not have been called.'
|
self.assertEqual(0, mocked_plugin.initialise.call_count, 'The initialise() method should not have been called.')
|
||||||
|
|
||||||
def initialise_plugins_with_active_plugin_test(self):
|
def initialise_plugins_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -324,7 +351,7 @@ class TestPluginManager(TestCase):
|
|||||||
|
|
||||||
# THEN: The is_active() method should have been called, and initialise() method should NOT have been called
|
# THEN: The is_active() method should have been called, and initialise() method should NOT have been called
|
||||||
mocked_plugin.is_active.assert_called_with()
|
mocked_plugin.is_active.assert_called_with()
|
||||||
assert mocked_plugin.finalise.call_count == 0, 'The finalise() method should not have been called.'
|
self.assertEqual(0, mocked_plugin.finalise.call_count, 'The finalise() method should not have been called.')
|
||||||
|
|
||||||
def finalise_plugins_with_active_plugin_test(self):
|
def finalise_plugins_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
@ -392,8 +419,8 @@ class TestPluginManager(TestCase):
|
|||||||
|
|
||||||
# THEN: The isActive() method should have been called, and initialise() method should NOT have been called
|
# THEN: The isActive() method should have been called, and initialise() method should NOT have been called
|
||||||
mocked_plugin.is_active.assert_called_with()
|
mocked_plugin.is_active.assert_called_with()
|
||||||
assert mocked_plugin.new_service_created.call_count == 0,\
|
self.assertEqual(0, mocked_plugin.new_service_created.call_count,
|
||||||
'The new_service_created() method should not have been called.'
|
'The new_service_created() method should not have been called.')
|
||||||
|
|
||||||
def new_service_created_with_active_plugin_test(self):
|
def new_service_created_with_active_plugin_test(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,12 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib package.
|
Package to test the openlp.core.lib package.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import MagicMock
|
|
||||||
|
|
||||||
from openlp.core.lib import Registry
|
from openlp.core.lib import Registry
|
||||||
|
from tests.functional import MagicMock
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
||||||
|
|
||||||
|
@ -1,14 +1,40 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib.screenlist package.
|
Package to test the openlp.core.lib.screenlist package.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import MagicMock
|
|
||||||
from PyQt4 import QtGui, QtCore
|
from PyQt4 import QtGui, QtCore
|
||||||
|
|
||||||
from openlp.core.lib import Registry, ScreenList
|
from openlp.core.lib import Registry, ScreenList
|
||||||
|
from tests.functional import MagicMock
|
||||||
|
|
||||||
SCREEN = {
|
SCREEN = {
|
||||||
'primary': False,
|
'primary': False,
|
||||||
@ -55,5 +81,6 @@ class TestScreenList(TestCase):
|
|||||||
|
|
||||||
# THEN: The screen should have been added and the screens should be identical
|
# THEN: The screen should have been added and the screens should be identical
|
||||||
new_screen_count = len(self.screens.screen_list)
|
new_screen_count = len(self.screens.screen_list)
|
||||||
assert old_screen_count + 1 == new_screen_count, 'The new_screens list should be bigger'
|
self.assertEqual(old_screen_count + 1, new_screen_count, 'The new_screens list should be bigger')
|
||||||
assert SCREEN == self.screens.screen_list.pop(), 'The 2nd screen should be identical to the first screen'
|
self.assertEqual(SCREEN, self.screens.screen_list.pop(),
|
||||||
|
'The 2nd screen should be identical to the first screen')
|
||||||
|
@ -1,16 +1,40 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib package.
|
Package to test the openlp.core.lib package.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import json
|
|
||||||
import tempfile
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from mock import MagicMock, patch
|
|
||||||
|
|
||||||
from openlp.core.lib import ItemCapabilities, ServiceItem, Registry
|
from openlp.core.lib import ItemCapabilities, ServiceItem, Registry
|
||||||
from lxml import objectify, etree
|
from tests.functional import MagicMock, patch
|
||||||
|
from tests.utils import assert_length, convert_file_service_item
|
||||||
|
|
||||||
VERSE = 'The Lord said to {r}Noah{/r}: \n'\
|
VERSE = 'The Lord said to {r}Noah{/r}: \n'\
|
||||||
'There\'s gonna be a {su}floody{/su}, {sb}floody{/sb}\n'\
|
'There\'s gonna be a {su}floody{/su}, {sb}floody{/sb}\n'\
|
||||||
@ -20,7 +44,6 @@ VERSE = 'The Lord said to {r}Noah{/r}: \n'\
|
|||||||
'{r}C{/r}{b}h{/b}{bl}i{/bl}{y}l{/y}{g}d{/g}{pk}'\
|
'{r}C{/r}{b}h{/b}{bl}i{/bl}{y}l{/y}{g}d{/g}{pk}'\
|
||||||
'r{/pk}{o}e{/o}{pp}n{/pp} of the Lord\n'
|
'r{/pk}{o}e{/o}{pp}n{/pp} of the Lord\n'
|
||||||
FOOTER = ['Arky Arky (Unknown)', 'Public Domain', 'CCLI 123456']
|
FOOTER = ['Arky Arky (Unknown)', 'Public Domain', 'CCLI 123456']
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'resources'))
|
||||||
|
|
||||||
|
|
||||||
@ -36,7 +59,7 @@ class TestServiceItem(TestCase):
|
|||||||
Registry().register('renderer', mocked_renderer)
|
Registry().register('renderer', mocked_renderer)
|
||||||
Registry().register('image_manager', MagicMock())
|
Registry().register('image_manager', MagicMock())
|
||||||
|
|
||||||
def serviceitem_basic_test(self):
|
def service_item_basic_test(self):
|
||||||
"""
|
"""
|
||||||
Test the Service Item - basic test
|
Test the Service Item - basic test
|
||||||
"""
|
"""
|
||||||
@ -46,10 +69,10 @@ class TestServiceItem(TestCase):
|
|||||||
service_item = ServiceItem(None)
|
service_item = ServiceItem(None)
|
||||||
|
|
||||||
# THEN: We should get back a valid service item
|
# THEN: We should get back a valid service item
|
||||||
assert service_item.is_valid is True, 'The new service item should be valid'
|
self.assertTrue(service_item.is_valid, 'The new service item should be valid')
|
||||||
assert service_item.missing_frames() is True, 'There should not be any frames in the service item'
|
self.assertTrue(service_item.missing_frames(), 'There should not be any frames in the service item')
|
||||||
|
|
||||||
def serviceitem_load_custom_from_service_test(self):
|
def service_item_load_custom_from_service_test(self):
|
||||||
"""
|
"""
|
||||||
Test the Service Item - adding a custom slide from a saved service
|
Test the Service Item - adding a custom slide from a saved service
|
||||||
"""
|
"""
|
||||||
@ -57,24 +80,29 @@ class TestServiceItem(TestCase):
|
|||||||
service_item = ServiceItem(None)
|
service_item = ServiceItem(None)
|
||||||
service_item.add_icon = MagicMock()
|
service_item.add_icon = MagicMock()
|
||||||
|
|
||||||
# WHEN: adding a custom from a saved Service
|
# WHEN: We add a custom from a saved service
|
||||||
line = self.convert_file_service_item('serviceitem_custom_1.osj')
|
line = convert_file_service_item(TEST_PATH, 'serviceitem_custom_1.osj')
|
||||||
service_item.set_from_service(line)
|
service_item.set_from_service(line)
|
||||||
|
|
||||||
# THEN: We should get back a valid service item
|
# THEN: We should get back a valid service item
|
||||||
assert service_item.is_valid is True, 'The new service item should be valid'
|
self.assertTrue(service_item.is_valid, 'The new service item should be valid')
|
||||||
assert len(service_item._display_frames) == 0, 'The service item should have no display frames'
|
assert_length(0, service_item._display_frames, 'The service item should have no display frames')
|
||||||
assert len(service_item.capabilities) == 5, 'There should be 5 default custom item capabilities'
|
assert_length(5, service_item.capabilities, 'There should be 5 default custom item capabilities')
|
||||||
service_item.render(True)
|
|
||||||
assert service_item.get_display_title() == 'Test Custom', 'The title should be "Test Custom"'
|
|
||||||
assert service_item.get_frames()[0]['text'] == VERSE[:-1], \
|
|
||||||
'The returned text matches the input, except the last line feed'
|
|
||||||
assert service_item.get_rendered_frame(1) == VERSE.split('\n', 1)[0], 'The first line has been returned'
|
|
||||||
assert service_item.get_frame_title(0) == 'Slide 1', '"Slide 1" has been returned as the title'
|
|
||||||
assert service_item.get_frame_title(1) == 'Slide 2', '"Slide 2" has been returned as the title'
|
|
||||||
assert service_item.get_frame_title(2) == '', 'Blank has been returned as the title of slide 3'
|
|
||||||
|
|
||||||
def serviceitem_load_image_from_service_test(self):
|
# WHEN: We render the frames of the service item
|
||||||
|
service_item.render(True)
|
||||||
|
|
||||||
|
# THEN: The frames should also be valid
|
||||||
|
self.assertEqual('Test Custom', service_item.get_display_title(), 'The title should be "Test Custom"')
|
||||||
|
self.assertEqual(VERSE[:-1], service_item.get_frames()[0]['text'],
|
||||||
|
'The returned text matches the input, except the last line feed')
|
||||||
|
self.assertEqual(VERSE.split('\n', 1)[0], service_item.get_rendered_frame(1),
|
||||||
|
'The first line has been returned')
|
||||||
|
self.assertEqual('Slide 1', service_item.get_frame_title(0), '"Slide 1" has been returned as the title')
|
||||||
|
self.assertEqual('Slide 2', service_item.get_frame_title(1), '"Slide 2" has been returned as the title')
|
||||||
|
self.assertEqual('', service_item.get_frame_title(2), 'Blank has been returned as the title of slide 3')
|
||||||
|
|
||||||
|
def service_item_load_image_from_service_test(self):
|
||||||
"""
|
"""
|
||||||
Test the Service Item - adding an image from a saved service
|
Test the Service Item - adding an image from a saved service
|
||||||
"""
|
"""
|
||||||
@ -87,29 +115,34 @@ class TestServiceItem(TestCase):
|
|||||||
service_item.add_icon = MagicMock()
|
service_item.add_icon = MagicMock()
|
||||||
|
|
||||||
# WHEN: adding an image from a saved Service and mocked exists
|
# WHEN: adding an image from a saved Service and mocked exists
|
||||||
line = self.convert_file_service_item('serviceitem_image_1.osj')
|
line = convert_file_service_item(TEST_PATH, 'serviceitem_image_1.osj')
|
||||||
with patch('openlp.core.ui.servicemanager.os.path.exists') as mocked_exists:
|
with patch('openlp.core.ui.servicemanager.os.path.exists') as mocked_exists:
|
||||||
mocked_exists.return_value = True
|
mocked_exists.return_value = True
|
||||||
service_item.set_from_service(line, TEST_PATH)
|
service_item.set_from_service(line, TEST_PATH)
|
||||||
|
|
||||||
# THEN: We should get back a valid service item
|
# THEN: We should get back a valid service item
|
||||||
assert service_item.is_valid is True, 'The new service item should be valid'
|
self.assertTrue(service_item.is_valid, 'The new service item should be valid')
|
||||||
assert service_item.get_rendered_frame(0) == test_file, 'The first frame should match the path to the image'
|
self.assertEqual(test_file, service_item.get_rendered_frame(0),
|
||||||
assert service_item.get_frames()[0] == frame_array, 'The return should match frame array1'
|
'The first frame should match the path to the image')
|
||||||
assert service_item.get_frame_path(0) == test_file, 'The frame path should match the full path to the image'
|
self.assertEqual(frame_array, service_item.get_frames()[0],
|
||||||
assert service_item.get_frame_title(0) == image_name, 'The frame title should match the image name'
|
'The return should match frame array1')
|
||||||
assert service_item.get_display_title() == image_name, 'The display title should match the first image name'
|
self.assertEqual(test_file, service_item.get_frame_path(0),
|
||||||
assert service_item.is_image() is True, 'This service item should be of an "image" type'
|
'The frame path should match the full path to the image')
|
||||||
assert service_item.is_capable(ItemCapabilities.CanMaintain) is True, \
|
self.assertEqual(image_name, service_item.get_frame_title(0),
|
||||||
'This service item should be able to be Maintained'
|
'The frame title should match the image name')
|
||||||
assert service_item.is_capable(ItemCapabilities.CanPreview) is True, \
|
self.assertEqual(image_name, service_item.get_display_title(),
|
||||||
'This service item should be able to be be Previewed'
|
'The display title should match the first image name')
|
||||||
assert service_item.is_capable(ItemCapabilities.CanLoop) is True, \
|
self.assertTrue(service_item.is_image(), 'This service item should be of an "image" type')
|
||||||
'This service item should be able to be run in a can be made to Loop'
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanMaintain),
|
||||||
assert service_item.is_capable(ItemCapabilities.CanAppend) is True, \
|
'This service item should be able to be Maintained')
|
||||||
'This service item should be able to have new items added to it'
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanPreview),
|
||||||
|
'This service item should be able to be be Previewed')
|
||||||
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanLoop),
|
||||||
|
'This service item should be able to be run in a can be made to Loop')
|
||||||
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanAppend),
|
||||||
|
'This service item should be able to have new items added to it')
|
||||||
|
|
||||||
def serviceitem_load_image_from_local_service_test(self):
|
def service_item_load_image_from_local_service_test(self):
|
||||||
"""
|
"""
|
||||||
Test the Service Item - adding an image from a saved local service
|
Test the Service Item - adding an image from a saved local service
|
||||||
"""
|
"""
|
||||||
@ -128,50 +161,42 @@ class TestServiceItem(TestCase):
|
|||||||
service_item2.add_icon = MagicMock()
|
service_item2.add_icon = MagicMock()
|
||||||
|
|
||||||
# WHEN: adding an image from a saved Service and mocked exists
|
# WHEN: adding an image from a saved Service and mocked exists
|
||||||
line = self.convert_file_service_item('serviceitem_image_2.osj')
|
line = convert_file_service_item(TEST_PATH, 'serviceitem_image_2.osj')
|
||||||
line2 = self.convert_file_service_item('serviceitem_image_2.osj', 1)
|
line2 = convert_file_service_item(TEST_PATH, 'serviceitem_image_2.osj', 1)
|
||||||
|
|
||||||
with patch('openlp.core.ui.servicemanager.os.path.exists') as mocked_exists:
|
with patch('openlp.core.ui.servicemanager.os.path.exists') as mocked_exists:
|
||||||
mocked_exists.return_value = True
|
mocked_exists.return_value = True
|
||||||
service_item2.set_from_service(line2)
|
service_item2.set_from_service(line2)
|
||||||
service_item.set_from_service(line)
|
service_item.set_from_service(line)
|
||||||
|
|
||||||
|
|
||||||
# THEN: We should get back a valid service item
|
# THEN: We should get back a valid service item
|
||||||
|
|
||||||
# This test is copied from service_item.py, but is changed since to conform to
|
# This test is copied from service_item.py, but is changed since to conform to
|
||||||
# new layout of service item. The layout use in serviceitem_image_2.osd is actually invalid now.
|
# new layout of service item. The layout use in serviceitem_image_2.osd is actually invalid now.
|
||||||
assert service_item.is_valid is True, 'The first service item should be valid'
|
self.assertTrue(service_item.is_valid, 'The first service item should be valid')
|
||||||
assert service_item2.is_valid is True, 'The second service item should be valid'
|
self.assertTrue(service_item2.is_valid, 'The second service item should be valid')
|
||||||
assert service_item.get_rendered_frame(0) == test_file1, 'The first frame should match the path to the image'
|
self.assertEqual(test_file1, service_item.get_rendered_frame(0),
|
||||||
assert service_item2.get_rendered_frame(0) == test_file2, 'The Second frame should match the path to the image'
|
'The first frame should match the path to the image')
|
||||||
assert service_item.get_frames()[0] == frame_array1, 'The return should match the frame array1'
|
self.assertEqual(test_file2, service_item2.get_rendered_frame(0),
|
||||||
assert service_item2.get_frames()[0] == frame_array2, 'The return should match the frame array2'
|
'The Second frame should match the path to the image')
|
||||||
assert service_item.get_frame_path(0) == test_file1, 'The frame path should match the full path to the image'
|
self.assertEqual(frame_array1, service_item.get_frames()[0], 'The return should match the frame array1')
|
||||||
assert service_item2.get_frame_path(0) == test_file2, 'The frame path should match the full path to the image'
|
self.assertEqual(frame_array2, service_item2.get_frames()[0], 'The return should match the frame array2')
|
||||||
assert service_item.get_frame_title(0) == image_name1, 'The 1st frame title should match the image name'
|
self.assertEqual(test_file1, service_item.get_frame_path(0),
|
||||||
assert service_item2.get_frame_title(0) == image_name2, 'The 2nd frame title should match the image name'
|
'The frame path should match the full path to the image')
|
||||||
assert service_item.title.lower() == service_item.name, \
|
self.assertEqual(test_file2, service_item2.get_frame_path(0),
|
||||||
'The plugin name should match the display title, as there are > 1 Images'
|
'The frame path should match the full path to the image')
|
||||||
assert service_item.is_image() is True, 'This service item should be of an "image" type'
|
self.assertEqual(image_name1, service_item.get_frame_title(0),
|
||||||
assert service_item.is_capable(ItemCapabilities.CanMaintain) is True, \
|
'The 1st frame title should match the image name')
|
||||||
'This service item should be able to be Maintained'
|
self.assertEqual(image_name2, service_item2.get_frame_title(0),
|
||||||
assert service_item.is_capable(ItemCapabilities.CanPreview) is True, \
|
'The 2nd frame title should match the image name')
|
||||||
'This service item should be able to be be Previewed'
|
self.assertEqual(service_item.name, service_item.title.lower(),
|
||||||
assert service_item.is_capable(ItemCapabilities.CanLoop) is True, \
|
'The plugin name should match the display title, as there are > 1 Images')
|
||||||
'This service item should be able to be run in a can be made to Loop'
|
self.assertTrue(service_item.is_image(), 'This service item should be of an "image" type')
|
||||||
assert service_item.is_capable(ItemCapabilities.CanAppend) is True, \
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanMaintain),
|
||||||
'This service item should be able to have new items added to it'
|
'This service item should be able to be Maintained')
|
||||||
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanPreview),
|
||||||
def convert_file_service_item(self, name, row=0):
|
'This service item should be able to be be Previewed')
|
||||||
service_file = os.path.join(TEST_PATH, name)
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanLoop),
|
||||||
try:
|
'This service item should be able to be run in a can be made to Loop')
|
||||||
open_file = open(service_file, 'r')
|
self.assertTrue(service_item.is_capable(ItemCapabilities.CanAppend),
|
||||||
items = json.load(open_file)
|
'This service item should be able to have new items added to it')
|
||||||
first_line = items[row]
|
|
||||||
except IOError:
|
|
||||||
first_line = ''
|
|
||||||
finally:
|
|
||||||
open_file.close()
|
|
||||||
return first_line
|
|
||||||
|
|
||||||
|
@ -1,3 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib.settings package.
|
Package to test the openlp.core.lib.settings package.
|
||||||
"""
|
"""
|
||||||
@ -5,10 +33,10 @@ import os
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
|
|
||||||
from openlp.core.lib import Settings
|
|
||||||
|
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
|
from openlp.core.lib import Settings
|
||||||
|
|
||||||
|
|
||||||
class TestSettings(TestCase):
|
class TestSettings(TestCase):
|
||||||
"""
|
"""
|
||||||
@ -40,13 +68,13 @@ class TestSettings(TestCase):
|
|||||||
default_value = Settings().value('core/has run wizard')
|
default_value = Settings().value('core/has run wizard')
|
||||||
|
|
||||||
# THEN the default value is returned
|
# THEN the default value is returned
|
||||||
assert default_value is False, 'The default value should be False'
|
self.assertFalse(default_value, 'The default value should be False')
|
||||||
|
|
||||||
# WHEN a new value is saved into config
|
# WHEN a new value is saved into config
|
||||||
Settings().setValue('core/has run wizard', True)
|
Settings().setValue('core/has run wizard', True)
|
||||||
|
|
||||||
# THEN the new value is returned when re-read
|
# THEN the new value is returned when re-read
|
||||||
assert Settings().value('core/has run wizard') is True, 'The saved value should have been returned'
|
self.assertTrue(Settings().value('core/has run wizard'), 'The saved value should have been returned')
|
||||||
|
|
||||||
def settings_override_test(self):
|
def settings_override_test(self):
|
||||||
"""
|
"""
|
||||||
@ -62,13 +90,13 @@ class TestSettings(TestCase):
|
|||||||
extend = Settings().value('test/extend')
|
extend = Settings().value('test/extend')
|
||||||
|
|
||||||
# THEN the default value is returned
|
# THEN the default value is returned
|
||||||
assert extend == 'very wide', 'The default value of "very wide" should be returned'
|
self.assertEqual('very wide', extend, 'The default value of "very wide" should be returned')
|
||||||
|
|
||||||
# WHEN a new value is saved into config
|
# WHEN a new value is saved into config
|
||||||
Settings().setValue('test/extend', 'very short')
|
Settings().setValue('test/extend', 'very short')
|
||||||
|
|
||||||
# THEN the new value is returned when re-read
|
# THEN the new value is returned when re-read
|
||||||
assert Settings().value('test/extend') == 'very short', 'The saved value should be returned'
|
self.assertEqual('very short', Settings().value('test/extend'), 'The saved value should be returned')
|
||||||
|
|
||||||
def settings_override_with_group_test(self):
|
def settings_override_with_group_test(self):
|
||||||
"""
|
"""
|
||||||
@ -86,10 +114,10 @@ class TestSettings(TestCase):
|
|||||||
extend = settings.value('extend')
|
extend = settings.value('extend')
|
||||||
|
|
||||||
# THEN the default value is returned
|
# THEN the default value is returned
|
||||||
assert extend == 'very wide', 'The default value defined should be returned'
|
self.assertEqual('very wide', extend, 'The default value defined should be returned')
|
||||||
|
|
||||||
# WHEN a new value is saved into config
|
# WHEN a new value is saved into config
|
||||||
Settings().setValue('test/extend', 'very short')
|
Settings().setValue('test/extend', 'very short')
|
||||||
|
|
||||||
# THEN the new value is returned when re-read
|
# THEN the new value is returned when re-read
|
||||||
assert Settings().value('test/extend') == 'very short', 'The saved value should be returned'
|
self.assertEqual('very short', Settings().value('test/extend'), 'The saved value should be returned')
|
||||||
|
@ -1,7 +1,34 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.lib.uistrings package.
|
Package to test the openlp.core.lib.uistrings package.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from openlp.core.lib import UiStrings
|
from openlp.core.lib import UiStrings
|
||||||
@ -18,6 +45,6 @@ class TestUiStrings(TestCase):
|
|||||||
second_instance = UiStrings()
|
second_instance = UiStrings()
|
||||||
|
|
||||||
# THEN: Check if the instances are the same.
|
# THEN: Check if the instances are the same.
|
||||||
assert first_instance is second_instance, "They should be the same instance!"
|
self.assertIs(first_instance, second_instance, 'Two UiStrings objects should be the same instance')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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.utils.actions package.
|
Package to test the openlp.core.utils.actions package.
|
||||||
"""
|
"""
|
||||||
@ -12,6 +40,9 @@ from openlp.core.utils import ActionList
|
|||||||
|
|
||||||
|
|
||||||
class TestActionList(TestCase):
|
class TestActionList(TestCase):
|
||||||
|
"""
|
||||||
|
Test the ActionList class
|
||||||
|
"""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,13 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
Functional tests to test the AppLocation class and related methods.
|
Functional tests to test the AppLocation class and related methods.
|
||||||
"""
|
"""
|
||||||
import copy
|
import copy
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch
|
|
||||||
|
|
||||||
from openlp.core.utils import AppLocation
|
from openlp.core.utils import AppLocation
|
||||||
|
from tests.functional import patch
|
||||||
|
|
||||||
FILE_LIST = ['file1', 'file2', 'file3.txt', 'file4.txt', 'file5.mp3', 'file6.mp3']
|
FILE_LIST = ['file1', 'file2', 'file3.txt', 'file4.txt', 'file5.mp3', 'file6.mp3']
|
||||||
|
|
||||||
@ -38,7 +64,7 @@ class TestAppLocation(TestCase):
|
|||||||
mocked_settings.contains.assert_called_with('advanced/data path')
|
mocked_settings.contains.assert_called_with('advanced/data path')
|
||||||
mocked_get_directory.assert_called_with(AppLocation.DataDir)
|
mocked_get_directory.assert_called_with(AppLocation.DataDir)
|
||||||
mocked_check_directory_exists.assert_called_with('test/dir')
|
mocked_check_directory_exists.assert_called_with('test/dir')
|
||||||
assert data_path == 'test/dir', 'Result should be "test/dir"'
|
self.assertEqual('test/dir', data_path, 'Result should be "test/dir"')
|
||||||
|
|
||||||
def get_data_path_with_custom_location_test(self):
|
def get_data_path_with_custom_location_test(self):
|
||||||
"""
|
"""
|
||||||
@ -58,7 +84,7 @@ class TestAppLocation(TestCase):
|
|||||||
# THEN: the mocked Settings methods were called and the value returned was our set up value
|
# THEN: the mocked Settings methods were called and the value returned was our set up value
|
||||||
mocked_settings.contains.assert_called_with('advanced/data path')
|
mocked_settings.contains.assert_called_with('advanced/data path')
|
||||||
mocked_settings.value.assert_called_with('advanced/data path')
|
mocked_settings.value.assert_called_with('advanced/data path')
|
||||||
assert data_path == 'custom/dir', 'Result should be "custom/dir"'
|
self.assertEqual('custom/dir', data_path, 'Result should be "custom/dir"')
|
||||||
|
|
||||||
def get_files_no_section_no_extension_test(self):
|
def get_files_no_section_no_extension_test(self):
|
||||||
"""
|
"""
|
||||||
@ -74,7 +100,7 @@ class TestAppLocation(TestCase):
|
|||||||
result = AppLocation.get_files()
|
result = AppLocation.get_files()
|
||||||
|
|
||||||
# Then: check if the file lists are identical.
|
# Then: check if the file lists are identical.
|
||||||
assert result == FILE_LIST, 'The file lists should be identical.'
|
self.assertListEqual(FILE_LIST, result, 'The file lists should be identical.')
|
||||||
|
|
||||||
def get_files_test(self):
|
def get_files_test(self):
|
||||||
"""
|
"""
|
||||||
@ -93,7 +119,7 @@ class TestAppLocation(TestCase):
|
|||||||
mocked_listdir.assert_called_with('test/dir/section')
|
mocked_listdir.assert_called_with('test/dir/section')
|
||||||
|
|
||||||
# Then: check if the file lists are identical.
|
# Then: check if the file lists are identical.
|
||||||
assert result == ['file5.mp3', 'file6.mp3'], 'The file lists should be identical.'
|
self.assertListEqual(['file5.mp3', 'file6.mp3'], result, 'The file lists should be identical.')
|
||||||
|
|
||||||
def get_section_data_path_test(self):
|
def get_section_data_path_test(self):
|
||||||
"""
|
"""
|
||||||
@ -110,25 +136,27 @@ class TestAppLocation(TestCase):
|
|||||||
|
|
||||||
# THEN: check that all the correct methods were called, and the result is correct
|
# THEN: check that all the correct methods were called, and the result is correct
|
||||||
mocked_check_directory_exists.assert_called_with('test/dir/section')
|
mocked_check_directory_exists.assert_called_with('test/dir/section')
|
||||||
assert data_path == 'test/dir/section', 'Result should be "test/dir/section"'
|
self.assertEqual('test/dir/section', data_path, 'Result should be "test/dir/section"')
|
||||||
|
|
||||||
def get_directory_for_app_dir_test(self):
|
def get_directory_for_app_dir_test(self):
|
||||||
"""
|
"""
|
||||||
Test the AppLocation.get_directory() method for AppLocation.AppDir
|
Test the AppLocation.get_directory() method for AppLocation.AppDir
|
||||||
"""
|
"""
|
||||||
|
# GIVEN: A mocked out _get_frozen_path function
|
||||||
with patch('openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path:
|
with patch('openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path:
|
||||||
mocked_get_frozen_path.return_value = 'app/dir'
|
mocked_get_frozen_path.return_value = 'app/dir'
|
||||||
|
|
||||||
# WHEN: We call AppLocation.get_directory
|
# WHEN: We call AppLocation.get_directory
|
||||||
directory = AppLocation.get_directory(AppLocation.AppDir)
|
directory = AppLocation.get_directory(AppLocation.AppDir)
|
||||||
|
|
||||||
# THEN:
|
# THEN: check that the correct directory is returned
|
||||||
assert directory == 'app/dir', 'Directory should be "app/dir"'
|
self.assertEqual('app/dir', directory, 'Directory should be "app/dir"')
|
||||||
|
|
||||||
def get_directory_for_plugins_dir_test(self):
|
def get_directory_for_plugins_dir_test(self):
|
||||||
"""
|
"""
|
||||||
Test the AppLocation.get_directory() method for AppLocation.PluginsDir
|
Test the AppLocation.get_directory() method for AppLocation.PluginsDir
|
||||||
"""
|
"""
|
||||||
|
# GIVEN: _get_frozen_path, abspath, split and sys are mocked out
|
||||||
with patch('openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path, \
|
with patch('openlp.core.utils.applocation._get_frozen_path') as mocked_get_frozen_path, \
|
||||||
patch('openlp.core.utils.applocation.os.path.abspath') as mocked_abspath, \
|
patch('openlp.core.utils.applocation.os.path.abspath') as mocked_abspath, \
|
||||||
patch('openlp.core.utils.applocation.os.path.split') as mocked_split, \
|
patch('openlp.core.utils.applocation.os.path.split') as mocked_split, \
|
||||||
@ -142,6 +170,5 @@ class TestAppLocation(TestCase):
|
|||||||
# WHEN: We call AppLocation.get_directory
|
# WHEN: We call AppLocation.get_directory
|
||||||
directory = AppLocation.get_directory(AppLocation.PluginsDir)
|
directory = AppLocation.get_directory(AppLocation.PluginsDir)
|
||||||
|
|
||||||
# THEN:
|
# THEN: The correct directory should be returned
|
||||||
assert directory == 'plugins/dir', 'Directory should be "plugins/dir"'
|
self.assertEqual('plugins/dir', directory, 'Directory should be "plugins/dir"')
|
||||||
|
|
||||||
|
@ -1,25 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
Functional tests to test the AppLocation class and related methods.
|
Functional tests to test the AppLocation class and related methods.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch
|
|
||||||
|
|
||||||
from openlp.core.utils import clean_filename, get_filesystem_encoding, _get_frozen_path, get_locale_key, \
|
from openlp.core.utils import clean_filename, get_filesystem_encoding, _get_frozen_path, get_locale_key, \
|
||||||
get_natural_key, split_filename
|
get_natural_key, split_filename
|
||||||
|
from tests.functional import patch
|
||||||
|
|
||||||
|
|
||||||
class TestUtils(TestCase):
|
class TestUtils(TestCase):
|
||||||
"""
|
"""
|
||||||
A test suite to test out various methods around the AppLocation class.
|
A test suite to test out various methods around the AppLocation class.
|
||||||
"""
|
"""
|
||||||
def get_filesystem_encoding_test(self):
|
def get_filesystem_encoding_sys_function_not_called_test(self):
|
||||||
"""
|
"""
|
||||||
Test the get_filesystem_encoding() function
|
Test the get_filesystem_encoding() function does not call the sys.getdefaultencoding() function
|
||||||
"""
|
"""
|
||||||
|
# GIVEN: sys.getfilesystemencoding returns "cp1252"
|
||||||
with patch('openlp.core.utils.sys.getfilesystemencoding') as mocked_getfilesystemencoding, \
|
with patch('openlp.core.utils.sys.getfilesystemencoding') as mocked_getfilesystemencoding, \
|
||||||
patch('openlp.core.utils.sys.getdefaultencoding') as mocked_getdefaultencoding:
|
patch('openlp.core.utils.sys.getdefaultencoding') as mocked_getdefaultencoding:
|
||||||
# GIVEN: sys.getfilesystemencoding returns "cp1252"
|
|
||||||
mocked_getfilesystemencoding.return_value = 'cp1252'
|
mocked_getfilesystemencoding.return_value = 'cp1252'
|
||||||
|
|
||||||
# WHEN: get_filesystem_encoding() is called
|
# WHEN: get_filesystem_encoding() is called
|
||||||
@ -27,10 +54,16 @@ class TestUtils(TestCase):
|
|||||||
|
|
||||||
# THEN: getdefaultencoding should have been called
|
# THEN: getdefaultencoding should have been called
|
||||||
mocked_getfilesystemencoding.assert_called_with()
|
mocked_getfilesystemencoding.assert_called_with()
|
||||||
assert not mocked_getdefaultencoding.called
|
self.assertEqual(0, mocked_getdefaultencoding.called, 'getdefaultencoding should not have been called')
|
||||||
assert result == 'cp1252', 'The result should be "cp1252"'
|
self.assertEqual('cp1252', result, 'The result should be "cp1252"')
|
||||||
|
|
||||||
|
def get_filesystem_encoding_sys_function_is_called_test(self):
|
||||||
|
"""
|
||||||
|
Test the get_filesystem_encoding() function calls the sys.getdefaultencoding() function
|
||||||
|
"""
|
||||||
# GIVEN: sys.getfilesystemencoding returns None and sys.getdefaultencoding returns "utf-8"
|
# GIVEN: sys.getfilesystemencoding returns None and sys.getdefaultencoding returns "utf-8"
|
||||||
|
with patch('openlp.core.utils.sys.getfilesystemencoding') as mocked_getfilesystemencoding, \
|
||||||
|
patch('openlp.core.utils.sys.getdefaultencoding') as mocked_getdefaultencoding:
|
||||||
mocked_getfilesystemencoding.return_value = None
|
mocked_getfilesystemencoding.return_value = None
|
||||||
mocked_getdefaultencoding.return_value = 'utf-8'
|
mocked_getdefaultencoding.return_value = 'utf-8'
|
||||||
|
|
||||||
@ -40,23 +73,35 @@ class TestUtils(TestCase):
|
|||||||
# THEN: getdefaultencoding should have been called
|
# THEN: getdefaultencoding should have been called
|
||||||
mocked_getfilesystemencoding.assert_called_with()
|
mocked_getfilesystemencoding.assert_called_with()
|
||||||
mocked_getdefaultencoding.assert_called_with()
|
mocked_getdefaultencoding.assert_called_with()
|
||||||
assert result == 'utf-8', 'The result should be "utf-8"'
|
self.assertEqual('utf-8', result, 'The result should be "utf-8"')
|
||||||
|
|
||||||
def get_frozen_path_test(self):
|
def get_frozen_path_in_unfrozen_app_test(self):
|
||||||
"""
|
"""
|
||||||
Test the _get_frozen_path() function
|
Test the _get_frozen_path() function when the application is not frozen (compiled by PyInstaller)
|
||||||
"""
|
"""
|
||||||
with patch('openlp.core.utils.sys') as mocked_sys:
|
with patch('openlp.core.utils.sys') as mocked_sys:
|
||||||
# GIVEN: The sys module "without" a "frozen" attribute
|
# GIVEN: The sys module "without" a "frozen" attribute
|
||||||
mocked_sys.frozen = None
|
mocked_sys.frozen = None
|
||||||
|
|
||||||
# WHEN: We call _get_frozen_path() with two parameters
|
# WHEN: We call _get_frozen_path() with two parameters
|
||||||
|
frozen_path = _get_frozen_path('frozen', 'not frozen')
|
||||||
|
|
||||||
# THEN: The non-frozen parameter is returned
|
# THEN: The non-frozen parameter is returned
|
||||||
assert _get_frozen_path('frozen', 'not frozen') == 'not frozen', 'Should return "not frozen"'
|
self.assertEqual('not frozen', frozen_path, '_get_frozen_path should return "not frozen"')
|
||||||
|
|
||||||
|
def get_frozen_path_in_frozen_app_test(self):
|
||||||
|
"""
|
||||||
|
Test the _get_frozen_path() function when the application is frozen (compiled by PyInstaller)
|
||||||
|
"""
|
||||||
|
with patch('openlp.core.utils.sys') as mocked_sys:
|
||||||
# GIVEN: The sys module *with* a "frozen" attribute
|
# GIVEN: The sys module *with* a "frozen" attribute
|
||||||
mocked_sys.frozen = 1
|
mocked_sys.frozen = 1
|
||||||
|
|
||||||
# WHEN: We call _get_frozen_path() with two parameters
|
# WHEN: We call _get_frozen_path() with two parameters
|
||||||
|
frozen_path = _get_frozen_path('frozen', 'not frozen')
|
||||||
|
|
||||||
# THEN: The frozen parameter is returned
|
# THEN: The frozen parameter is returned
|
||||||
assert _get_frozen_path('frozen', 'not frozen') == 'frozen', 'Should return "frozen"'
|
self.assertEqual('frozen', frozen_path, 'Should return "frozen"')
|
||||||
|
|
||||||
def split_filename_with_file_path_test(self):
|
def split_filename_with_file_path_test(self):
|
||||||
"""
|
"""
|
||||||
@ -72,7 +117,7 @@ class TestUtils(TestCase):
|
|||||||
result = split_filename(file_path)
|
result = split_filename(file_path)
|
||||||
|
|
||||||
# THEN: A tuple should be returned.
|
# THEN: A tuple should be returned.
|
||||||
assert result == wanted_result, 'A tuple with the directory and file name should have been returned.'
|
self.assertEqual(wanted_result, result, 'A tuple with the dir and file name should have been returned')
|
||||||
|
|
||||||
def split_filename_with_dir_path_test(self):
|
def split_filename_with_dir_path_test(self):
|
||||||
"""
|
"""
|
||||||
@ -88,8 +133,8 @@ class TestUtils(TestCase):
|
|||||||
result = split_filename(file_path)
|
result = split_filename(file_path)
|
||||||
|
|
||||||
# THEN: A tuple should be returned.
|
# THEN: A tuple should be returned.
|
||||||
assert result == wanted_result, \
|
self.assertEqual(wanted_result, result,
|
||||||
'A two-entry tuple with the directory and file name (empty) should have been returned.'
|
'A two-entry tuple with the directory and file name (empty) should have been returned.')
|
||||||
|
|
||||||
def clean_filename_test(self):
|
def clean_filename_test(self):
|
||||||
"""
|
"""
|
||||||
@ -103,7 +148,7 @@ class TestUtils(TestCase):
|
|||||||
result = clean_filename(invalid_name)
|
result = clean_filename(invalid_name)
|
||||||
|
|
||||||
# THEN: The file name should be cleaned.
|
# THEN: The file name should be cleaned.
|
||||||
assert result == wanted_name, 'The file name should not contain any special characters.'
|
self.assertEqual(wanted_name, result, 'The file name should not contain any special characters.')
|
||||||
|
|
||||||
def get_locale_key_windows_test(self):
|
def get_locale_key_windows_test(self):
|
||||||
"""
|
"""
|
||||||
@ -116,13 +161,15 @@ class TestUtils(TestCase):
|
|||||||
mocked_get_language.return_value = 'de'
|
mocked_get_language.return_value = 'de'
|
||||||
mocked_os.name = 'nt'
|
mocked_os.name = 'nt'
|
||||||
unsorted_list = ['Auszug', 'Aushang', '\u00C4u\u00DFerung']
|
unsorted_list = ['Auszug', 'Aushang', '\u00C4u\u00DFerung']
|
||||||
|
|
||||||
# WHEN: We sort the list and use get_locale_key() to generate the sorting keys
|
# WHEN: We sort the list and use get_locale_key() to generate the sorting keys
|
||||||
|
sorted_list = sorted(unsorted_list, key=get_locale_key)
|
||||||
|
|
||||||
# THEN: We get a properly sorted list
|
# THEN: We get a properly sorted list
|
||||||
test_passes = sorted(unsorted_list, key=get_locale_key) == ['Aushang', '\u00C4u\u00DFerung', 'Auszug']
|
self.assertEqual(['Aushang', '\u00C4u\u00DFerung', 'Auszug'], sorted_list,
|
||||||
assert test_passes, 'Strings should be sorted properly'
|
'Strings should be sorted properly')
|
||||||
|
|
||||||
def get_locale_key_linux_test(self):
|
def get_locale_key_linux_test(self):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Test the get_locale_key(string) function
|
Test the get_locale_key(string) function
|
||||||
"""
|
"""
|
||||||
@ -133,10 +180,13 @@ class TestUtils(TestCase):
|
|||||||
mocked_get_language.return_value = 'de'
|
mocked_get_language.return_value = 'de'
|
||||||
mocked_os.name = 'linux'
|
mocked_os.name = 'linux'
|
||||||
unsorted_list = ['Auszug', 'Aushang', '\u00C4u\u00DFerung']
|
unsorted_list = ['Auszug', 'Aushang', '\u00C4u\u00DFerung']
|
||||||
|
|
||||||
# WHEN: We sort the list and use get_locale_key() to generate the sorting keys
|
# WHEN: We sort the list and use get_locale_key() to generate the sorting keys
|
||||||
|
sorted_list = sorted(unsorted_list, key=get_locale_key)
|
||||||
|
|
||||||
# THEN: We get a properly sorted list
|
# THEN: We get a properly sorted list
|
||||||
test_passes = sorted(unsorted_list, key=get_locale_key) == ['Aushang', '\u00C4u\u00DFerung', 'Auszug']
|
self.assertEqual(['Aushang', '\u00C4u\u00DFerung', 'Auszug'], sorted_list,
|
||||||
assert test_passes, 'Strings should be sorted properly'
|
'Strings should be sorted properly')
|
||||||
|
|
||||||
def get_natural_key_test(self):
|
def get_natural_key_test(self):
|
||||||
"""
|
"""
|
||||||
@ -146,7 +196,9 @@ class TestUtils(TestCase):
|
|||||||
# GIVEN: The language is English (a language, which sorts digits before letters)
|
# GIVEN: The language is English (a language, which sorts digits before letters)
|
||||||
mocked_get_language.return_value = 'en'
|
mocked_get_language.return_value = 'en'
|
||||||
unsorted_list = ['item 10a', 'item 3b', '1st item']
|
unsorted_list = ['item 10a', 'item 3b', '1st item']
|
||||||
|
|
||||||
# WHEN: We sort the list and use get_natural_key() to generate the sorting keys
|
# WHEN: We sort the list and use get_natural_key() to generate the sorting keys
|
||||||
|
sorted_list = sorted(unsorted_list, key=get_natural_key)
|
||||||
|
|
||||||
# THEN: We get a properly sorted list
|
# THEN: We get a properly sorted list
|
||||||
test_passes = sorted(unsorted_list, key=get_natural_key) == ['1st item', 'item 3b', 'item 10a']
|
self.assertEqual(['1st item', 'item 3b', 'item 10a'], sorted_list, 'Numbers should be sorted naturally')
|
||||||
assert test_passes, 'Numbers should be sorted naturally'
|
|
||||||
|
@ -1,3 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Bibles plugin.
|
This module contains tests for the lib submodule of the Bibles plugin.
|
||||||
"""
|
"""
|
||||||
|
@ -1,15 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the versereferencelist submodule of the Bibles plugin.
|
This module contains tests for the versereferencelist submodule of the Bibles plugin.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from openlp.plugins.bibles.lib.versereferencelist import VerseReferenceList
|
from openlp.plugins.bibles.lib.versereferencelist import VerseReferenceList
|
||||||
|
|
||||||
class TestVerseReferenceList(TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
"""
|
|
||||||
Initializes all we need
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
class TestVerseReferenceList(TestCase):
|
||||||
|
"""
|
||||||
|
Test the VerseReferenceList class
|
||||||
|
"""
|
||||||
def add_first_verse_test(self):
|
def add_first_verse_test(self):
|
||||||
"""
|
"""
|
||||||
Test the addition of a verse to the empty list
|
Test the addition of a verse to the empty list
|
||||||
@ -20,11 +48,11 @@ class TestVerseReferenceList(TestCase):
|
|||||||
chapter = 1
|
chapter = 1
|
||||||
verse = 1
|
verse = 1
|
||||||
version = 'testVersion'
|
version = 'testVersion'
|
||||||
copyright = 'testCopyright'
|
copyright_ = 'testCopyright'
|
||||||
permission = 'testPermision'
|
permission = 'testPermision'
|
||||||
|
|
||||||
# WHEN: We add it to the verse list
|
# WHEN: We add it to the verse list
|
||||||
reference_list.add(book, chapter, verse, version, copyright, permission)
|
reference_list.add(book, chapter, verse, version, copyright_, permission)
|
||||||
|
|
||||||
# THEN: The entries should be in the first entry of the list
|
# THEN: The entries should be in the first entry of the list
|
||||||
self.assertEqual(reference_list.current_index, 0, 'The current index should be 0')
|
self.assertEqual(reference_list.current_index, 0, 'The current index should be 0')
|
||||||
@ -44,17 +72,18 @@ class TestVerseReferenceList(TestCase):
|
|||||||
verse = 1
|
verse = 1
|
||||||
next_verse = 2
|
next_verse = 2
|
||||||
version = 'testVersion'
|
version = 'testVersion'
|
||||||
copyright = 'testCopyright'
|
copyright_ = 'testCopyright'
|
||||||
permission = 'testPermision'
|
permission = 'testPermision'
|
||||||
reference_list = VerseReferenceList()
|
reference_list = VerseReferenceList()
|
||||||
reference_list.add(book, chapter, verse, version, copyright, permission)
|
reference_list.add(book, chapter, verse, version, copyright_, permission)
|
||||||
|
|
||||||
# WHEN: We add the following verse to the verse list
|
# WHEN: We add the following verse to the verse list
|
||||||
reference_list.add(book, chapter, next_verse, version, copyright, permission)
|
reference_list.add(book, chapter, next_verse, version, copyright_, permission)
|
||||||
|
|
||||||
# THEN: The current index should be 0 and the end pointer of the entry should be '2'
|
# THEN: The current index should be 0 and the end pointer of the entry should be '2'
|
||||||
self.assertEqual(reference_list.current_index, 0, 'The current index should be 0')
|
self.assertEqual(reference_list.current_index, 0, 'The current index should be 0')
|
||||||
self.assertEqual(reference_list.verse_list[0]['end'], next_verse, 'The end in first entry should be %u' % next_verse)
|
self.assertEqual(reference_list.verse_list[0]['end'], next_verse,
|
||||||
|
'The end in first entry should be %u' % next_verse)
|
||||||
|
|
||||||
def add_another_verse_test(self):
|
def add_another_verse_test(self):
|
||||||
"""
|
"""
|
||||||
@ -64,18 +93,17 @@ class TestVerseReferenceList(TestCase):
|
|||||||
book = 'testBook'
|
book = 'testBook'
|
||||||
chapter = 1
|
chapter = 1
|
||||||
verse = 1
|
verse = 1
|
||||||
next_verse = 2
|
|
||||||
another_book = 'testBook2'
|
another_book = 'testBook2'
|
||||||
another_chapter = 2
|
another_chapter = 2
|
||||||
another_verse = 5
|
another_verse = 5
|
||||||
version = 'testVersion'
|
version = 'testVersion'
|
||||||
copyright = 'testCopyright'
|
copyright_ = 'testCopyright'
|
||||||
permission = 'testPermision'
|
permission = 'testPermision'
|
||||||
reference_list = VerseReferenceList()
|
reference_list = VerseReferenceList()
|
||||||
reference_list.add(book, chapter, verse, version, copyright, permission)
|
reference_list.add(book, chapter, verse, version, copyright_, permission)
|
||||||
|
|
||||||
# WHEN: We add a verse of another book to the verse list
|
# WHEN: We add a verse of another book to the verse list
|
||||||
reference_list.add(another_book, another_chapter, another_verse, version, copyright, permission)
|
reference_list.add(another_book, another_chapter, another_verse, version, copyright_, permission)
|
||||||
|
|
||||||
# THEN: the current index should be 1
|
# THEN: the current index should be 1
|
||||||
self.assertEqual(reference_list.current_index, 1, 'The current index should be 1')
|
self.assertEqual(reference_list.current_index, 1, 'The current index should be 1')
|
||||||
@ -87,15 +115,16 @@ class TestVerseReferenceList(TestCase):
|
|||||||
# GIVEN: version, copyright and permission
|
# GIVEN: version, copyright and permission
|
||||||
reference_list = VerseReferenceList()
|
reference_list = VerseReferenceList()
|
||||||
version = 'testVersion'
|
version = 'testVersion'
|
||||||
copyright = 'testCopyright'
|
copyright_ = 'testCopyright'
|
||||||
permission = 'testPermision'
|
permission = 'testPermision'
|
||||||
|
|
||||||
# WHEN: a not existing version will be added
|
# WHEN: a not existing version will be added
|
||||||
reference_list.add_version(version, copyright, permission)
|
reference_list.add_version(version, copyright_, permission)
|
||||||
|
|
||||||
# THEN: the data will be appended to the list
|
# THEN: the data will be appended to the list
|
||||||
self.assertEqual(len(reference_list.version_list), 1, 'The version data should be appended')
|
self.assertEqual(len(reference_list.version_list), 1, 'The version data should be appended')
|
||||||
self.assertEqual(reference_list.version_list[0], {'version': version, 'copyright': copyright, 'permission': permission},
|
self.assertEqual(reference_list.version_list[0],
|
||||||
|
{'version': version, 'copyright': copyright_, 'permission': permission},
|
||||||
'The version data should be appended')
|
'The version data should be appended')
|
||||||
|
|
||||||
def add_existing_version_test(self):
|
def add_existing_version_test(self):
|
||||||
@ -105,12 +134,12 @@ class TestVerseReferenceList(TestCase):
|
|||||||
# GIVEN: version, copyright and permission, added to the version list
|
# GIVEN: version, copyright and permission, added to the version list
|
||||||
reference_list = VerseReferenceList()
|
reference_list = VerseReferenceList()
|
||||||
version = 'testVersion'
|
version = 'testVersion'
|
||||||
copyright = 'testCopyright'
|
copyright_ = 'testCopyright'
|
||||||
permission = 'testPermision'
|
permission = 'testPermision'
|
||||||
reference_list.add_version(version, copyright, permission)
|
reference_list.add_version(version, copyright_, permission)
|
||||||
|
|
||||||
# WHEN: an existing version will be added
|
# WHEN: an existing version will be added
|
||||||
reference_list.add_version(version, copyright, permission)
|
reference_list.add_version(version, copyright_, permission)
|
||||||
|
|
||||||
# THEN: the data will not be appended to the list
|
# THEN: the data will not be appended to the list
|
||||||
self.assertEqual(len(reference_list.version_list), 1, 'The version data should not be appended')
|
self.assertEqual(len(reference_list.version_list), 1, 'The version data should not be appended')
|
||||||
|
@ -1,16 +1,40 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Images plugin.
|
This module contains tests for the lib submodule of the Images plugin.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import MagicMock, patch
|
|
||||||
|
|
||||||
from openlp.core.lib import Registry
|
from openlp.core.lib import Registry
|
||||||
from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
|
from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
|
||||||
from openlp.plugins.images.lib.mediaitem import ImageMediaItem
|
from openlp.plugins.images.lib.mediaitem import ImageMediaItem
|
||||||
|
from tests.functional import MagicMock, patch
|
||||||
|
|
||||||
|
|
||||||
class TestImageMediaItem(TestCase):
|
class TestImageMediaItem(TestCase):
|
||||||
@ -24,11 +48,10 @@ class TestImageMediaItem(TestCase):
|
|||||||
Registry().register('service_list', MagicMock())
|
Registry().register('service_list', MagicMock())
|
||||||
Registry().register('main_window', self.mocked_main_window)
|
Registry().register('main_window', self.mocked_main_window)
|
||||||
Registry().register('live_controller', MagicMock())
|
Registry().register('live_controller', MagicMock())
|
||||||
mocked_parent = MagicMock()
|
|
||||||
mocked_plugin = MagicMock()
|
mocked_plugin = MagicMock()
|
||||||
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.__init__') as mocked_init:
|
with patch('openlp.plugins.images.lib.mediaitem.MediaManagerItem._setup'), \
|
||||||
mocked_init.return_value = None
|
patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.setup_item'):
|
||||||
self.media_item = ImageMediaItem(mocked_parent, mocked_plugin)
|
self.media_item = ImageMediaItem(None, mocked_plugin)
|
||||||
|
|
||||||
def save_new_images_list_empty_list_test(self):
|
def save_new_images_list_empty_list_test(self):
|
||||||
"""
|
"""
|
||||||
@ -36,7 +59,7 @@ class TestImageMediaItem(TestCase):
|
|||||||
"""
|
"""
|
||||||
# GIVEN: An empty image_list
|
# GIVEN: An empty image_list
|
||||||
image_list = []
|
image_list = []
|
||||||
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list') as mocked_load_full_list:
|
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list'):
|
||||||
self.media_item.manager = MagicMock()
|
self.media_item.manager = MagicMock()
|
||||||
|
|
||||||
# WHEN: We run save_new_images_list with the empty list
|
# WHEN: We run save_new_images_list with the empty list
|
||||||
@ -50,7 +73,7 @@ class TestImageMediaItem(TestCase):
|
|||||||
"""
|
"""
|
||||||
Test that the save_new_images_list() calls load_full_list() when reload_list is set to True
|
Test that the save_new_images_list() calls load_full_list() when reload_list is set to True
|
||||||
"""
|
"""
|
||||||
# GIVEN: A list with 1 image
|
# GIVEN: A list with 1 image and a mocked out manager
|
||||||
image_list = ['test_image.jpg']
|
image_list = ['test_image.jpg']
|
||||||
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list') as mocked_load_full_list:
|
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list') as mocked_load_full_list:
|
||||||
ImageFilenames.filename = ''
|
ImageFilenames.filename = ''
|
||||||
@ -69,7 +92,7 @@ class TestImageMediaItem(TestCase):
|
|||||||
"""
|
"""
|
||||||
Test that the save_new_images_list() doesn't call load_full_list() when reload_list is set to False
|
Test that the save_new_images_list() doesn't call load_full_list() when reload_list is set to False
|
||||||
"""
|
"""
|
||||||
# GIVEN: A list with 1 image
|
# GIVEN: A list with 1 image and a mocked out manager
|
||||||
image_list = ['test_image.jpg']
|
image_list = ['test_image.jpg']
|
||||||
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list') as mocked_load_full_list:
|
with patch('openlp.plugins.images.lib.mediaitem.ImageMediaItem.load_full_list') as mocked_load_full_list:
|
||||||
self.media_item.manager = MagicMock()
|
self.media_item.manager = MagicMock()
|
||||||
@ -126,9 +149,35 @@ class TestImageMediaItem(TestCase):
|
|||||||
self.media_item.reset_action.setVisible.assert_called_with(False)
|
self.media_item.reset_action.setVisible.assert_called_with(False)
|
||||||
self.media_item.live_controller.display.reset_image.assert_called_with()
|
self.media_item.live_controller.display.reset_image.assert_called_with()
|
||||||
|
|
||||||
|
def recursively_delete_group_test(self):
|
||||||
|
"""
|
||||||
|
Test that recursively_delete_group() works
|
||||||
|
"""
|
||||||
|
# GIVEN: An ImageGroups object and mocked functions
|
||||||
|
with patch('openlp.core.utils.delete_file') as mocked_delete_file:
|
||||||
|
ImageFilenames.group_id = 1
|
||||||
|
ImageGroups.parent_id = 1
|
||||||
|
self.media_item.manager = MagicMock()
|
||||||
|
self.media_item.manager.get_all_objects.side_effect = self._recursively_delete_group_side_effect
|
||||||
|
self.media_item.service_path = ""
|
||||||
|
test_group = ImageGroups()
|
||||||
|
test_group.id = 1
|
||||||
|
|
||||||
|
# WHEN: recursively_delete_group() is called
|
||||||
|
self.media_item.recursively_delete_group(test_group)
|
||||||
|
|
||||||
|
# THEN:
|
||||||
|
assert mocked_delete_file.call_count == 0, 'delete_file() should not be called'
|
||||||
|
assert self.media_item.manager.delete_object.call_count == 7, \
|
||||||
|
'manager.delete_object() should be called exactly 7 times'
|
||||||
|
|
||||||
|
# CLEANUP: Remove added attribute from ImageFilenames and ImageGroups
|
||||||
|
delattr(ImageFilenames, 'group_id')
|
||||||
|
delattr(ImageGroups, 'parent_id')
|
||||||
|
|
||||||
def _recursively_delete_group_side_effect(*args, **kwargs):
|
def _recursively_delete_group_side_effect(*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Side effect method that creates custom retun values for the recursively_delete_group method
|
Side effect method that creates custom return values for the recursively_delete_group method
|
||||||
"""
|
"""
|
||||||
if args[1] == ImageFilenames and args[2]:
|
if args[1] == ImageFilenames and args[2]:
|
||||||
# Create some fake objects that should be removed
|
# Create some fake objects that should be removed
|
||||||
@ -150,29 +199,3 @@ class TestImageMediaItem(TestCase):
|
|||||||
returned_object1.id = 1
|
returned_object1.id = 1
|
||||||
return [returned_object1]
|
return [returned_object1]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def recursively_delete_group_test(self):
|
|
||||||
"""
|
|
||||||
Test that recursively_delete_group() works
|
|
||||||
"""
|
|
||||||
# GIVEN: An ImageGroups object and mocked functions
|
|
||||||
with patch('openlp.core.utils.delete_file') as mocked_delete_file:
|
|
||||||
ImageFilenames.group_id = 1
|
|
||||||
ImageGroups.parent_id = 1
|
|
||||||
self.media_item.manager = MagicMock()
|
|
||||||
self.media_item.manager.get_all_objects.side_effect = self._recursively_delete_group_side_effect
|
|
||||||
self.media_item.servicePath = ""
|
|
||||||
test_group = ImageGroups()
|
|
||||||
test_group.id = 1
|
|
||||||
|
|
||||||
# WHEN: recursively_delete_group() is called
|
|
||||||
self.media_item.recursively_delete_group(test_group)
|
|
||||||
|
|
||||||
# THEN:
|
|
||||||
assert mocked_delete_file.call_count == 0, 'delete_file() should not be called'
|
|
||||||
assert self.media_item.manager.delete_object.call_count == 7, \
|
|
||||||
'manager.delete_object() should be called exactly 7 times'
|
|
||||||
|
|
||||||
# CLEANUP: Remove added attribute from ImageFilenames and ImageGroups
|
|
||||||
delattr(ImageFilenames, 'group_id')
|
|
||||||
delattr(ImageGroups, 'parent_id')
|
|
||||||
|
@ -1,17 +1,41 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Presentations plugin.
|
This module contains tests for the lib submodule of the Presentations plugin.
|
||||||
"""
|
"""
|
||||||
import os
|
|
||||||
from tempfile import mkstemp
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch, MagicMock
|
|
||||||
|
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Registry
|
from openlp.core.lib import Registry
|
||||||
|
|
||||||
from openlp.plugins.presentations.lib.mediaitem import PresentationMediaItem
|
from openlp.plugins.presentations.lib.mediaitem import PresentationMediaItem
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestMediaItem(TestCase):
|
class TestMediaItem(TestCase):
|
||||||
@ -25,11 +49,9 @@ class TestMediaItem(TestCase):
|
|||||||
Registry.create()
|
Registry.create()
|
||||||
Registry().register('service_manager', MagicMock())
|
Registry().register('service_manager', MagicMock())
|
||||||
Registry().register('main_window', MagicMock())
|
Registry().register('main_window', MagicMock())
|
||||||
|
with patch('openlp.plugins.presentations.lib.mediaitem.MediaManagerItem._setup'), \
|
||||||
with patch('openlp.plugins.presentations.lib.mediaitem.PresentationMediaItem.__init__') as mocked_init:
|
patch('openlp.plugins.presentations.lib.mediaitem.PresentationMediaItem.setup_item'):
|
||||||
mocked_init.return_value = None
|
self.media_item = PresentationMediaItem(None, MagicMock, MagicMock())
|
||||||
self.media_item = PresentationMediaItem(MagicMock(), MagicMock, MagicMock(), MagicMock())
|
|
||||||
|
|
||||||
self.application = QtGui.QApplication.instance()
|
self.application = QtGui.QApplication.instance()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
@ -65,7 +87,8 @@ class TestMediaItem(TestCase):
|
|||||||
mocked_translate.side_effect = lambda module, string_to_translate: string_to_translate
|
mocked_translate.side_effect = lambda module, string_to_translate: string_to_translate
|
||||||
self.media_item.build_file_mask_string()
|
self.media_item.build_file_mask_string()
|
||||||
|
|
||||||
# THEN: The file mask should be generated.
|
# THEN: The file mask should be generated correctly
|
||||||
assert self.media_item.on_new_file_masks == 'Presentations (*.odp *.ppt )', \
|
self.assertIn('*.odp', self.media_item.on_new_file_masks,
|
||||||
'The file mask should contain the odp and ppt extensions'
|
'The file mask should contain the odp extension')
|
||||||
|
self.assertIn('*.ppt', self.media_item.on_new_file_masks,
|
||||||
|
'The file mask should contain the ppt extension')
|
||||||
|
@ -1,17 +1,44 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Remotes plugin.
|
This module contains tests for the lib submodule of the Remotes plugin.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
from mock import patch
|
|
||||||
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Settings
|
from openlp.core.lib import Settings
|
||||||
from openlp.plugins.remotes.lib.remotetab import RemoteTab
|
from openlp.plugins.remotes.lib.remotetab import RemoteTab
|
||||||
|
from tests.functional import patch
|
||||||
from PyQt4 import QtGui
|
|
||||||
|
|
||||||
__default_settings__ = {
|
__default_settings__ = {
|
||||||
'remotes/twelve hour': True,
|
'remotes/twelve hour': True,
|
||||||
@ -23,9 +50,7 @@ __default_settings__ = {
|
|||||||
'remotes/authentication enabled': False,
|
'remotes/authentication enabled': False,
|
||||||
'remotes/ip address': '0.0.0.0'
|
'remotes/ip address': '0.0.0.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
ZERO_URL = '0.0.0.0'
|
ZERO_URL = '0.0.0.0'
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources'))
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +85,8 @@ class TestRemoteTab(TestCase):
|
|||||||
# WHEN: the default ip address is given
|
# WHEN: the default ip address is given
|
||||||
ip_address = self.form.get_ip_address(ZERO_URL)
|
ip_address = self.form.get_ip_address(ZERO_URL)
|
||||||
# THEN: the default ip address will be returned
|
# THEN: the default ip address will be returned
|
||||||
self.assertTrue(re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', ip_address), 'The return value should be a valid ip address')
|
self.assertTrue(re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', ip_address),
|
||||||
|
'The return value should be a valid ip address')
|
||||||
|
|
||||||
def get_ip_address_with_ip_test(self):
|
def get_ip_address_with_ip_test(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,15 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Remotes plugin.
|
This module contains tests for the lib submodule of the Remotes plugin.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
from mock import MagicMock
|
|
||||||
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Settings
|
from openlp.core.lib import Settings
|
||||||
from openlp.plugins.remotes.lib.httpserver import HttpRouter
|
from openlp.plugins.remotes.lib.httpserver import HttpRouter
|
||||||
from PyQt4 import QtGui
|
from tests.functional import MagicMock
|
||||||
|
|
||||||
__default_settings__ = {
|
__default_settings__ = {
|
||||||
'remotes/twelve hour': True,
|
'remotes/twelve hour': True,
|
||||||
|
@ -1,13 +1,39 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the EasyWorship song importer.
|
This module contains tests for the EasyWorship song importer.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from mock import patch, MagicMock
|
|
||||||
|
from tests.functional import MagicMock, patch
|
||||||
|
|
||||||
from openlp.plugins.songs.lib.ewimport import EasyWorshipSongImport, FieldDescEntry, FieldType
|
from openlp.plugins.songs.lib.ewimport import EasyWorshipSongImport, FieldDescEntry, FieldType
|
||||||
|
|
||||||
@ -43,6 +69,7 @@ SONG_TEST_DATA = [
|
|||||||
'Just to bow and receive a new blessing,\nIn the beautiful garden of prayer.', 'v3')],
|
'Just to bow and receive a new blessing,\nIn the beautiful garden of prayer.', 'v3')],
|
||||||
'verse_order_list': []}]
|
'verse_order_list': []}]
|
||||||
|
|
||||||
|
|
||||||
class EasyWorshipSongImportLogger(EasyWorshipSongImport):
|
class EasyWorshipSongImportLogger(EasyWorshipSongImport):
|
||||||
"""
|
"""
|
||||||
This class logs changes in the title instance variable
|
This class logs changes in the title instance variable
|
||||||
@ -60,6 +87,7 @@ class EasyWorshipSongImportLogger(EasyWorshipSongImport):
|
|||||||
def title(self, title):
|
def title(self, title):
|
||||||
self._title_assignment_list.append(title)
|
self._title_assignment_list.append(title)
|
||||||
|
|
||||||
|
|
||||||
class TestFieldDesc:
|
class TestFieldDesc:
|
||||||
def __init__(self, name, field_type, size):
|
def __init__(self, name, field_type, size):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -32,9 +32,8 @@ This module contains tests for the SongShow Plus song importer.
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from mock import patch, MagicMock
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
from openlp.plugins.songs.lib import VerseType
|
|
||||||
from openlp.plugins.songs.lib.foilpresenterimport import FoilPresenter
|
from openlp.plugins.songs.lib.foilpresenterimport import FoilPresenter
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(
|
TEST_PATH = os.path.abspath(
|
||||||
|
@ -1,13 +1,39 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the lib submodule of the Songs plugin.
|
This module contains tests for the lib submodule of the Songs plugin.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch, MagicMock
|
|
||||||
|
|
||||||
from openlp.plugins.songs.lib import VerseType, clean_string, clean_title, strip_rtf
|
from openlp.plugins.songs.lib import VerseType, clean_string, clean_title, strip_rtf
|
||||||
from openlp.plugins.songs.lib.songcompare import songs_probably_equal, _remove_typos, _op_length
|
from openlp.plugins.songs.lib.songcompare import songs_probably_equal, _remove_typos, _op_length
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestLib(TestCase):
|
class TestLib(TestCase):
|
||||||
|
@ -5,13 +5,11 @@ import os
|
|||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from mock import patch, MagicMock
|
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Registry, ServiceItem, Settings
|
from openlp.core.lib import Registry, ServiceItem, Settings
|
||||||
|
|
||||||
from openlp.plugins.songs.lib.mediaitem import SongMediaItem
|
from openlp.plugins.songs.lib.mediaitem import SongMediaItem
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestMediaItem(TestCase):
|
class TestMediaItem(TestCase):
|
||||||
@ -25,9 +23,9 @@ class TestMediaItem(TestCase):
|
|||||||
Registry.create()
|
Registry.create()
|
||||||
Registry().register('service_list', MagicMock())
|
Registry().register('service_list', MagicMock())
|
||||||
Registry().register('main_window', MagicMock())
|
Registry().register('main_window', MagicMock())
|
||||||
with patch('openlp.core.lib.mediamanageritem.MediaManagerItem.__init__'), \
|
with patch('openlp.core.lib.mediamanageritem.MediaManagerItem._setup'), \
|
||||||
patch('openlp.plugins.songs.forms.editsongform.EditSongForm.__init__'):
|
patch('openlp.plugins.songs.forms.editsongform.EditSongForm.__init__'):
|
||||||
self.media_item = SongMediaItem(MagicMock(), MagicMock())
|
self.media_item = SongMediaItem(None, MagicMock())
|
||||||
|
|
||||||
fd, self.ini_file = mkstemp('.ini')
|
fd, self.ini_file = mkstemp('.ini')
|
||||||
Settings().set_filename(self.ini_file)
|
Settings().set_filename(self.ini_file)
|
||||||
|
@ -1,13 +1,41 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the SongShow Plus song importer.
|
This module contains tests for the SongShow Plus song importer.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from mock import patch, MagicMock
|
|
||||||
|
|
||||||
from openlp.plugins.songs.lib import VerseType
|
from openlp.plugins.songs.lib import VerseType
|
||||||
from openlp.plugins.songs.lib.songshowplusimport import SongShowPlusImport
|
from openlp.plugins.songs.lib.songshowplusimport import SongShowPlusImport
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../resources/songshowplussongs'))
|
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../resources/songshowplussongs'))
|
||||||
SONG_TEST_DATA = {'Amazing Grace.sbsong':
|
SONG_TEST_DATA = {'Amazing Grace.sbsong':
|
||||||
|
@ -1,15 +1,45 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains tests for the WorshipCenter Pro song importer.
|
This module contains tests for the WorshipCenter Pro song importer.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
|
from unittest import TestCase, SkipTest
|
||||||
|
|
||||||
|
if os.name != 'nt':
|
||||||
|
raise SkipTest('Not Windows, skipping test')
|
||||||
|
|
||||||
from unittest import TestCase
|
|
||||||
from mock import patch, MagicMock
|
|
||||||
import pyodbc
|
import pyodbc
|
||||||
|
|
||||||
from openlp.plugins.songs.lib.worshipcenterproimport import WorshipCenterProImport
|
from openlp.plugins.songs.lib.worshipcenterproimport import WorshipCenterProImport
|
||||||
|
from tests.functional import patch, MagicMock
|
||||||
|
|
||||||
|
|
||||||
class TestRecord(object):
|
class TestRecord(object):
|
||||||
"""
|
"""
|
||||||
@ -23,6 +53,7 @@ class TestRecord(object):
|
|||||||
self.Field = field
|
self.Field = field
|
||||||
self.Value = value
|
self.Value = value
|
||||||
|
|
||||||
|
|
||||||
class WorshipCenterProImportLogger(WorshipCenterProImport):
|
class WorshipCenterProImportLogger(WorshipCenterProImport):
|
||||||
"""
|
"""
|
||||||
This class logs changes in the title instance variable
|
This class logs changes in the title instance variable
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2013 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2013 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 #
|
||||||
|
###############################################################################
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def assert_length(expected, iterable, msg=None):
|
||||||
|
if len(iterable) != expected:
|
||||||
|
if not msg:
|
||||||
|
msg = 'Expected length %s, got %s' % (expected, len(iterable))
|
||||||
|
raise AssertionError(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def convert_file_service_item(test_path, name, row=0):
|
||||||
|
service_file = os.path.join(test_path, name)
|
||||||
|
open_file = open(service_file, 'r')
|
||||||
|
try:
|
||||||
|
items = json.load(open_file)
|
||||||
|
first_line = items[row]
|
||||||
|
except IOError:
|
||||||
|
first_line = ''
|
||||||
|
finally:
|
||||||
|
open_file.close()
|
||||||
|
return first_line
|
||||||
|
|
Loading…
Reference in New Issue
Block a user