92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
from tiramisu import IntOption, OptionDescription, MetaConfig
|
|
from tiramisu.error import ConfigError
|
|
from pytest import raises
|
|
|
|
|
|
def make_metaconfig():
|
|
i1 = IntOption('i1', '')
|
|
i2 = IntOption('i2', '', default=1)
|
|
i3 = IntOption('i3', '')
|
|
i4 = IntOption('i4', '', default=2)
|
|
i5 = IntOption('i5', '', default=[2], multi=True)
|
|
i6 = IntOption('i6', '', properties=('disabled',))
|
|
od1 = OptionDescription('od1', '', [i1, i2, i3, i4, i5, i6])
|
|
od2 = OptionDescription('od2', '', [od1])
|
|
return MetaConfig([], optiondescription=od2, session_id='metacfg1')
|
|
|
|
|
|
def test_multi_parents_path():
|
|
"""
|
|
metacfg1 (1) ---
|
|
| -- cfg1
|
|
metacfg2 (2) ---
|
|
"""
|
|
metacfg1 = make_metaconfig()
|
|
cfg1 = metacfg1.config.new(type='config', session_id="cfg1")
|
|
metacfg2 = MetaConfig([cfg1], session_id='metacfg2')
|
|
#
|
|
assert metacfg1.config.path() == 'metacfg1'
|
|
assert metacfg2.config.path() == 'metacfg2'
|
|
assert cfg1.config.path() == 'metacfg2.metacfg1.cfg1'
|
|
|
|
|
|
def test_multi_parents_path_same():
|
|
"""
|
|
--- metacfg2 (1) ---
|
|
metacfg1 --| | -- cfg1
|
|
--- metacfg3 (2) ---
|
|
"""
|
|
metacfg1 = make_metaconfig()
|
|
metacfg2 = metacfg1.config.new(type='metaconfig', session_id="metacfg2")
|
|
metacfg3 = metacfg1.config.new(type='metaconfig', session_id="metacfg3")
|
|
cfg1 = metacfg2.config.new(type='config', session_id="cfg1")
|
|
metacfg3.config.add(cfg1)
|
|
#
|
|
assert metacfg2.config.path() == 'metacfg1.metacfg2'
|
|
assert metacfg3.config.path() == 'metacfg1.metacfg3'
|
|
assert cfg1.config.path() == 'metacfg1.metacfg3.metacfg1.metacfg2.cfg1'
|
|
metacfg1.option('od1.i1').value.set(1)
|
|
metacfg3.option('od1.i1').value.set(2)
|
|
assert cfg1.option('od1.i1').value.get() == 1
|
|
orideep = cfg1.config.deepcopy(metaconfig_prefix="test_", session_id='test_cfg1')
|
|
deep = orideep
|
|
while True:
|
|
try:
|
|
children = list(deep.config.list())
|
|
except:
|
|
break
|
|
assert len(children) < 2
|
|
deep = children[0]
|
|
assert deep.config.path() == 'test_metacfg3.test_metacfg1.test_metacfg2.test_cfg1'
|
|
assert cfg1.option('od1.i1').value.get() == 1
|
|
del orideep
|
|
raises(ConfigError, "deep.config.path()")
|
|
|
|
|
|
def test_multi_parents_value():
|
|
metacfg1 = make_metaconfig()
|
|
cfg1 = metacfg1.config.new(type='config', session_id="cfg1")
|
|
metacfg2 = MetaConfig([cfg1], session_id='metacfg2')
|
|
#
|
|
assert cfg1.option('od1.i1').value.get() == None
|
|
assert cfg1.option('od1.i2').value.get() == 1
|
|
assert cfg1.option('od1.i3').value.get() == None
|
|
#
|
|
assert metacfg1.option('od1.i1').value.get() == None
|
|
assert metacfg1.option('od1.i2').value.get() == 1
|
|
assert metacfg1.option('od1.i3').value.get() == None
|
|
#
|
|
assert metacfg2.option('od1.i1').value.get() == None
|
|
assert metacfg2.option('od1.i2').value.get() == 1
|
|
assert metacfg2.option('od1.i3').value.get() == None
|
|
#
|
|
metacfg1.option('od1.i3').value.set(3)
|
|
assert metacfg1.option('od1.i3').value.get() == 3
|
|
assert cfg1.option('od1.i3').value.get() == 3
|
|
assert metacfg2.option('od1.i2').value.get() == 1
|
|
#
|
|
metacfg2.option('od1.i2').value.set(4)
|
|
assert metacfg2.option('od1.i2').value.get() == 4
|
|
assert metacfg1.option('od1.i2').value.get() == 1
|
|
assert cfg1.option('od1.i2').value.get() == 4
|