forked from openlp/openlp
HEAD
This commit is contained in:
commit
fe02a80e26
@ -152,16 +152,19 @@ def set_button_tooltip(bar):
|
|||||||
"""
|
"""
|
||||||
for button in bar.buttons():
|
for button in bar.buttons():
|
||||||
if bar.standardButton(button) == QDialogButtonBox.Cancel:
|
if bar.standardButton(button) == QDialogButtonBox.Cancel:
|
||||||
tip = "Ignoring current changes and return to OpenLP"
|
button.setToolTip(translate('OpenLP.SourceSelectForm',
|
||||||
|
'Ignoring current changes and return to OpenLP'))
|
||||||
elif bar.standardButton(button) == QDialogButtonBox.Reset:
|
elif bar.standardButton(button) == QDialogButtonBox.Reset:
|
||||||
tip = "Delete all user-defined text and revert to PJLink default text"
|
button.setToolTip(translate('OpenLP.SourceSelectForm',
|
||||||
|
'Delete all user-defined text and revert to PJLink default text'))
|
||||||
elif bar.standardButton(button) == QDialogButtonBox.Discard:
|
elif bar.standardButton(button) == QDialogButtonBox.Discard:
|
||||||
tip = "Discard changes and reset to previous user-defined text"
|
button.setToolTip(translate('OpenLP.SourceSelectForm',
|
||||||
|
'Discard changes and reset to previous user-defined text'))
|
||||||
elif bar.standardButton(button) == QDialogButtonBox.Ok:
|
elif bar.standardButton(button) == QDialogButtonBox.Ok:
|
||||||
tip = "Save changes and return to OpenLP"
|
button.setToolTip(translate('OpenLP.SourceSelectForm',
|
||||||
|
'Save changes and return to OpenLP'))
|
||||||
else:
|
else:
|
||||||
tip = ""
|
log.debug('No tooltip for button {}'.format(button.text()))
|
||||||
button.setToolTip(tip)
|
|
||||||
|
|
||||||
|
|
||||||
class FingerTabBarWidget(QTabBar):
|
class FingerTabBarWidget(QTabBar):
|
||||||
@ -237,12 +240,13 @@ class SourceSelectTabs(QDialog):
|
|||||||
"""
|
"""
|
||||||
log.debug('Initializing SourceSelectTabs()')
|
log.debug('Initializing SourceSelectTabs()')
|
||||||
super(SourceSelectTabs, self).__init__(parent)
|
super(SourceSelectTabs, self).__init__(parent)
|
||||||
|
self.setMinimumWidth(350)
|
||||||
self.projectordb = projectordb
|
self.projectordb = projectordb
|
||||||
self.edit = edit
|
self.edit = edit
|
||||||
if self.edit:
|
if self.edit:
|
||||||
title = translate('OpenLP.SourceSelectForm', 'Select Projector Source')
|
|
||||||
else:
|
|
||||||
title = translate('OpenLP.SourceSelectForm', 'Edit Projector Source Text')
|
title = translate('OpenLP.SourceSelectForm', 'Edit Projector Source Text')
|
||||||
|
else:
|
||||||
|
title = translate('OpenLP.SourceSelectForm', 'Select Projector Source')
|
||||||
self.setWindowTitle(title)
|
self.setWindowTitle(title)
|
||||||
self.setObjectName('source_select_tabs')
|
self.setObjectName('source_select_tabs')
|
||||||
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
|
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
|
||||||
@ -286,6 +290,10 @@ class SourceSelectTabs(QDialog):
|
|||||||
thistab = self.tabwidget.addTab(tab, PJLINK_DEFAULT_SOURCES[key])
|
thistab = self.tabwidget.addTab(tab, PJLINK_DEFAULT_SOURCES[key])
|
||||||
if buttonchecked:
|
if buttonchecked:
|
||||||
self.tabwidget.setCurrentIndex(thistab)
|
self.tabwidget.setCurrentIndex(thistab)
|
||||||
|
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Reset |
|
||||||
|
QtGui.QDialogButtonBox.Discard |
|
||||||
|
QtGui.QDialogButtonBox.Ok |
|
||||||
|
QtGui.QDialogButtonBox.Cancel)
|
||||||
else:
|
else:
|
||||||
for key in keys:
|
for key in keys:
|
||||||
(tab, button_count, buttonchecked) = Build_Tab(group=self.button_group,
|
(tab, button_count, buttonchecked) = Build_Tab(group=self.button_group,
|
||||||
@ -297,10 +305,8 @@ class SourceSelectTabs(QDialog):
|
|||||||
thistab = self.tabwidget.addTab(tab, PJLINK_DEFAULT_SOURCES[key])
|
thistab = self.tabwidget.addTab(tab, PJLINK_DEFAULT_SOURCES[key])
|
||||||
if buttonchecked:
|
if buttonchecked:
|
||||||
self.tabwidget.setCurrentIndex(thistab)
|
self.tabwidget.setCurrentIndex(thistab)
|
||||||
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Reset |
|
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Ok |
|
||||||
QtGui.QDialogButtonBox.Discard |
|
QtGui.QDialogButtonBox.Cancel)
|
||||||
QtGui.QDialogButtonBox.Ok |
|
|
||||||
QtGui.QDialogButtonBox.Cancel)
|
|
||||||
self.button_box.clicked.connect(self.button_clicked)
|
self.button_box.clicked.connect(self.button_clicked)
|
||||||
self.layout.addWidget(self.button_box)
|
self.layout.addWidget(self.button_box)
|
||||||
set_button_tooltip(self.button_box)
|
set_button_tooltip(self.button_box)
|
||||||
@ -321,9 +327,9 @@ class SourceSelectTabs(QDialog):
|
|||||||
if self.button_box.standardButton(button) == self.button_box.Cancel:
|
if self.button_box.standardButton(button) == self.button_box.Cancel:
|
||||||
self.done(0)
|
self.done(0)
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Reset:
|
elif self.button_box.standardButton(button) == self.button_box.Reset:
|
||||||
self.delete_sources()
|
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Discard:
|
|
||||||
self.done(100)
|
self.done(100)
|
||||||
|
elif self.button_box.standardButton(button) == self.button_box.Discard:
|
||||||
|
self.delete_sources()
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Ok:
|
elif self.button_box.standardButton(button) == self.button_box.Ok:
|
||||||
return self.accept_me()
|
return self.accept_me()
|
||||||
else:
|
else:
|
||||||
@ -331,9 +337,11 @@ class SourceSelectTabs(QDialog):
|
|||||||
|
|
||||||
def delete_sources(self):
|
def delete_sources(self):
|
||||||
msg = QtGui.QMessageBox()
|
msg = QtGui.QMessageBox()
|
||||||
msg.setText('Delete entries for this projector')
|
msg.setText(translate('OpenLP.SourceSelectForm', 'Delete entries for this projector'))
|
||||||
msg.setInformativeText('Are you sure you want to delete ALL user-defined '
|
msg.setInformativeText(translate('OpenLP.SourceSelectForm',
|
||||||
'source input text for this projector?')
|
'Are you sure you want to delete ALL user-defined '),
|
||||||
|
translate('OpenLP.SourceSelectForm',
|
||||||
|
'source input text for this projector?'))
|
||||||
msg.setStandardButtons(msg.Cancel | msg.Ok)
|
msg.setStandardButtons(msg.Cancel | msg.Ok)
|
||||||
msg.setDefaultButton(msg.Cancel)
|
msg.setDefaultButton(msg.Cancel)
|
||||||
ans = msg.exec_()
|
ans = msg.exec_()
|
||||||
@ -382,7 +390,11 @@ class SourceSelectSingle(QDialog):
|
|||||||
log.debug('Initializing SourceSelectSingle()')
|
log.debug('Initializing SourceSelectSingle()')
|
||||||
self.projectordb = projectordb
|
self.projectordb = projectordb
|
||||||
super(SourceSelectSingle, self).__init__(parent)
|
super(SourceSelectSingle, self).__init__(parent)
|
||||||
self.setWindowTitle(translate('OpenLP.SourceSelectSingle', 'Select Projector Source'))
|
self.edit = edit
|
||||||
|
if self.edit:
|
||||||
|
title = translate('OpenLP.SourceSelectForm', 'Edit Projector Source Text')
|
||||||
|
else:
|
||||||
|
title = translate('OpenLP.SourceSelectForm', 'Select Projector Source')
|
||||||
self.setObjectName('source_select_single')
|
self.setObjectName('source_select_single')
|
||||||
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
|
self.setWindowIcon(build_icon(':/icon/openlp-log-32x32.png'))
|
||||||
self.setModal(True)
|
self.setModal(True)
|
||||||
@ -418,6 +430,10 @@ class SourceSelectSingle(QDialog):
|
|||||||
item.setText(source_item.text)
|
item.setText(source_item.text)
|
||||||
self.layout.addRow(PJLINK_DEFAULT_CODES[key], item)
|
self.layout.addRow(PJLINK_DEFAULT_CODES[key], item)
|
||||||
self.button_group.append(item)
|
self.button_group.append(item)
|
||||||
|
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Reset |
|
||||||
|
QtGui.QDialogButtonBox.Discard |
|
||||||
|
QtGui.QDialogButtonBox.Ok |
|
||||||
|
QtGui.QDialogButtonBox.Cancel)
|
||||||
else:
|
else:
|
||||||
for key in keys:
|
for key in keys:
|
||||||
source_text = self.projectordb.get_source_by_code(code=key, projector_id=self.projector.db_item.id)
|
source_text = self.projectordb.get_source_by_code(code=key, projector_id=self.projector.db_item.id)
|
||||||
@ -427,10 +443,8 @@ class SourceSelectSingle(QDialog):
|
|||||||
self.layout.addWidget(button)
|
self.layout.addWidget(button)
|
||||||
self.button_group.addButton(button, int(key))
|
self.button_group.addButton(button, int(key))
|
||||||
button_list.append(key)
|
button_list.append(key)
|
||||||
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Reset |
|
self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Ok |
|
||||||
QtGui.QDialogButtonBox.Discard |
|
QtGui.QDialogButtonBox.Cancel)
|
||||||
QtGui.QDialogButtonBox.Ok |
|
|
||||||
QtGui.QDialogButtonBox.Cancel)
|
|
||||||
self.button_box.clicked.connect(self.button_clicked)
|
self.button_box.clicked.connect(self.button_clicked)
|
||||||
self.layout.addWidget(self.button_box)
|
self.layout.addWidget(self.button_box)
|
||||||
self.setMinimumHeight(key_count*25)
|
self.setMinimumHeight(key_count*25)
|
||||||
@ -452,9 +466,9 @@ class SourceSelectSingle(QDialog):
|
|||||||
if self.button_box.standardButton(button) == self.button_box.Cancel:
|
if self.button_box.standardButton(button) == self.button_box.Cancel:
|
||||||
self.done(0)
|
self.done(0)
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Reset:
|
elif self.button_box.standardButton(button) == self.button_box.Reset:
|
||||||
self.delete_sources()
|
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Discard:
|
|
||||||
self.done(100)
|
self.done(100)
|
||||||
|
elif self.button_box.standardButton(button) == self.button_box.Discard:
|
||||||
|
self.delete_sources()
|
||||||
elif self.button_box.standardButton(button) == self.button_box.Ok:
|
elif self.button_box.standardButton(button) == self.button_box.Ok:
|
||||||
return self.accept_me()
|
return self.accept_me()
|
||||||
else:
|
else:
|
||||||
@ -462,9 +476,11 @@ class SourceSelectSingle(QDialog):
|
|||||||
|
|
||||||
def delete_sources(self):
|
def delete_sources(self):
|
||||||
msg = QtGui.QMessageBox()
|
msg = QtGui.QMessageBox()
|
||||||
msg.setText('Delete entries for this projector')
|
msg.setText(translate('OpenLP.SourceSelectForm', 'Delete entries for this projector'))
|
||||||
msg.setInformativeText('Are you sure you want to delete ALL user-defined '
|
msg.setInformativeText(translate('OpenLP.SourceSelectForm',
|
||||||
'source input text for this projector?')
|
'Are you sure you want to delete ALL user-defined '),
|
||||||
|
translate('OpenLP.SourceSelectForm',
|
||||||
|
'source input text for this projector?'))
|
||||||
msg.setStandardButtons(msg.Cancel | msg.Ok)
|
msg.setStandardButtons(msg.Cancel | msg.Ok)
|
||||||
msg.setDefaultButton(msg.Cancel)
|
msg.setDefaultButton(msg.Cancel)
|
||||||
ans = msg.exec_()
|
ans = msg.exec_()
|
||||||
|
@ -64,7 +64,6 @@ log = logging.getLogger(__name__ + '.__init__')
|
|||||||
APPLICATION_VERSION = {}
|
APPLICATION_VERSION = {}
|
||||||
IMAGES_FILTER = None
|
IMAGES_FILTER = None
|
||||||
ICU_COLLATOR = None
|
ICU_COLLATOR = None
|
||||||
UNO_CONNECTION_TYPE = 'pipe'
|
|
||||||
CONTROL_CHARS = re.compile(r'[\x00-\x1F\x7F-\x9F]', re.UNICODE)
|
CONTROL_CHARS = re.compile(r'[\x00-\x1F\x7F-\x9F]', re.UNICODE)
|
||||||
INVALID_FILE_CHARS = re.compile(r'[\\/:\*\?"<>\|\+\[\]%]', re.UNICODE)
|
INVALID_FILE_CHARS = re.compile(r'[\\/:\*\?"<>\|\+\[\]%]', re.UNICODE)
|
||||||
DIGITS_OR_NONDIGITS = re.compile(r'\d+|\D+', re.UNICODE)
|
DIGITS_OR_NONDIGITS = re.compile(r'\d+|\D+', re.UNICODE)
|
||||||
@ -423,7 +422,7 @@ def get_web_page(url, header=None, update_openlp=False):
|
|||||||
return page
|
return page
|
||||||
|
|
||||||
|
|
||||||
def get_uno_command():
|
def get_uno_command(connection_type='pipe'):
|
||||||
"""
|
"""
|
||||||
Returns the UNO command to launch an openoffice.org instance.
|
Returns the UNO command to launch an openoffice.org instance.
|
||||||
"""
|
"""
|
||||||
@ -434,21 +433,21 @@ def get_uno_command():
|
|||||||
raise FileNotFoundError('Command not found')
|
raise FileNotFoundError('Command not found')
|
||||||
|
|
||||||
OPTIONS = '--nologo --norestore --minimized --nodefault --nofirststartwizard'
|
OPTIONS = '--nologo --norestore --minimized --nodefault --nofirststartwizard'
|
||||||
if UNO_CONNECTION_TYPE == 'pipe':
|
if connection_type == 'pipe':
|
||||||
CONNECTION = '"--accept=pipe,name=openlp_pipe;urp;"'
|
CONNECTION = '"--accept=pipe,name=openlp_pipe;urp;"'
|
||||||
else:
|
else:
|
||||||
CONNECTION = '"--accept=socket,host=localhost,port=2002;urp;"'
|
CONNECTION = '"--accept=socket,host=localhost,port=2002;urp;"'
|
||||||
return '%s %s %s' % (command, OPTIONS, CONNECTION)
|
return '%s %s %s' % (command, OPTIONS, CONNECTION)
|
||||||
|
|
||||||
|
|
||||||
def get_uno_instance(resolver):
|
def get_uno_instance(resolver, connection_type='pipe'):
|
||||||
"""
|
"""
|
||||||
Returns a running openoffice.org instance.
|
Returns a running openoffice.org instance.
|
||||||
|
|
||||||
:param resolver: The UNO resolver to use to find a running instance.
|
:param resolver: The UNO resolver to use to find a running instance.
|
||||||
"""
|
"""
|
||||||
log.debug('get UNO Desktop Openoffice - resolve')
|
log.debug('get UNO Desktop Openoffice - resolve')
|
||||||
if UNO_CONNECTION_TYPE == 'pipe':
|
if connection_type == 'pipe':
|
||||||
return resolver.resolve('uno:pipe,name=openlp_pipe;urp;StarOffice.ComponentContext')
|
return resolver.resolve('uno:pipe,name=openlp_pipe;urp;StarOffice.ComponentContext')
|
||||||
else:
|
else:
|
||||||
return resolver.resolve('uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext')
|
return resolver.resolve('uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext')
|
||||||
|
@ -32,7 +32,7 @@ Package to test the openlp.core.utils.actions package.
|
|||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from openlp.core.common.settings import Settings
|
from openlp.core.common.settings import Settings
|
||||||
from openlp.core.utils import VersionThread, get_application_version
|
from openlp.core.utils import VersionThread, get_application_version, get_uno_command
|
||||||
from tests.functional import MagicMock, patch
|
from tests.functional import MagicMock, patch
|
||||||
from tests.helpers.testmixin import TestMixin
|
from tests.helpers.testmixin import TestMixin
|
||||||
|
|
||||||
@ -62,9 +62,74 @@ class TestInitFunctions(TestMixin, TestCase):
|
|||||||
# WHEN: We check to see if the version is different .
|
# WHEN: We check to see if the version is different .
|
||||||
with patch('PyQt4.QtCore.QThread'),\
|
with patch('PyQt4.QtCore.QThread'),\
|
||||||
patch('openlp.core.utils.get_application_version') as mocked_get_application_version:
|
patch('openlp.core.utils.get_application_version') as mocked_get_application_version:
|
||||||
mocked_get_application_version.return_value = \
|
mocked_get_application_version.return_value = {'version': '1.0.0', 'build': '', 'full': '2.0.4'}
|
||||||
{'version': '1.0.0', 'build': '', 'full': '2.0.4'}
|
|
||||||
version_thread = VersionThread(mocked_main_window)
|
version_thread = VersionThread(mocked_main_window)
|
||||||
version_thread.run()
|
version_thread.run()
|
||||||
# THEN: If the version has changed the main window is notified
|
# THEN: If the version has changed the main window is notified
|
||||||
self.assertTrue(mocked_main_window.emit.called, 'The main windows should have been notified')
|
self.assertTrue(mocked_main_window.emit.called, 'The main windows should have been notified')
|
||||||
|
|
||||||
|
def get_uno_command_libreoffice_command_exists_test(self):
|
||||||
|
"""
|
||||||
|
Test the ``get_uno_command`` function uses the libreoffice command when available.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
# GIVEN: A patched 'which' method which returns a path when called with 'libreoffice'
|
||||||
|
with patch('openlp.core.utils.which',
|
||||||
|
**{'side_effect': lambda command: {'libreoffice': '/usr/bin/libreoffice'}[command]}):
|
||||||
|
|
||||||
|
# WHEN: Calling get_uno_command
|
||||||
|
result = get_uno_command()
|
||||||
|
|
||||||
|
# THEN: The command 'libreoffice' should be called with the appropriate parameters
|
||||||
|
self.assertEquals(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
|
||||||
|
' "--accept=pipe,name=openlp_pipe;urp;"')
|
||||||
|
|
||||||
|
def get_uno_command_only_soffice_command_exists_test(self):
|
||||||
|
"""
|
||||||
|
Test the ``get_uno_command`` function uses the soffice command when the libreoffice command is not available.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
# GIVEN: A patched 'which' method which returns None when called with 'libreoffice' and a path when called with
|
||||||
|
# 'soffice'
|
||||||
|
with patch('openlp.core.utils.which',
|
||||||
|
**{'side_effect': lambda command: {'libreoffice': None, 'soffice': '/usr/bin/soffice'}[command]}):
|
||||||
|
|
||||||
|
# WHEN: Calling get_uno_command
|
||||||
|
result = get_uno_command()
|
||||||
|
|
||||||
|
# THEN: The command 'soffice' should be called with the appropriate parameters
|
||||||
|
self.assertEquals(result, 'soffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
|
||||||
|
' "--accept=pipe,name=openlp_pipe;urp;"')
|
||||||
|
|
||||||
|
def get_uno_command_when_no_command_exists_test(self):
|
||||||
|
"""
|
||||||
|
Test the ``get_uno_command`` function raises an FileNotFoundError when neither the libreoffice or soffice
|
||||||
|
commands are available.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
# GIVEN: A patched 'which' method which returns None
|
||||||
|
with patch('openlp.core.utils.which', **{'return_value': None}):
|
||||||
|
|
||||||
|
# WHEN: Calling get_uno_command
|
||||||
|
|
||||||
|
# THEN: a FileNotFoundError exception should be raised
|
||||||
|
self.assertRaises(FileNotFoundError, get_uno_command)
|
||||||
|
|
||||||
|
def get_uno_command_connection_type_test(self):
|
||||||
|
"""
|
||||||
|
Test the ``get_uno_command`` function when the connection type is anything other than pipe.
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
# GIVEN: A patched 'which' method which returns 'libreoffice'
|
||||||
|
with patch('openlp.core.utils.which', **{'return_value': 'libreoffice'}):
|
||||||
|
|
||||||
|
# WHEN: Calling get_uno_command with a connection type other than pipe
|
||||||
|
result = get_uno_command('socket')
|
||||||
|
|
||||||
|
# THEN: The connection parameters should be set for socket
|
||||||
|
self.assertEqual(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard'
|
||||||
|
' "--accept=socket,host=localhost,port=2002;urp;"')
|
||||||
|
@ -94,11 +94,9 @@ class TestProjectorManager(TestCase, TestMixin):
|
|||||||
self.projector_manager.bootstrap_initialise()
|
self.projector_manager.bootstrap_initialise()
|
||||||
self.projector_manager.bootstrap_post_set_up()
|
self.projector_manager.bootstrap_post_set_up()
|
||||||
|
|
||||||
# THEN: verify calls to retrieve saved projectors
|
# THEN: verify calls to retrieve saved projectors and edit page initialized
|
||||||
self.assertEqual(1, self.projector_manager._load_projectors.call_count,
|
self.assertEqual(1, self.projector_manager._load_projectors.call_count,
|
||||||
'Initialization should have called load_projectors()')
|
'Initialization should have called load_projectors()')
|
||||||
|
|
||||||
# THEN: Verify edit page is initialized
|
|
||||||
self.assertEqual(type(self.projector_manager.projector_form), ProjectorEditForm,
|
self.assertEqual(type(self.projector_manager.projector_form), ProjectorEditForm,
|
||||||
'Initialization should have created a Projector Edit Form')
|
'Initialization should have created a Projector Edit Form')
|
||||||
self.assertIs(self.projector_manager.projectordb,
|
self.assertIs(self.projector_manager.projectordb,
|
||||||
|
79
tests/interfaces/openlp_core_ui/test_projectorsourceform.py
Normal file
79
tests/interfaces/openlp_core_ui/test_projectorsourceform.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2014 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
|
||||||
|
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
|
||||||
|
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
|
||||||
|
# Christian Richter, Philip Ridout, Ken Roberts, 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 #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
:mod: `tests.interfaces.openlp_core_ui.test_projectorsourceform` module
|
||||||
|
|
||||||
|
Tests for the Projector Source Select form.
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
log.debug('test_projectorsourceform loaded')
|
||||||
|
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from tests.helpers.testmixin import TestMixin
|
||||||
|
from openlp.core.lib.projector.constants import PJLINK_DEFAULT_CODES, PJLINK_DEFAULT_SOURCES
|
||||||
|
|
||||||
|
from openlp.core.ui.projector.sourceselectform import source_group
|
||||||
|
|
||||||
|
|
||||||
|
def build_source_dict():
|
||||||
|
"""
|
||||||
|
Builds a source dictionary to verify source_group returns a valid dictionary of dictionary items
|
||||||
|
|
||||||
|
:returns: dictionary of valid PJLink source codes grouped by PJLink source group
|
||||||
|
"""
|
||||||
|
test_group = {}
|
||||||
|
for group in PJLINK_DEFAULT_SOURCES.keys():
|
||||||
|
test_group[group] = {}
|
||||||
|
for key in PJLINK_DEFAULT_CODES:
|
||||||
|
test_group[key[0]][key] = PJLINK_DEFAULT_CODES[key]
|
||||||
|
return test_group
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectorSourceFormTest(TestCase, TestMixin):
|
||||||
|
"""
|
||||||
|
Test class for the Projector Source Select form module
|
||||||
|
"""
|
||||||
|
def source_dict_test(self):
|
||||||
|
"""
|
||||||
|
Test that source list dict returned from sourceselectform module is a valid dict with proper entries
|
||||||
|
"""
|
||||||
|
# GIVEN: A list of inputs
|
||||||
|
codes = []
|
||||||
|
for item in PJLINK_DEFAULT_CODES.keys():
|
||||||
|
codes.append(item)
|
||||||
|
codes.sort()
|
||||||
|
|
||||||
|
# WHEN: projector.sourceselectform.source_select() is called
|
||||||
|
check = source_group(codes, PJLINK_DEFAULT_CODES)
|
||||||
|
|
||||||
|
# THEN: return dictionary should match test dictionary
|
||||||
|
self.assertEquals(check, build_source_dict(),
|
||||||
|
"Source group dictionary should match test dictionary")
|
Loading…
Reference in New Issue
Block a user