add unique parameter to option

This commit is contained in:
2016-11-19 19:16:31 +01:00
parent fc36f674eb
commit 42d830687d
7 changed files with 116 additions and 33 deletions

View File

@ -24,6 +24,25 @@ def test_multi():
raises(ConfigError, "multi._getcontext()")
def test_multi_unique():
i = IntOption('int', '', multi=True, unique=True)
o = OptionDescription('od', '', [i])
c = Config(o)
assert c.int == []
c.int = [0]
assert c.int == [0]
raises(ValueError, "c.int = [0, 0]")
raises(ValueError, "c.int = [1, 0, 2, 3, 4, 5, 6, 0, 7]")
raises(ValueError, "c.int.append(0)")
raises(ValueError, "c.int.extend([1, 2, 1, 3])")
raises(ValueError, "c.int.extend([1, 2, 0, 3])")
c.int.extend([4, 5, 6])
def test_non_multi_unique():
raises(ValueError, "IntOption('int', '', unique=True)")
def test_multi_none():
s = StrOption('str', '', multi=True)
o = OptionDescription('od', '', [s])

View File

@ -4,7 +4,7 @@ do_autopath()
from tiramisu.setting import groups, owners
from tiramisu.config import Config
from tiramisu.option import StrOption, OptionDescription, submulti
from tiramisu.option import StrOption, IntOption, OptionDescription, submulti
from tiramisu.value import SubMulti, Multi
from tiramisu.error import SlaveError
@ -663,3 +663,19 @@ def test_callback_submulti():
assert cfg.getowner(multi2) == owners.default
assert cfg.multi == [['val']]
assert cfg.multi2 == [['val']]
def test_submulti_unique():
i = IntOption('int', '', multi=submulti, unique=True)
o = OptionDescription('od', '', [i])
c = Config(o)
assert c.int == []
c.int = [[0]]
assert c.int == [[0]]
raises(ValueError, "c.int = [[0, 0]]")
c.int = [[0], [0]]
raises(ValueError, "c.int[0] = [1, 0, 2, 3, 4, 5, 6, 0, 7]")
raises(ValueError, "c.int[0].append(0)")
raises(ValueError, "c.int[0].extend([1, 2, 1, 3])")
raises(ValueError, "c.int[0].extend([1, 2, 0, 3])")
c.int[0].extend([4, 5, 6])