324 lines
11 KiB
Python
324 lines
11 KiB
Python
"""these tests are here to create some :class:`tiramisu.option.Option`'s
|
|
and to compare them
|
|
"""
|
|
from .autopath import do_autopath
|
|
do_autopath()
|
|
|
|
import pytest
|
|
import warnings
|
|
from tiramisu.error import ConfigError, ValueWarning
|
|
from tiramisu import IntOption, SymLinkOption, OptionDescription, Config, Calculation, groups
|
|
from tiramisu.i18n import _
|
|
|
|
try:
|
|
groups.family
|
|
except:
|
|
groups.addgroup('family')
|
|
|
|
|
|
def a_func():
|
|
return None
|
|
|
|
|
|
def display_name(*args):
|
|
return 'display_name'
|
|
|
|
|
|
def test_option_valid_name():
|
|
IntOption('test', '')
|
|
with pytest.raises(ValueError):
|
|
IntOption(1, "")
|
|
i = IntOption("test1", "")
|
|
with pytest.raises(ValueError):
|
|
SymLinkOption(1, i)
|
|
i = SymLinkOption("test1", i)
|
|
|
|
|
|
def test_option_get_information():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
i = IntOption('test', description)
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
i.impl_set_information('info', string)
|
|
assert i.impl_get_information('info') == string
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
assert i.impl_get_information('noinfo', 'default') == 'default'
|
|
assert i.impl_get_information('doc') == description
|
|
|
|
|
|
def test_option_get_information_config():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
i = IntOption('test', description)
|
|
od = OptionDescription('od', '', [i])
|
|
cfg = Config(od)
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
with pytest.raises(AttributeError):
|
|
i.impl_set_information('info', string)
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
assert i.impl_get_information('noinfo', 'default') == 'default'
|
|
assert i.impl_get_information('doc') == description
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_unknown():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
i = IntOption('test', description)
|
|
i.impl_set_information('noinfo', 'optdefault')
|
|
od = OptionDescription('od', '', [i])
|
|
cfg = Config(od)
|
|
#
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('test').unknown.get()
|
|
with pytest.raises(ConfigError):
|
|
# only choice
|
|
cfg.option('test').value.list()
|
|
|
|
|
|
def test_option_description():
|
|
description = "it's ok"
|
|
i = IntOption('test', description)
|
|
od = OptionDescription('od', 'od', [i])
|
|
od2 = OptionDescription('od', '', [od])
|
|
cfg = Config(od2)
|
|
assert cfg.option('od').description() == 'od'
|
|
assert cfg.option('od.test').description() == description
|
|
|
|
|
|
def test_option_get_information_default():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
i = IntOption('test', description)
|
|
i.impl_set_information('noinfo', 'optdefault')
|
|
od = OptionDescription('od', '', [i])
|
|
cfg = Config(od)
|
|
#
|
|
assert cfg.option('test').information.get('noinfo', 'falsedefault') == 'optdefault'
|
|
#
|
|
cfg.option('test').information.set('noinfo', 'notdefault')
|
|
assert cfg.option('test').information.get('noinfo', 'falsedefault') == 'notdefault'
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_get_information_config2():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
i = IntOption('test', description)
|
|
i.impl_set_information('info', string)
|
|
od = OptionDescription('od', '', [i])
|
|
cfg = Config(od)
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
with pytest.raises(AttributeError):
|
|
i.impl_set_information('info', 'hello')
|
|
assert i.impl_get_information('info') == string
|
|
with pytest.raises(ValueError):
|
|
i.impl_get_information('noinfo')
|
|
assert i.impl_get_information('noinfo', 'default') == 'default'
|
|
assert i.impl_get_information('doc') == description
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_optiondescription_get_information():
|
|
description = "it's ok"
|
|
string = 'some informations'
|
|
o = OptionDescription('test', description, [])
|
|
o.impl_set_information('info', string)
|
|
assert o.impl_get_information('info') == string
|
|
with pytest.raises(ValueError):
|
|
o.impl_get_information('noinfo')
|
|
assert o.impl_get_information('noinfo', 'default') == 'default'
|
|
assert o.impl_get_information('doc') == description
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_isoptiondescription():
|
|
i = IntOption('test', '')
|
|
od = OptionDescription('od', '', [i])
|
|
od = OptionDescription('od', '', [od])
|
|
cfg = Config(od)
|
|
assert cfg.option('od').isoptiondescription()
|
|
assert not cfg.option('od.test').isoptiondescription()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_double():
|
|
i = IntOption('test', '')
|
|
od = OptionDescription('od1', '', [i])
|
|
od = OptionDescription('od2', '', [od])
|
|
od = OptionDescription('od3', '', [od])
|
|
cfg = Config(od)
|
|
assert cfg.option('od2.od1.test').value.get() is None
|
|
assert cfg.option('od2').option('od1').option('test').value.get() is None
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_multi():
|
|
IntOption('test', '', multi=True)
|
|
IntOption('test', '', multi=True, default_multi=1)
|
|
IntOption('test', '', default=[1], multi=True, default_multi=1)
|
|
#add default_multi to not multi's option
|
|
with pytest.raises(ValueError):
|
|
IntOption('test', '', default_multi=1)
|
|
#unvalid default_multi
|
|
with pytest.raises(ValueError):
|
|
IntOption('test', '', multi=True, default_multi='yes')
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_unknown_option():
|
|
i = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
od2 = OptionDescription('od', '', [od1])
|
|
cfg = Config(od2)
|
|
# test is an option, not an optiondescription
|
|
with pytest.raises(TypeError):
|
|
cfg.option('od.test.unknown').value.get()
|
|
# unknown is an unknown option
|
|
with pytest.raises(AttributeError):
|
|
cfg.option('unknown').value.get()
|
|
# unknown is an unknown option
|
|
with pytest.raises(AttributeError):
|
|
cfg.option('od.unknown').value.get()
|
|
# unknown is an unknown optiondescription
|
|
with pytest.raises(AttributeError):
|
|
cfg.option('od.unknown.suboption').value.get()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_optiondescription_list():
|
|
groups.addgroup('notfamily1')
|
|
i = IntOption('test', '')
|
|
i2 = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
od1.impl_set_group_type(groups.family)
|
|
od3 = OptionDescription('od2', '', [i2])
|
|
od3.impl_set_group_type(groups.notfamily1)
|
|
od2 = OptionDescription('od', '', [od1, od3])
|
|
od4 = OptionDescription('od', '', [od2])
|
|
cfg = Config(od4)
|
|
assert len(list(cfg.option('od').list())) == 2
|
|
assert len(list(cfg.option('od.od').list())) == 1
|
|
assert len(list(cfg.option('od.od2').list())) == 1
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_optiondescription_group():
|
|
groups.addgroup('notfamily')
|
|
i = IntOption('test', '')
|
|
i2 = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
od1.impl_set_group_type(groups.family)
|
|
od3 = OptionDescription('od2', '', [i2])
|
|
od3.impl_set_group_type(groups.notfamily)
|
|
od2 = OptionDescription('od', '', [od1, od3])
|
|
cfg = Config(od2)
|
|
assert len(list(cfg.option.list())) == 2
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_optiondescription_group_redefined():
|
|
try:
|
|
groups.addgroup('notfamily')
|
|
except:
|
|
pass
|
|
i = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
od1.impl_set_group_type(groups.family)
|
|
with pytest.raises(ValueError):
|
|
od1.impl_set_group_type(groups.notfamily)
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_optiondescription_group_leadership():
|
|
i = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
with pytest.raises(ConfigError):
|
|
od1.impl_set_group_type(groups.leadership)
|
|
# assert not list_sessions()
|
|
|
|
|
|
|
|
def test_asign_optiondescription():
|
|
i = IntOption('test', '')
|
|
od1 = OptionDescription('od', '', [i])
|
|
od2 = OptionDescription('od', '', [od1])
|
|
cfg = Config(od2)
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('od').value.set('test')
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('od').value.reset()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_intoption():
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
i2 = IntOption('test2', 'description', max_number=3)
|
|
i3 = IntOption('test3', 'description', min_number=3, max_number=6, warnings_only=True)
|
|
od = OptionDescription('od', '', [i1, i2, i3])
|
|
cfg = Config(od)
|
|
with pytest.raises(ValueError):
|
|
cfg.option('test1').value.set(2)
|
|
cfg.option('test1').value.set(3)
|
|
assert cfg.option('test1').value.valid() is True
|
|
cfg.option('test1').value.set(4)
|
|
cfg.option('test2').value.set(2)
|
|
cfg.option('test2').value.set(3)
|
|
with pytest.raises(ValueError):
|
|
cfg.option('test2').value.set(4)
|
|
warnings.simplefilter("always", ValueWarning)
|
|
with warnings.catch_warnings(record=True) as w:
|
|
cfg.option('test3').value.set(2)
|
|
assert cfg.option('test3').value.valid() is True
|
|
assert len(w) == 1
|
|
with warnings.catch_warnings(record=True) as w:
|
|
cfg.option('test3').value.set(7)
|
|
assert cfg.option('test3').value.valid() is True
|
|
cfg.option('test3').value.set(4)
|
|
assert cfg.option('test3').value.valid() is True
|
|
assert len(w) == 1
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_not_in_config():
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
with pytest.raises(AttributeError):
|
|
i1.impl_getpath()
|
|
# assert not list_sessions()
|
|
|
|
|
|
def test_option_unknown_func():
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
i2 = IntOption('test2', 'description', max_number=3)
|
|
i3 = IntOption('test3', 'description', min_number=3, max_number=6, warnings_only=True)
|
|
od = OptionDescription('od', '', [i1, i2, i3])
|
|
cfg = Config(od)
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('test1').value.unknown()
|
|
|
|
|
|
def test_option_with_index():
|
|
i1 = IntOption('test1', 'description', [4, 5], min_number=3, multi=True)
|
|
i2 = IntOption('test2', 'description', max_number=3)
|
|
i3 = IntOption('test3', 'description', min_number=3, max_number=6, warnings_only=True)
|
|
od = OptionDescription('od', '', [i1, i2, i3])
|
|
cfg = Config(od)
|
|
with pytest.raises(ConfigError):
|
|
cfg.option('test1', 0).value.get()
|
|
|
|
|
|
def test_option_display_name():
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
i2 = IntOption('test2', 'description', max_number=3)
|
|
i3 = IntOption('test3', 'description', min_number=3, max_number=6, warnings_only=True)
|
|
od = OptionDescription('od', '', [i1, i2, i3])
|
|
cfg = Config(od,
|
|
display_name=display_name,
|
|
)
|
|
assert cfg.option('test1').name() == 'test1'
|
|
assert cfg.option('test1').doc() == 'display_name'
|