From 9d54d6351a9d094561f4e19d512a3fb0fddbb135 Mon Sep 17 00:00:00 2001 From: Phill Ridout Date: Sun, 7 Dec 2014 17:46:23 +0000 Subject: [PATCH 1/4] Tests --- openlp/core/utils/__init__.py | 1 + .../functional/openlp_core_utils/test_init.py | 75 ++++++++++++++++++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index df9d57fef..dcf25a439 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -414,6 +414,7 @@ def get_uno_command(): raise FileNotFoundError('Command not found') OPTIONS = '--nologo --norestore --minimized --nodefault --nofirststartwizard' + print(UNO_CONNECTION_TYPE) if UNO_CONNECTION_TYPE == 'pipe': CONNECTION = '"--accept=pipe,name=openlp_pipe;urp;"' else: diff --git a/tests/functional/openlp_core_utils/test_init.py b/tests/functional/openlp_core_utils/test_init.py index 0931014ab..d805965d7 100644 --- a/tests/functional/openlp_core_utils/test_init.py +++ b/tests/functional/openlp_core_utils/test_init.py @@ -32,6 +32,7 @@ Package to test the openlp.core.utils.actions package. from unittest import TestCase from openlp.core.common.settings import Settings +from openlp.core import utils from openlp.core.utils import VersionThread, get_application_version from tests.functional import MagicMock, patch from tests.helpers.testmixin import TestMixin @@ -62,9 +63,79 @@ class TestInitFunctions(TestMixin, TestCase): # WHEN: We check to see if the version is different . with patch('PyQt4.QtCore.QThread'),\ patch('openlp.core.utils.get_application_version') as mocked_get_application_version: - mocked_get_application_version.return_value = \ - {'version': '1.0.0', 'build': '', 'full': '2.0.4'} + mocked_get_application_version.return_value = {'version': '1.0.0', 'build': '', 'full': '2.0.4'} version_thread = VersionThread(mocked_main_window) version_thread.run() # 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') + + 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 = utils.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 = utils.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: The command 'soffice' should be called with the appropriate parameters + self.assertRaises(FileNotFoundError, utils.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: + """ + + original_type = utils.UNO_CONNECTION_TYPE + + # GIVEN: A patched 'which' method which returns 'libreoffice' + with patch('openlp.core.utils.which', **{'return_value': 'libreoffice'}): + + # WHEN: Calling get_uno_command + utils.UNO_CONNECTION_TYPE = 'socket' + result = utils.get_uno_command() + + # THEN: The command 'soffice' should be called with the appropriate parameters + self.assertEqual(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard' + ' "--accept=socket,host=localhost,port=2002;urp;"') + + utils.UNO_CONNECTION_TYPE = original_type From 2dd7a6e77652d198d74cbcb036efa6e45098276b Mon Sep 17 00:00:00 2001 From: Phill Ridout Date: Sun, 7 Dec 2014 17:53:32 +0000 Subject: [PATCH 2/4] remove print statment --- openlp/core/utils/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index efe005f34..aa03006c5 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -434,7 +434,6 @@ def get_uno_command(): raise FileNotFoundError('Command not found') OPTIONS = '--nologo --norestore --minimized --nodefault --nofirststartwizard' - print(UNO_CONNECTION_TYPE) if UNO_CONNECTION_TYPE == 'pipe': CONNECTION = '"--accept=pipe,name=openlp_pipe;urp;"' else: From 6fd061274864311b4859c5078f54530b99a49783 Mon Sep 17 00:00:00 2001 From: Phill Ridout Date: Sun, 7 Dec 2014 19:13:21 +0000 Subject: [PATCH 3/4] set connection type for each test --- .../functional/openlp_core_utils/test_init.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/tests/functional/openlp_core_utils/test_init.py b/tests/functional/openlp_core_utils/test_init.py index d805965d7..e8842ea5f 100644 --- a/tests/functional/openlp_core_utils/test_init.py +++ b/tests/functional/openlp_core_utils/test_init.py @@ -79,7 +79,8 @@ class TestInitFunctions(TestMixin, TestCase): with patch('openlp.core.utils.which', **{'side_effect': lambda command: {'libreoffice': '/usr/bin/libreoffice'}[command]}): - # WHEN: Calling get_uno_command + # WHEN: Calling get_uno_command with a pipe connection type + utils.UNO_CONNECTION_TYPE = 'pipe' result = utils.get_uno_command() # THEN: The command 'libreoffice' should be called with the appropriate parameters @@ -97,7 +98,8 @@ class TestInitFunctions(TestMixin, TestCase): with patch('openlp.core.utils.which', **{'side_effect': lambda command: {'libreoffice': None, 'soffice': '/usr/bin/soffice'}[command]}): - # WHEN: Calling get_uno_command + # WHEN: Calling get_uno_command with a pipe connection type + utils.UNO_CONNECTION_TYPE = 'pipe' result = utils.get_uno_command() # THEN: The command 'soffice' should be called with the appropriate parameters @@ -114,9 +116,10 @@ class TestInitFunctions(TestMixin, TestCase): # GIVEN: A patched 'which' method which returns None with patch('openlp.core.utils.which', **{'return_value': None}): - # WHEN: Calling get_uno_command + # WHEN: Calling get_uno_command with a pipe connection type + utils.UNO_CONNECTION_TYPE = 'pipe' - # THEN: The command 'soffice' should be called with the appropriate parameters + # THEN: a FileNotFoundError exception should be raised self.assertRaises(FileNotFoundError, utils.get_uno_command) def get_uno_command_connection_type_test(self): @@ -125,17 +128,13 @@ class TestInitFunctions(TestMixin, TestCase): :return: """ - original_type = utils.UNO_CONNECTION_TYPE - # GIVEN: A patched 'which' method which returns 'libreoffice' with patch('openlp.core.utils.which', **{'return_value': 'libreoffice'}): - # WHEN: Calling get_uno_command + # WHEN: Calling get_uno_command with a connection type other than pipe utils.UNO_CONNECTION_TYPE = 'socket' result = utils.get_uno_command() - # THEN: The command 'soffice' should be called with the appropriate parameters + # 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;"') - - utils.UNO_CONNECTION_TYPE = original_type From 2642a21d530dffe72ee453152a685149c6fb202e Mon Sep 17 00:00:00 2001 From: Phill Ridout Date: Mon, 8 Dec 2014 07:19:51 +0000 Subject: [PATCH 4/4] Refactor get_uno_command & get_uno_instance --- openlp/core/utils/__init__.py | 9 ++++---- .../functional/openlp_core_utils/test_init.py | 21 +++++++------------ 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index aa03006c5..0510c832b 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -64,7 +64,6 @@ log = logging.getLogger(__name__ + '.__init__') APPLICATION_VERSION = {} IMAGES_FILTER = None ICU_COLLATOR = None -UNO_CONNECTION_TYPE = 'pipe' CONTROL_CHARS = re.compile(r'[\x00-\x1F\x7F-\x9F]', re.UNICODE) INVALID_FILE_CHARS = re.compile(r'[\\/:\*\?"<>\|\+\[\]%]', 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 -def get_uno_command(): +def get_uno_command(connection_type='pipe'): """ Returns the UNO command to launch an openoffice.org instance. """ @@ -434,21 +433,21 @@ def get_uno_command(): raise FileNotFoundError('Command not found') OPTIONS = '--nologo --norestore --minimized --nodefault --nofirststartwizard' - if UNO_CONNECTION_TYPE == 'pipe': + if connection_type == 'pipe': CONNECTION = '"--accept=pipe,name=openlp_pipe;urp;"' else: CONNECTION = '"--accept=socket,host=localhost,port=2002;urp;"' 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. :param resolver: The UNO resolver to use to find a running instance. """ 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') else: return resolver.resolve('uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext') diff --git a/tests/functional/openlp_core_utils/test_init.py b/tests/functional/openlp_core_utils/test_init.py index e8842ea5f..563f0dc5b 100644 --- a/tests/functional/openlp_core_utils/test_init.py +++ b/tests/functional/openlp_core_utils/test_init.py @@ -32,8 +32,7 @@ Package to test the openlp.core.utils.actions package. from unittest import TestCase from openlp.core.common.settings import Settings -from openlp.core import utils -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.helpers.testmixin import TestMixin @@ -79,9 +78,8 @@ class TestInitFunctions(TestMixin, TestCase): with patch('openlp.core.utils.which', **{'side_effect': lambda command: {'libreoffice': '/usr/bin/libreoffice'}[command]}): - # WHEN: Calling get_uno_command with a pipe connection type - utils.UNO_CONNECTION_TYPE = 'pipe' - result = utils.get_uno_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' @@ -98,9 +96,8 @@ class TestInitFunctions(TestMixin, TestCase): with patch('openlp.core.utils.which', **{'side_effect': lambda command: {'libreoffice': None, 'soffice': '/usr/bin/soffice'}[command]}): - # WHEN: Calling get_uno_command with a pipe connection type - utils.UNO_CONNECTION_TYPE = 'pipe' - result = utils.get_uno_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' @@ -116,11 +113,10 @@ class TestInitFunctions(TestMixin, TestCase): # GIVEN: A patched 'which' method which returns None with patch('openlp.core.utils.which', **{'return_value': None}): - # WHEN: Calling get_uno_command with a pipe connection type - utils.UNO_CONNECTION_TYPE = 'pipe' + # WHEN: Calling get_uno_command # THEN: a FileNotFoundError exception should be raised - self.assertRaises(FileNotFoundError, utils.get_uno_command) + self.assertRaises(FileNotFoundError, get_uno_command) def get_uno_command_connection_type_test(self): """ @@ -132,8 +128,7 @@ class TestInitFunctions(TestMixin, TestCase): with patch('openlp.core.utils.which', **{'return_value': 'libreoffice'}): # WHEN: Calling get_uno_command with a connection type other than pipe - utils.UNO_CONNECTION_TYPE = 'socket' - result = utils.get_uno_command() + result = get_uno_command('socket') # THEN: The connection parameters should be set for socket self.assertEqual(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard'