import pytest
from ymmsl.v0_2 import Reference, Settings
from libmuscle.settings_manager import SettingsManager
[docs]
@pytest.fixture
def settings_manager() -> SettingsManager:
return SettingsManager()
[docs]
def test_create(settings_manager):
assert len(settings_manager.base) == 0
assert len(settings_manager.overlay) == 0
[docs]
def test_list_settings_globals(settings_manager):
ref = Reference
settings_manager.base[ref('test1')] = 13
settings_manager.base[ref('test2')] = 14
assert settings_manager.list_settings(ref('macro')) == ['test1', 'test2']
[docs]
def test_list_settings_specifics(settings_manager):
ref = Reference
settings_manager.base[ref('macro.test1')] = 'test1'
settings_manager.base[ref('micro.test2')] = 'test2'
assert settings_manager.list_settings(ref('macro')) == ['test1']
settings_manager.base[ref('micro.test1')] = 'test1'
assert settings_manager.list_settings(ref('macro')) == ['test1']
[docs]
def test_list_settings_override(settings_manager):
ref = Reference
settings_manager.base[ref('test1')] = 'test1'
settings_manager.base[ref('macro.test1')] = 42
assert settings_manager.list_settings(ref('macro')) == ['test1']
settings_manager.base[ref('micro.test1')] = 43
assert settings_manager.list_settings(ref('macro')) == ['test1']
settings_manager.base[ref('test2')] = 'test2'
assert settings_manager.list_settings(ref('macro')) == ['test1', 'test2']
[docs]
def test_list_settings_overlay(settings_manager):
ref = Reference
settings_manager.base[ref('test1')] = 'test1'
settings_manager.overlay[ref('test1')] = 'test1'
assert settings_manager.list_settings(ref('macro')) == ['test1']
settings_manager.overlay[ref('test2')] = 'test2'
assert settings_manager.list_settings(ref('macro')) == ['test1', 'test2']
[docs]
def test_list_settings_overlay_override(settings_manager):
ref = Reference
settings_manager.base[ref('test1')] = 'test1'
settings_manager.base[ref('micro.test2')] = 1
settings_manager.overlay[ref('macro.test1')] = 13
settings_manager.overlay[ref('micro.test2')] = 2
assert settings_manager.list_settings(ref('macro')) == ['test1']
assert settings_manager.list_settings(ref('micro')) == ['test1', 'test2']
assert settings_manager.list_settings(ref('meso')) == ['test1']
[docs]
def test_get_setting(settings_manager):
ref = Reference
settings_manager.base[ref('test')] = 13
assert settings_manager.get_setting(ref('instance'), ref('test')) == 13
settings_manager.overlay[ref('test2')] = 14
assert settings_manager.get_setting(ref('instance'), ref('test2')) == 14
settings_manager.base[ref('test2')] = 'test'
assert settings_manager.get_setting(ref('instance'), ref('test2')) == 14
settings_manager.overlay = Settings()
assert settings_manager.get_setting(ref('instance'), ref('test2')) == \
'test'
settings_manager.base[ref('test3')] = 'base_test3'
settings_manager.base[ref('instance.test3')] = 'base_instance_test3'
assert settings_manager.get_setting(ref('instance'), ref('test3')) == \
'base_instance_test3'
assert settings_manager.get_setting(ref('instance2'), ref('test3')) == \
'base_test3'
settings_manager.overlay[ref('test3')] = 'overlay_test3'
settings_manager.overlay[ref('instance.test3')] = 'overlay_instance_test3'
assert settings_manager.get_setting(ref('instance'), ref('test3')) == \
'overlay_instance_test3'
assert settings_manager.get_setting(ref('instance2'), ref('test3')) == \
'overlay_test3'
settings_manager.base[ref('instance.test4')] = 'base_test4'
settings_manager.overlay[ref('test4')] = 'overlay_test4'
assert settings_manager.get_setting(ref('instance'), ref('test4')) == \
'base_test4'
assert settings_manager.get_setting(ref('instance[10]'), ref('test4')
) == 'base_test4'
settings_manager.base[ref('instance[10].test5')] = 'base_test5'
settings_manager.overlay[ref('test5')] = 'overlay_test5'
assert settings_manager.get_setting(ref('instance'), ref('test5')) == \
'overlay_test5'
assert settings_manager.get_setting(ref('instance[10]'), ref('test5')
) == 'base_test5'
assert settings_manager.get_setting(ref('instance[11]'), ref('test5')
) == 'overlay_test5'
[docs]
def test_get_setting_without_default_raises_keyerror(settings_manager):
ref = Reference
with pytest.raises(KeyError, match='Value for setting "nonexistent" was not set'):
settings_manager.get_setting(ref('instance'), ref('nonexistent'))