mycroft-core/test/configuration/__init__.py

135 lines
4.6 KiB
Python

import unittest
from os.path import dirname, join
from mycroft.configuration import ConfigurationLoader, ConfigurationManager, \
DEFAULT_CONFIG, SYSTEM_CONFIG, USER_CONFIG, RemoteConfiguration
__author__ = 'jdorleans'
class AbstractConfigurationTest(unittest.TestCase):
def setUp(self):
self.config_path = join(dirname(__file__), 'mycroft.ini')
@staticmethod
def create_config(lang='en-us', module='mimic'):
config = {
'core': {'lang': lang},
'tts': {'module': module}
}
return config
def assert_config(self, config, lang='en-us', module='mimic'):
self.assertIsNotNone(config)
core = config.get('core', None)
self.assertIsNotNone(core)
lan = core.get('lang', None)
self.assertIsNotNone(lan)
self.assertEquals(lan, lang)
tts = config.get('tts', None)
self.assertIsNotNone(tts)
mod = tts.get('module', None)
self.assertEquals(mod, module)
class ConfigurationLoaderTest(AbstractConfigurationTest):
def test_init_config(self):
config = {'a': 'b'}
self.assertEquals(ConfigurationLoader.init_config(), {})
self.assertEquals(ConfigurationLoader.init_config(config), config)
def test_init_locations(self):
locations = [DEFAULT_CONFIG, SYSTEM_CONFIG, USER_CONFIG]
self.assertEquals(ConfigurationLoader.init_locations(), locations)
locations = [self.config_path]
self.assertEquals(ConfigurationLoader.init_locations(locations),
locations)
def test_validate_data(self):
try:
ConfigurationLoader.validate_data({}, [])
except TypeError:
self.fail()
def test_validate_data_with_invalid_data(self):
self.assertRaises(TypeError, ConfigurationLoader.validate_data)
def test_load(self):
self.assert_config(ConfigurationLoader.load())
def test_load_with_override_custom(self):
config = self.create_config('pt-br', 'espeak')
config = ConfigurationLoader.load(config)
self.assert_config(config)
def test_load_with_override_default(self):
config = self.create_config()
config = ConfigurationLoader.load(config, [self.config_path])
self.assert_config(config, 'pt-br', 'espeak')
def test_load_with_extra_custom(self):
my_config = {'key': 'value'}
config = ConfigurationLoader.load(my_config)
self.assert_config(config)
value = config.get('key', None)
self.assertIsNotNone(value)
self.assertEquals(value, my_config.get('key'))
def test_load_with_invalid_config_type(self):
self.assertRaises(TypeError, ConfigurationLoader.load, 'invalid_type')
def test_load_with_invalid_locations_type(self):
self.assertRaises(TypeError, ConfigurationLoader.load,
None, self.config_path)
def test_load_with_invalid_locations_path(self):
locations = ['./invalid/mycroft.ini', './invalid_mycroft.ini']
config = ConfigurationLoader.load(None, locations)
self.assertEquals(config, {})
class RemoteConfigurationTest(AbstractConfigurationTest):
def test_validate_config(self):
try:
RemoteConfiguration.validate_config(self.create_config())
except TypeError:
self.fail()
def test_validate_config_with_invalid_config(self):
self.assertRaises(TypeError, RemoteConfiguration.validate_config)
def test_load_without_remote_config(self):
config = self.create_config()
self.assertEquals(RemoteConfiguration.load(config), config)
class ConfigurationManagerTest(AbstractConfigurationTest):
def test_load_defaults(self):
ConfigurationManager.load_defaults()
self.assert_config(ConfigurationManager.load_defaults())
def test_load_local(self):
ConfigurationManager.load_defaults()
self.assert_config(ConfigurationManager.load_local())
def test_load_local_with_locations(self):
ConfigurationManager.load_defaults()
config = ConfigurationManager.load_local([self.config_path])
self.assert_config(config, 'pt-br', 'espeak')
def test_load_remote(self):
ConfigurationManager.load_defaults()
self.assert_config(ConfigurationManager.load_remote())
def test_get(self):
ConfigurationManager.load_defaults()
self.assert_config(ConfigurationManager.get())
def test_load_get_with_locations(self):
ConfigurationManager.load_defaults()
config = ConfigurationManager.get([self.config_path])
self.assert_config(config, 'pt-br', 'espeak')