Skip to content
Snippets Groups Projects
Commit 7f493807 authored by Conor Finn's avatar Conor Finn
Browse files

RE #27187 Add tests and checks for type conversions

parent c55c9378
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,13 @@ from qtpy.QtCore import QSettings ...@@ -11,6 +11,13 @@ from qtpy.QtCore import QSettings
def set_setting(group, prefix, setting_name, value): def set_setting(group, prefix, setting_name, value):
"""
Change or add a setting in the mantid .ini file.
:param group: Settings group to pull from.
:param prefix: Acts like a subgroup.
:param setting_name: The key to the setting.
:param value: The value of the setting.
"""
settings = QSettings() settings = QSettings()
settings.beginGroup(group) settings.beginGroup(group)
settings.setValue(prefix + setting_name, value) settings.setValue(prefix + setting_name, value)
...@@ -18,8 +25,33 @@ def set_setting(group, prefix, setting_name, value): ...@@ -18,8 +25,33 @@ def set_setting(group, prefix, setting_name, value):
def get_setting(group, prefix, setting_name, return_type=str): def get_setting(group, prefix, setting_name, return_type=str):
"""
Get a setting from the .ini file of mantid settings.
NOTE: If you specify an int, but the setting contains a bool, you will get 0 for False
and 1 for True, without a warning. Specifying bool will raise a TypeError if anything
other than a bool or empty string is found in the settings. Not specifying a type will
return a string. If nothing is found then an empty string is returned.
:param group: Settings group to pull from.
:param prefix: The prefix of the setting, acts like a subgroup.
:param setting_name: Name of the setting.
:param return_type: The type of the setting to get.
:return: The chosen setting.
"""
settings = QSettings() settings = QSettings()
settings.beginGroup(group) settings.beginGroup(group)
setting = settings.value(prefix + setting_name, type=return_type) if return_type is bool:
setting = settings.value(prefix + setting_name, type=str)
if setting == "":
pass
elif setting == "true":
setting = True
elif setting == "false":
setting = False
else:
raise TypeError("Unable to convert string into valid bool")
else:
setting = settings.value(prefix + setting_name, type=return_type)
settings.endGroup() settings.endGroup()
return setting return setting
...@@ -107,6 +107,54 @@ class SettingsHelperTest(unittest.TestCase): ...@@ -107,6 +107,54 @@ class SettingsHelperTest(unittest.TestCase):
def test_get_setting_with_invalid(self): def test_get_setting_with_invalid(self):
self.assertEqual(get_setting(GROUP, PREFIX, "something"), "") self.assertEqual(get_setting(GROUP, PREFIX, "something"), "")
def test_get_setting_int_without_specifying_type(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", 10)
settings.endGroup()
self.assertEqual(get_setting(GROUP, PREFIX, "something"), "10")
def test_get_setting_bool_without_specifying_type(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", True)
settings.endGroup()
self.assertEqual(get_setting(GROUP, PREFIX, "something"), "true")
def test_get_setting_bool_specifying_int(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", True)
settings.endGroup()
self.assertEqual(get_setting(GROUP, PREFIX, "something", return_type=int), 1)
def test_get_setting_int_specifying_bool(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", 10)
settings.endGroup()
self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=bool)
def test_get_setting_string_specifying_int(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", "some setting")
settings.endGroup()
self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=int)
def test_get_setting_string_specifying_bool(self):
settings = QSettings()
settings.beginGroup(GROUP)
settings.setValue(PREFIX + "something", "a")
settings.endGroup()
self.assertRaises(TypeError, get_setting, GROUP, PREFIX, "something", return_type=bool)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment