2012-12-06 22:19:17 +00:00
|
|
|
"""
|
|
|
|
Package to test the openlp.core.lib package.
|
|
|
|
"""
|
|
|
|
from unittest import TestCase
|
|
|
|
|
2012-12-10 20:48:37 +00:00
|
|
|
from mock import MagicMock, patch, call
|
2012-12-07 17:47:33 +00:00
|
|
|
|
2012-12-10 20:48:37 +00:00
|
|
|
from openlp.core.lib import str_to_bool, translate, check_directory_exists, get_text_file_string
|
2012-12-06 22:19:17 +00:00
|
|
|
|
2012-12-07 21:15:10 +00:00
|
|
|
class TestLib(TestCase):
|
2012-12-06 22:19:17 +00:00
|
|
|
|
|
|
|
def str_to_bool_with_bool_test(self):
|
|
|
|
"""
|
|
|
|
Test the str_to_bool function with boolean input
|
|
|
|
"""
|
|
|
|
#GIVEN: A boolean value set to true
|
|
|
|
true_boolean = True
|
|
|
|
|
|
|
|
# WHEN: We "convert" it to a bool
|
|
|
|
true_result = str_to_bool(true_boolean)
|
|
|
|
|
|
|
|
# THEN: We should get back a True bool
|
|
|
|
assert isinstance(true_result, bool), u'The result should be a boolean'
|
|
|
|
assert true_result is True, u'The result should be True'
|
|
|
|
|
|
|
|
#GIVEN: A boolean value set to false
|
|
|
|
false_boolean = False
|
|
|
|
|
|
|
|
# WHEN: We "convert" it to a bool
|
|
|
|
false_result = str_to_bool(false_boolean)
|
|
|
|
|
|
|
|
# THEN: We should get back a True bool
|
|
|
|
assert isinstance(false_result, bool), u'The result should be a boolean'
|
|
|
|
assert false_result is False, u'The result should be True'
|
|
|
|
|
|
|
|
def str_to_bool_with_invalid_test(self):
|
|
|
|
"""
|
|
|
|
Test the str_to_bool function with a set of invalid inputs
|
|
|
|
"""
|
|
|
|
# GIVEN: An integer value
|
|
|
|
int_string = 1
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
int_result = str_to_bool(int_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a false
|
|
|
|
assert int_result is False, u'The result should be False'
|
|
|
|
|
|
|
|
# GIVEN: An string value with completely invalid input
|
|
|
|
invalid_string = u'my feet are wet'
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
str_result = str_to_bool(invalid_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a false
|
|
|
|
assert str_result is False, u'The result should be False'
|
|
|
|
|
|
|
|
def str_to_bool_with_false_values_test(self):
|
|
|
|
"""
|
2012-12-06 22:21:19 +00:00
|
|
|
Test the str_to_bool function with a set of false inputs
|
2012-12-06 22:19:17 +00:00
|
|
|
"""
|
|
|
|
# GIVEN: A string set to "false"
|
|
|
|
false_string = u'false'
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
false_result = str_to_bool(false_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a false
|
|
|
|
assert false_result is False, u'The result should be False'
|
|
|
|
|
|
|
|
# GIVEN: An string set to "NO"
|
|
|
|
no_string = u'NO'
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
str_result = str_to_bool(no_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a false
|
|
|
|
assert str_result is False, u'The result should be False'
|
|
|
|
|
|
|
|
def str_to_bool_with_true_values_test(self):
|
|
|
|
"""
|
2012-12-06 22:21:19 +00:00
|
|
|
Test the str_to_bool function with a set of true inputs
|
2012-12-06 22:19:17 +00:00
|
|
|
"""
|
|
|
|
# GIVEN: A string set to "True"
|
|
|
|
true_string = u'True'
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
true_result = str_to_bool(true_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a true
|
|
|
|
assert true_result is True, u'The result should be True'
|
|
|
|
|
|
|
|
# GIVEN: An string set to "yes"
|
|
|
|
yes_string = u'yes'
|
|
|
|
|
|
|
|
# WHEN: we convert it to a bool
|
|
|
|
str_result = str_to_bool(yes_string)
|
|
|
|
|
|
|
|
# THEN: we should get back a true
|
|
|
|
assert str_result is True, u'The result should be True'
|
|
|
|
|
2012-12-07 17:47:33 +00:00
|
|
|
def translate_test(self):
|
|
|
|
"""
|
|
|
|
Test the translate() function
|
|
|
|
"""
|
|
|
|
# GIVEN: A string to translate and a mocked Qt translate function
|
|
|
|
context = u'OpenLP.Tests'
|
|
|
|
text = u'Untranslated string'
|
|
|
|
comment = u'A comment'
|
|
|
|
encoding = 1
|
|
|
|
n = 1
|
|
|
|
mocked_translate = MagicMock(return_value=u'Translated string')
|
|
|
|
|
|
|
|
# WHEN: we call the translate function
|
|
|
|
result = translate(context, text, comment, encoding, n, mocked_translate)
|
|
|
|
|
|
|
|
# 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)
|
|
|
|
assert result == u'Translated string', u'The translated string should have been returned'
|
|
|
|
|
2012-12-07 18:10:24 +00:00
|
|
|
def check_directory_exists_test(self):
|
|
|
|
"""
|
|
|
|
Test the check_directory_exists() function
|
|
|
|
"""
|
|
|
|
with patch(u'openlp.core.lib.os.path.exists') as mocked_exists, \
|
|
|
|
patch(u'openlp.core.lib.os.makedirs') as mocked_makedirs:
|
|
|
|
# GIVEN: A directory to check and a mocked out os.makedirs and os.path.exists
|
|
|
|
directory_to_check = u'existing/directory'
|
|
|
|
|
2012-12-07 20:50:38 +00:00
|
|
|
# WHEN: os.path.exists returns True and we check to see if the directory exists
|
2012-12-07 18:10:24 +00:00
|
|
|
mocked_exists.return_value = True
|
|
|
|
check_directory_exists(directory_to_check)
|
|
|
|
|
|
|
|
# THEN: Only os.path.exists should have been called
|
|
|
|
mocked_exists.assert_called_with(directory_to_check)
|
|
|
|
assert not mocked_makedirs.called, u'os.makedirs should not have been called'
|
|
|
|
|
|
|
|
# WHEN: os.path.exists returns False and we check the directory exists
|
|
|
|
mocked_exists.return_value = False
|
|
|
|
check_directory_exists(directory_to_check)
|
|
|
|
|
|
|
|
# THEN: Both the mocked functions should have been called
|
|
|
|
mocked_exists.assert_called_with(directory_to_check)
|
|
|
|
mocked_makedirs.assert_called_with(directory_to_check)
|
|
|
|
|
2012-12-07 19:08:28 +00:00
|
|
|
# WHEN: os.path.exists raises an IOError
|
|
|
|
mocked_exists.side_effect = IOError()
|
|
|
|
check_directory_exists(directory_to_check)
|
|
|
|
|
|
|
|
# THEN: We shouldn't get an exception though the mocked exists has been called
|
|
|
|
mocked_exists.assert_called_with(directory_to_check)
|
|
|
|
|
|
|
|
# WHEN: Some other exception is raised
|
|
|
|
mocked_exists.side_effect = ValueError()
|
|
|
|
|
|
|
|
# THEN: check_directory_exists raises an exception
|
2012-12-07 20:50:38 +00:00
|
|
|
mocked_exists.assert_called_with(directory_to_check)
|
2012-12-07 19:08:28 +00:00
|
|
|
self.assertRaises(ValueError, check_directory_exists, directory_to_check)
|
2012-12-10 20:48:37 +00:00
|
|
|
|
|
|
|
def get_text_file_string_no_file_test(self):
|
|
|
|
"""
|
|
|
|
Test the get_text_file_string() function when a file does not exist
|
|
|
|
"""
|
|
|
|
with patch(u'openlp.core.lib.os.path.isfile') as mocked_isfile:
|
|
|
|
# GIVEN: A mocked out isfile which returns true, and a text file name
|
|
|
|
filename = u'testfile.txt'
|
|
|
|
mocked_isfile.return_value = False
|
|
|
|
|
|
|
|
# WHEN: get_text_file_string is called
|
|
|
|
result = get_text_file_string(filename)
|
|
|
|
|
|
|
|
# THEN: The result should be False
|
|
|
|
mocked_isfile.assert_called_with(filename)
|
|
|
|
assert result is False, u'False should be returned if no file exists'
|
|
|
|
|
|
|
|
def get_text_file_string_read_error_test(self):
|
2013-01-07 12:05:19 +00:00
|
|
|
"""
|
|
|
|
Test the get_text_file_string() method when a read error happens
|
|
|
|
"""
|
2012-12-10 20:48:37 +00:00
|
|
|
with patch(u'openlp.core.lib.os.path.isfile') as mocked_isfile, patch(u'__builtin__.open') as mocked_open:
|
|
|
|
# GIVEN: A mocked-out open() which raises an exception and isfile returns True
|
|
|
|
filename = u'testfile.txt'
|
|
|
|
mocked_isfile.return_value = True
|
|
|
|
mocked_open.side_effect = IOError()
|
|
|
|
|
|
|
|
# WHEN: get_text_file_string is called
|
|
|
|
result = get_text_file_string(filename)
|
|
|
|
|
|
|
|
# THEN: None should be returned
|
|
|
|
mocked_isfile.assert_called_with(filename)
|
|
|
|
mocked_open.assert_called_with(filename, u'r')
|
|
|
|
assert result is None, u'None should be returned if the file cannot be opened'
|
|
|
|
|
|
|
|
def get_text_file_string_decode_error_test(self):
|
2013-01-07 12:05:19 +00:00
|
|
|
"""
|
|
|
|
Test the get_text_file_string() method when the contents cannot be decoded
|
|
|
|
"""
|
|
|
|
assert True, u'Impossible to test due to conflicts when mocking out the "open" function'
|
2012-12-10 20:48:37 +00:00
|
|
|
|