python 3.5 support
[tiramisu.git] / test / test_multi.py
1 # coding: utf-8
2 from .autopath import do_autopath
3 do_autopath()
4
5 from tiramisu.value import Multi
6 from tiramisu.option import IntOption, StrOption, OptionDescription
7 from tiramisu.config import Config
8 from tiramisu.error import ConfigError, PropertiesOptionError
9 from tiramisu.setting import groups
10
11 import weakref
12 from py.test import raises
13
14
15 def test_multi():
16     i = IntOption('int', '', multi=True)
17     o = OptionDescription('od', '', [i])
18     c = Config(o)
19     multi = Multi([1, 2, 3], weakref.ref(c), i, 'int')
20     raises(ValueError, "Multi([1,2,3], c, i, 'int')")
21     raises(ValueError, "Multi(multi, weakref.ref(c), i, 'int')")
22     assert c is multi._getcontext()
23     del(c)
24     raises(ConfigError, "multi._getcontext()")
25
26
27 def test_multi_unique():
28     i = IntOption('int', '', multi=True, unique=True)
29     o = OptionDescription('od', '', [i])
30     c = Config(o)
31     assert c.int == []
32     c.int = [0]
33     assert c.int == [0]
34     raises(ValueError, "c.int = [0, 0]")
35     raises(ValueError, "c.int = [1, 0, 2, 3, 4, 5, 6, 0, 7]")
36     raises(ValueError, "c.int.append(0)")
37     raises(ValueError, "c.int.extend([1, 2, 1, 3])")
38     raises(ValueError, "c.int.extend([1, 2, 0, 3])")
39     c.int.extend([4, 5, 6])
40
41
42 def test_non_valid_multi():
43     raises(ValueError, "IntOption('int', '', multi='string')")
44     raises(ValueError, "IntOption('int', '', multi=True, unique='string')")
45
46
47 def test_non_multi_unique():
48     raises(ValueError, "IntOption('int', '', unique=True)")
49
50
51 def test_multi_none():
52     s = StrOption('str', '', multi=True)
53     o = OptionDescription('od', '', [s])
54     c = Config(o)
55     c.read_only()
56     assert c.str == []
57     c.read_write()
58     c.str.append(None)
59     assert c.str == [None]
60     c.read_only()
61     raises(PropertiesOptionError, "c.str")
62     c.read_write()
63     c.str = ['']
64     assert c.str == ['']
65     c.read_only()
66     raises(PropertiesOptionError, "c.str")