From 2df1169ea8ce2deae0991a00f41cba74be6e0fe1 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 5 Apr 2016 19:11:42 +0100 Subject: [PATCH] fix tests --- openlp/core/utils/__init__.py | 10 +- .../openlp_core_common/test_init.py | 147 +++++++++++++++++- .../openlp_core_utils/test_utils.py | 146 ----------------- 3 files changed, 147 insertions(+), 156 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 76cfad0e8..653717c93 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -32,15 +32,7 @@ import urllib.request from http.client import HTTPException from random import randint -from openlp.core.common import Registry, is_win, is_macosx - -if not is_win() and not is_macosx(): - try: - from xdg import BaseDirectory - XDG_BASE_AVAILABLE = True - except ImportError: - BaseDirectory = None - XDG_BASE_AVAILABLE = False +from openlp.core.common import Registry log = logging.getLogger(__name__ + '.__init__') diff --git a/tests/functional/openlp_core_common/test_init.py b/tests/functional/openlp_core_common/test_init.py index dd6616ccb..452a75a95 100644 --- a/tests/functional/openlp_core_common/test_init.py +++ b/tests/functional/openlp_core_common/test_init.py @@ -22,9 +22,11 @@ """ Functional tests to test the AppLocation class and related methods. """ +import os from unittest import TestCase -from openlp.core.common import add_actions, get_uno_instance, get_uno_command +from openlp.core.common import add_actions, get_uno_instance, get_uno_command, delete_file, get_filesystem_encoding, \ + split_filename, clean_filename from tests.functional import MagicMock, patch from tests.helpers.testmixin import TestMixin @@ -196,3 +198,146 @@ class TestInit(TestCase, TestMixin): self.assertEqual(result, 'libreoffice --nologo --norestore --minimized --nodefault --nofirststartwizard' ' "--accept=socket,host=localhost,port=2002;urp;"') + + def get_filesystem_encoding_sys_function_not_called_test(self): + """ + Test the get_filesystem_encoding() function does not call the sys.getdefaultencoding() function + """ + # GIVEN: sys.getfilesystemencoding returns "cp1252" + with patch('openlp.core.common.sys.getfilesystemencoding') as mocked_getfilesystemencoding, \ + patch('openlp.core.common.sys.getdefaultencoding') as mocked_getdefaultencoding: + mocked_getfilesystemencoding.return_value = 'cp1252' + + # WHEN: get_filesystem_encoding() is called + result = get_filesystem_encoding() + + # THEN: getdefaultencoding should have been called + mocked_getfilesystemencoding.assert_called_with() + self.assertEqual(0, mocked_getdefaultencoding.called, 'getdefaultencoding should not have been called') + 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" + with patch('openlp.core.common.sys.getfilesystemencoding') as mocked_getfilesystemencoding, \ + patch('openlp.core.common.sys.getdefaultencoding') as mocked_getdefaultencoding: + mocked_getfilesystemencoding.return_value = None + mocked_getdefaultencoding.return_value = 'utf-8' + + # WHEN: get_filesystem_encoding() is called + result = get_filesystem_encoding() + + # THEN: getdefaultencoding should have been called + mocked_getfilesystemencoding.assert_called_with() + mocked_getdefaultencoding.assert_called_with() + self.assertEqual('utf-8', result, 'The result should be "utf-8"') + + def split_filename_with_file_path_test(self): + """ + Test the split_filename() function with a path to a file + """ + # GIVEN: A path to a file. + if os.name == 'nt': + file_path = 'C:\\home\\user\\myfile.txt' + wanted_result = ('C:\\home\\user', 'myfile.txt') + else: + file_path = '/home/user/myfile.txt' + wanted_result = ('/home/user', 'myfile.txt') + with patch('openlp.core.common.os.path.isfile') as mocked_is_file: + mocked_is_file.return_value = True + + # WHEN: Split the file name. + result = split_filename(file_path) + + # THEN: A tuple should be 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): + """ + Test the split_filename() function with a path to a directory + """ + # GIVEN: A path to a dir. + if os.name == 'nt': + file_path = 'C:\\home\\user\\mydir' + wanted_result = ('C:\\home\\user\\mydir', '') + else: + file_path = '/home/user/mydir' + wanted_result = ('/home/user/mydir', '') + with patch('openlp.core.common.os.path.isfile') as mocked_is_file: + mocked_is_file.return_value = False + + # WHEN: Split the file name. + result = split_filename(file_path) + + # THEN: A tuple should be returned. + self.assertEqual(wanted_result, result, + 'A two-entry tuple with the directory and file name (empty) should have been returned.') + + def clean_filename_test(self): + """ + Test the clean_filename() function + """ + # GIVEN: A invalid file name and the valid file name. + invalid_name = 'A_file_with_invalid_characters_[\\/:\*\?"<>\|\+\[\]%].py' + wanted_name = 'A_file_with_invalid_characters______________________.py' + + # WHEN: Clean the name. + result = clean_filename(invalid_name) + + # THEN: The file name should be cleaned. + self.assertEqual(wanted_name, result, 'The file name should not contain any special characters.') + + def delete_file_no_path_test(self): + """ + Test the delete_file function when called with out a valid path + """ + # GIVEN: A blank path + # WEHN: Calling delete_file + result = delete_file('') + + # THEN: delete_file should return False + self.assertFalse(result, "delete_file should return False when called with ''") + + def delete_file_path_success_test(self): + """ + Test the delete_file function when it successfully deletes a file + """ + # GIVEN: A mocked os which returns True when os.path.exists is called + with patch('openlp.core.common.os', **{'path.exists.return_value': False}): + + # WHEN: Calling delete_file with a file path + result = delete_file('path/file.ext') + + # THEN: delete_file should return True + self.assertTrue(result, 'delete_file should return True when it successfully deletes a file') + + def delete_file_path_no_file_exists_test(self): + """ + Test the delete_file function when the file to remove does not exist + """ + # GIVEN: A mocked os which returns False when os.path.exists is called + with patch('openlp.core.common.os', **{'path.exists.return_value': False}): + + # WHEN: Calling delete_file with a file path + result = delete_file('path/file.ext') + + # THEN: delete_file should return True + self.assertTrue(result, 'delete_file should return True when the file doesnt exist') + + def delete_file_path_exception_test(self): + """ + Test the delete_file function when os.remove raises an exception + """ + # GIVEN: A mocked os which returns True when os.path.exists is called and raises an OSError when os.remove is + # called. + with patch('openlp.core.common.os', **{'path.exists.return_value': True, 'path.exists.side_effect': OSError}), \ + patch('openlp.core.common.log') as mocked_log: + + # WHEN: Calling delete_file with a file path + result = delete_file('path/file.ext') + + # THEN: delete_file should log and exception and return False + self.assertEqual(mocked_log.exception.call_count, 1) + self.assertFalse(result, 'delete_file should return False when os.remove raises an OSError') diff --git a/tests/functional/openlp_core_utils/test_utils.py b/tests/functional/openlp_core_utils/test_utils.py index 614be7bb9..4035fceef 100644 --- a/tests/functional/openlp_core_utils/test_utils.py +++ b/tests/functional/openlp_core_utils/test_utils.py @@ -22,11 +22,9 @@ """ Functional tests to test the AppLocation class and related methods. """ -import os from unittest import TestCase from openlp.core.utils import _get_user_agent, get_web_page -from openlp.core.common import get_filesystem_encoding, split_filename, delete_file, clean_filename from tests.functional import MagicMock, patch @@ -35,150 +33,6 @@ class TestUtils(TestCase): """ A test suite to test out various methods around the AppLocation class. """ - - def get_filesystem_encoding_sys_function_not_called_test(self): - """ - 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, \ - patch('openlp.core.utils.sys.getdefaultencoding') as mocked_getdefaultencoding: - mocked_getfilesystemencoding.return_value = 'cp1252' - - # WHEN: get_filesystem_encoding() is called - result = get_filesystem_encoding() - - # THEN: getdefaultencoding should have been called - mocked_getfilesystemencoding.assert_called_with() - self.assertEqual(0, mocked_getdefaultencoding.called, 'getdefaultencoding should not have been called') - 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" - 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_getdefaultencoding.return_value = 'utf-8' - - # WHEN: get_filesystem_encoding() is called - result = get_filesystem_encoding() - - # THEN: getdefaultencoding should have been called - mocked_getfilesystemencoding.assert_called_with() - mocked_getdefaultencoding.assert_called_with() - self.assertEqual('utf-8', result, 'The result should be "utf-8"') - - def split_filename_with_file_path_test(self): - """ - Test the split_filename() function with a path to a file - """ - # GIVEN: A path to a file. - if os.name == 'nt': - file_path = 'C:\\home\\user\\myfile.txt' - wanted_result = ('C:\\home\\user', 'myfile.txt') - else: - file_path = '/home/user/myfile.txt' - wanted_result = ('/home/user', 'myfile.txt') - with patch('openlp.core.utils.os.path.isfile') as mocked_is_file: - mocked_is_file.return_value = True - - # WHEN: Split the file name. - result = split_filename(file_path) - - # THEN: A tuple should be 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): - """ - Test the split_filename() function with a path to a directory - """ - # GIVEN: A path to a dir. - if os.name == 'nt': - file_path = 'C:\\home\\user\\mydir' - wanted_result = ('C:\\home\\user\\mydir', '') - else: - file_path = '/home/user/mydir' - wanted_result = ('/home/user/mydir', '') - with patch('openlp.core.utils.os.path.isfile') as mocked_is_file: - mocked_is_file.return_value = False - - # WHEN: Split the file name. - result = split_filename(file_path) - - # THEN: A tuple should be returned. - self.assertEqual(wanted_result, result, - 'A two-entry tuple with the directory and file name (empty) should have been returned.') - - def clean_filename_test(self): - """ - Test the clean_filename() function - """ - # GIVEN: A invalid file name and the valid file name. - invalid_name = 'A_file_with_invalid_characters_[\\/:\*\?"<>\|\+\[\]%].py' - wanted_name = 'A_file_with_invalid_characters______________________.py' - - # WHEN: Clean the name. - result = clean_filename(invalid_name) - - # THEN: The file name should be cleaned. - self.assertEqual(wanted_name, result, 'The file name should not contain any special characters.') - - def delete_file_no_path_test(self): - """ - Test the delete_file function when called with out a valid path - """ - # GIVEN: A blank path - # WEHN: Calling delete_file - result = delete_file('') - - # THEN: delete_file should return False - self.assertFalse(result, "delete_file should return False when called with ''") - - def delete_file_path_success_test(self): - """ - Test the delete_file function when it successfully deletes a file - """ - # GIVEN: A mocked os which returns True when os.path.exists is called - with patch('openlp.core.utils.os', **{'path.exists.return_value': False}): - - # WHEN: Calling delete_file with a file path - result = delete_file('path/file.ext') - - # THEN: delete_file should return True - self.assertTrue(result, 'delete_file should return True when it successfully deletes a file') - - def delete_file_path_no_file_exists_test(self): - """ - Test the delete_file function when the file to remove does not exist - """ - # GIVEN: A mocked os which returns False when os.path.exists is called - with patch('openlp.core.utils.os', **{'path.exists.return_value': False}): - - # WHEN: Calling delete_file with a file path - result = delete_file('path/file.ext') - - # THEN: delete_file should return True - self.assertTrue(result, 'delete_file should return True when the file doesnt exist') - - def delete_file_path_exception_test(self): - """ - Test the delete_file function when os.remove raises an exception - """ - # GIVEN: A mocked os which returns True when os.path.exists is called and raises an OSError when os.remove is - # called. - with patch('openlp.core.utils.os', **{'path.exists.return_value': True, 'path.exists.side_effect': OSError}), \ - patch('openlp.core.utils.log') as mocked_log: - - # WHEN: Calling delete_file with a file path - result = delete_file('path/file.ext') - - # THEN: delete_file should log and exception and return False - self.assertEqual(mocked_log.exception.call_count, 1) - self.assertFalse(result, 'delete_file should return False when os.remove raises an OSError') - def get_user_agent_linux_test(self): """ Test that getting a user agent on Linux returns a user agent suitable for Linux