2013-08-22 12:17:10 +02:00
|
|
|
"""these tests are here to create some :class:`tiramisu.option.Option`'s
|
|
|
|
and to compare them
|
|
|
|
"""
|
2017-07-09 09:49:03 +02:00
|
|
|
from .autopath import do_autopath
|
2015-07-24 17:54:10 +02:00
|
|
|
do_autopath()
|
|
|
|
|
2013-12-09 17:55:52 +01:00
|
|
|
from py.test import raises
|
2013-05-05 21:43:19 +02:00
|
|
|
|
2018-09-12 21:05:14 +02:00
|
|
|
from tiramisu.error import APIError, ConfigError
|
2019-10-16 07:31:52 +02:00
|
|
|
from tiramisu import IntOption, SymLinkOption, OptionDescription, Config, Calculation, groups, list_sessions
|
2019-04-08 08:41:33 +02:00
|
|
|
from tiramisu.i18n import _
|
2018-10-31 08:00:19 +01:00
|
|
|
|
2019-10-16 07:31:52 +02:00
|
|
|
try:
|
|
|
|
groups.family
|
|
|
|
except:
|
|
|
|
groups.family = groups.GroupType('family')
|
2018-10-31 08:00:19 +01:00
|
|
|
|
|
|
|
def teardown_function(function):
|
|
|
|
assert list_sessions() == [], 'session list is not empty when leaving "{}"'.format(function.__name__)
|
2013-12-09 18:56:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
def a_func():
|
|
|
|
return None
|
2013-05-05 21:43:19 +02:00
|
|
|
|
|
|
|
|
2013-12-09 17:55:52 +01:00
|
|
|
def test_option_valid_name():
|
|
|
|
IntOption('test', '')
|
|
|
|
raises(ValueError, 'IntOption(1, "")')
|
2019-02-11 20:28:03 +01:00
|
|
|
# raises(ValueError, 'IntOption("1test", "")')
|
|
|
|
i = IntOption("test1", "")
|
|
|
|
# raises(ValueError, 'IntOption("_test", "")')
|
|
|
|
# raises(ValueError, 'IntOption(" ", "")')
|
|
|
|
raises(ValueError, 'SymLinkOption(1, i)')
|
|
|
|
i = SymLinkOption("test1", i)
|
2019-09-28 16:32:48 +02:00
|
|
|
#
|
|
|
|
#
|
|
|
|
#def test_option_with_callback_legacy():
|
|
|
|
# # no default value with callback
|
|
|
|
# raises(ValueError, "IntOption('test', '', default=1, callback=a_func)")
|
2013-12-09 18:56:29 +01:00
|
|
|
|
|
|
|
|
2017-02-03 23:39:24 +01:00
|
|
|
def test_option_get_information():
|
|
|
|
description = "it's ok"
|
|
|
|
string = 'some informations'
|
|
|
|
i = IntOption('test', description)
|
|
|
|
raises(ValueError, "i.impl_get_information('noinfo')")
|
|
|
|
i.impl_set_information('info', string)
|
|
|
|
assert i.impl_get_information('info') == string
|
|
|
|
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'
|
|
|
|
string
|
|
|
|
i = IntOption('test', description)
|
|
|
|
od = OptionDescription('od', '', [i])
|
|
|
|
Config(od)
|
|
|
|
raises(ValueError, "i.impl_get_information('noinfo')")
|
|
|
|
raises(AttributeError, "i.impl_set_information('info', string)")
|
2015-12-17 22:41:57 +01:00
|
|
|
# assert i.impl_get_information('info') == string
|
2017-02-03 23:39:24 +01:00
|
|
|
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_config2():
|
|
|
|
description = "it's ok"
|
|
|
|
string = 'some informations'
|
|
|
|
i = IntOption('test', description)
|
|
|
|
i.impl_set_information('info', string)
|
|
|
|
od = OptionDescription('od', '', [i])
|
|
|
|
Config(od)
|
|
|
|
raises(ValueError, "i.impl_get_information('noinfo')")
|
|
|
|
raises(AttributeError, "i.impl_set_information('info', 'hello')")
|
|
|
|
assert i.impl_get_information('info') == string
|
|
|
|
raises(ValueError, "i.impl_get_information('noinfo')")
|
|
|
|
assert i.impl_get_information('noinfo', 'default') == 'default'
|
|
|
|
assert i.impl_get_information('doc') == description
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
raises(ValueError, "o.impl_get_information('noinfo')")
|
|
|
|
assert o.impl_get_information('noinfo', 'default') == 'default'
|
|
|
|
assert o.impl_get_information('doc') == description
|
2013-12-09 18:56:29 +01:00
|
|
|
|
2013-12-09 17:55:52 +01:00
|
|
|
|
2018-09-22 17:45:52 +02:00
|
|
|
def test_option_isoptiondescription():
|
|
|
|
i = IntOption('test', '')
|
|
|
|
od = OptionDescription('od', '', [i])
|
|
|
|
od = OptionDescription('od', '', [od])
|
|
|
|
cfg = Config(od)
|
|
|
|
assert cfg.option('od').option.isoptiondescription()
|
|
|
|
assert not cfg.option('od.test').option.isoptiondescription()
|
|
|
|
|
|
|
|
|
2019-03-02 21:31:21 +01:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2013-12-09 17:55:52 +01:00
|
|
|
def test_option_multi():
|
|
|
|
IntOption('test', '', multi=True)
|
|
|
|
IntOption('test', '', multi=True, default_multi=1)
|
|
|
|
IntOption('test', '', default=[1], multi=True, default_multi=1)
|
2013-12-09 18:56:29 +01:00
|
|
|
#add default_multi to not multi's option
|
2013-12-09 17:55:52 +01:00
|
|
|
raises(ValueError, "IntOption('test', '', default_multi=1)")
|
2013-12-09 18:56:29 +01:00
|
|
|
#unvalid default_multi
|
|
|
|
raises(ValueError, "IntOption('test', '', multi=True, default_multi='yes')")
|
2019-09-28 16:32:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
#def test_option_multi_legacy():
|
|
|
|
# #not default_multi with callback
|
|
|
|
# #raises(ValueError, "IntOption('test', '', multi=True, default_multi=1, callback=a_func)")
|
2018-04-06 23:51:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_unknown_option():
|
|
|
|
i = IntOption('test', '')
|
|
|
|
od1 = OptionDescription('od', '', [i])
|
|
|
|
od2 = OptionDescription('od', '', [od1])
|
2018-08-14 23:07:07 +02:00
|
|
|
api = Config(od2)
|
2018-04-06 23:51:25 +02:00
|
|
|
# test is an option, not an optiondescription
|
2018-08-02 19:01:54 +02:00
|
|
|
raises(TypeError, "api.option('od.test.unknown').value.get()")
|
2018-04-06 23:51:25 +02:00
|
|
|
# unknown is an unknown option
|
|
|
|
raises(AttributeError, "api.option('unknown').value.get()")
|
|
|
|
# unknown is an unknown option
|
|
|
|
raises(AttributeError, "api.option('od.unknown').value.get()")
|
|
|
|
# unknown is an unknown optiondescription
|
|
|
|
raises(AttributeError, "api.option('od.unknown.suboption').value.get()")
|
|
|
|
|
|
|
|
|
2018-09-29 20:05:28 +02:00
|
|
|
def test_optiondescription_list():
|
|
|
|
groups.notfamily1 = groups.GroupType('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])
|
|
|
|
api = Config(od4)
|
|
|
|
assert len(list(api.option('od').list('option'))) == 0
|
|
|
|
assert len(list(api.option('od').list('optiondescription'))) == 2
|
|
|
|
assert len(list(api.option('od').list('optiondescription', group_type=groups.family))) == 1
|
|
|
|
assert len(list(api.option('od').list('optiondescription', group_type=groups.notfamily1))) == 1
|
|
|
|
assert len(list(api.option('od.od').list('option'))) == 1
|
|
|
|
assert len(list(api.option('od.od2').list('option'))) == 1
|
2018-10-31 08:00:19 +01:00
|
|
|
try:
|
|
|
|
list(api.option('od').list('unknown'))
|
|
|
|
except AssertionError:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
raise Exception('must raise')
|
|
|
|
try:
|
|
|
|
list(api.option('od').list('option', group_type='toto'))
|
|
|
|
except AssertionError:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
raise Exception('must raise')
|
2018-09-29 20:05:28 +02:00
|
|
|
|
|
|
|
|
2018-09-12 21:05:14 +02:00
|
|
|
def test_optiondescription_group():
|
|
|
|
groups.notfamily = groups.GroupType('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])
|
|
|
|
api = Config(od2)
|
2018-09-29 20:05:28 +02:00
|
|
|
assert len(list(api.option.list('option'))) == 0
|
2018-09-12 21:05:14 +02:00
|
|
|
assert len(list(api.option.list('optiondescription'))) == 2
|
|
|
|
assert len(list(api.option.list('optiondescription', group_type=groups.family))) == 1
|
|
|
|
assert len(list(api.option.list('optiondescription', group_type=groups.notfamily))) == 1
|
2018-10-31 08:00:19 +01:00
|
|
|
try:
|
|
|
|
list(api.option.list('unknown'))
|
|
|
|
except AssertionError:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
raise Exception('must raise')
|
|
|
|
try:
|
|
|
|
list(api.option.list('option', group_type='toto'))
|
|
|
|
except AssertionError:
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
raise Exception('must raise')
|
2018-09-12 21:05:14 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_optiondescription_group_redefined():
|
|
|
|
try:
|
|
|
|
groups.notfamily = groups.GroupType('notfamily')
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
i = IntOption('test', '')
|
|
|
|
od1 = OptionDescription('od', '', [i])
|
|
|
|
od1.impl_set_group_type(groups.family)
|
|
|
|
raises(ValueError, "od1.impl_set_group_type(groups.notfamily)")
|
|
|
|
|
|
|
|
|
2019-02-23 19:06:23 +01:00
|
|
|
def test_optiondescription_group_leadership():
|
2018-09-12 21:05:14 +02:00
|
|
|
i = IntOption('test', '')
|
|
|
|
od1 = OptionDescription('od', '', [i])
|
2019-02-23 19:06:23 +01:00
|
|
|
raises(ConfigError, "od1.impl_set_group_type(groups.leadership)")
|
2018-09-12 21:05:14 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
2018-04-06 23:51:25 +02:00
|
|
|
def test_asign_optiondescription():
|
|
|
|
i = IntOption('test', '')
|
|
|
|
od1 = OptionDescription('od', '', [i])
|
|
|
|
od2 = OptionDescription('od', '', [od1])
|
2018-08-14 23:07:07 +02:00
|
|
|
api = Config(od2)
|
2018-04-06 23:51:25 +02:00
|
|
|
raises(APIError, "api.option('od').value.set('test')")
|
|
|
|
raises(APIError, "api.option('od').value.reset()")
|
2018-09-11 20:12:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_intoption():
|
|
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
|
|
i2 = IntOption('test2', 'description', max_number=3)
|
|
|
|
od = OptionDescription('od', '', [i1, i2])
|
|
|
|
cfg = Config(od)
|
|
|
|
raises(ValueError, "cfg.option('test1').value.set(2)")
|
|
|
|
cfg.option('test1').value.set(3)
|
|
|
|
cfg.option('test1').value.set(4)
|
|
|
|
cfg.option('test2').value.set(2)
|
|
|
|
cfg.option('test2').value.set(3)
|
|
|
|
raises(ValueError, "cfg.option('test2').value.set(4)")
|
2019-02-24 20:23:16 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_get_display_type():
|
|
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
2019-04-08 08:41:33 +02:00
|
|
|
assert i1.get_display_type() == _('integer')
|
2019-03-02 19:43:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_option_not_in_config():
|
|
|
|
i1 = IntOption('test1', 'description', min_number=3)
|
|
|
|
raises(AttributeError, "i1.impl_getpath()")
|