add DynOptionDescription
[tiramisu.git] / test / test_choice_option.py
1 # coding: utf-8
2 import autopath
3
4 from tiramisu.setting import owners
5 from tiramisu.option import ChoiceOption, StrOption, OptionDescription
6 from tiramisu.config import Config
7
8 from py.test import raises
9
10
11 def return_val(val):
12     return val
13
14
15 def return_list():
16     return ['val1', 'val2']
17
18
19 def return_calc_list(val):
20     return [val]
21
22
23 def test_choiceoption_function():
24     ch = ChoiceOption('ch', '', values=return_list)
25     od = OptionDescription('od', '', [ch])
26     cfg = Config(od)
27     cfg.read_write()
28     owner = cfg.cfgimpl_get_settings().getowner()
29     assert cfg.getowner(ch) == owners.default
30     cfg.ch = 'val1'
31     assert cfg.getowner(ch) == owner
32     del(cfg.ch)
33     assert cfg.getowner(ch) == owners.default
34     raises(ValueError, "cfg.ch='no'")
35     assert cfg.getowner(ch) == owners.default
36
37
38 def test_choiceoption_calc_function():
39     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ('val1',)})
40     od = OptionDescription('od', '', [ch])
41     cfg = Config(od)
42     cfg.read_write()
43     owner = cfg.cfgimpl_get_settings().getowner()
44     assert cfg.getowner(ch) == owners.default
45     cfg.ch = 'val1'
46     assert cfg.getowner(ch) == owner
47     del(cfg.ch)
48     assert cfg.getowner(ch) == owners.default
49     raises(ValueError, "cfg.ch='no'")
50     assert cfg.getowner(ch) == owners.default
51
52
53 def test_choiceoption_calc_opt_function():
54     st = StrOption('st', '', 'val1')
55     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ((st, False),)})
56     od = OptionDescription('od', '', [st, ch])
57     cfg = Config(od)
58     cfg.read_write()
59     owner = cfg.cfgimpl_get_settings().getowner()
60     assert cfg.getowner(ch) == owners.default
61     cfg.ch = 'val1'
62     assert cfg.getowner(ch) == owner
63     del(cfg.ch)
64     assert cfg.getowner(ch) == owners.default
65     raises(ValueError, "cfg.ch='no'")
66     assert cfg.getowner(ch) == owners.default
67
68
69 def test_choiceoption_calc_opt_multi_function():
70     st = StrOption('st', '', ['val1'], multi=True)
71     ch = ChoiceOption('ch', "", default_multi='val2', values=return_val, values_params={'': ((st, False),)}, multi=True)
72     ch2 = ChoiceOption('ch2', "", default=['val2'], values=return_val, values_params={'': ((st, False),)}, multi=True)
73     od = OptionDescription('od', '', [st, ch, ch2])
74     cfg = Config(od)
75     cfg.read_write()
76     assert cfg.ch == []
77     owner = cfg.cfgimpl_get_settings().getowner()
78     assert cfg.getowner(ch) == owners.default
79     raises(ValueError, "cfg.ch.append()")
80     cfg.ch = ['val1']
81     assert cfg.getowner(ch) == owner
82     del(cfg.ch)
83     assert cfg.getowner(ch) == owners.default
84     raises(ValueError, "cfg.ch='no'")
85     assert cfg.getowner(ch) == owners.default
86     #
87     raises(ValueError, "cfg.ch2")