coverage for tiramisu/option/option.py
[tiramisu.git] / test / test_choice_option.py
1 # coding: utf-8
2 from autopath import do_autopath
3 do_autopath()
4
5 from tiramisu.setting import owners
6 from tiramisu.option import ChoiceOption, StrOption, OptionDescription
7 from tiramisu.config import Config
8 from tiramisu.error import ConfigError
9
10 from py.test import raises
11
12
13 def return_val(val):
14     return val
15
16
17 def return_list():
18     return ['val1', 'val2']
19
20
21 def return_calc_list(val):
22     return [val]
23
24
25 def return_error():
26     raise Exception('test')
27
28
29 def test_choiceoption_function():
30     ch = ChoiceOption('ch', '', values=return_list)
31     od = OptionDescription('od', '', [ch])
32     cfg = Config(od)
33     cfg.read_write()
34     owner = cfg.cfgimpl_get_settings().getowner()
35     assert cfg.getowner(ch) == owners.default
36     cfg.ch = 'val1'
37     assert cfg.getowner(ch) == owner
38     del(cfg.ch)
39     assert cfg.getowner(ch) == owners.default
40     raises(ValueError, "cfg.ch='no'")
41     assert cfg.getowner(ch) == owners.default
42     assert ch.impl_get_values(None) == []
43     assert ch.impl_get_values(cfg) == ['val1', 'val2']
44
45
46 def test_choiceoption_function_error():
47     ch = ChoiceOption('ch', '', values=return_error)
48     od = OptionDescription('od', '', [ch])
49     cfg = Config(od)
50     cfg.read_write()
51     raises(Exception, "cfg.ch = 'no'")
52
53
54 def test_choiceoption_calc_function():
55     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ('val1',)})
56     od = OptionDescription('od', '', [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_function():
70     st = StrOption('st', '', 'val1')
71     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ((st, False),)})
72     od = OptionDescription('od', '', [st, ch])
73     cfg = Config(od)
74     cfg.read_write()
75     owner = cfg.cfgimpl_get_settings().getowner()
76     assert cfg.getowner(ch) == owners.default
77     cfg.ch = 'val1'
78     assert cfg.getowner(ch) == owner
79     del(cfg.ch)
80     assert cfg.getowner(ch) == owners.default
81     raises(ValueError, "cfg.ch='no'")
82     assert cfg.getowner(ch) == owners.default
83
84
85 def test_choiceoption_calc_opt_function_propertyerror():
86     st = StrOption('st', '', 'val1', properties=('disabled',))
87     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ((st, False),)})
88     od = OptionDescription('od', '', [st, ch])
89     cfg = Config(od)
90     cfg.read_write()
91     raises(ValueError, "cfg.ch='no'")
92
93
94 def test_choiceoption_calc_opt_multi_function():
95     st = StrOption('st', '', ['val1'], multi=True)
96     ch = ChoiceOption('ch', "", default_multi='val2', values=return_val, values_params={'': ((st, False),)}, multi=True)
97     ch2 = ChoiceOption('ch2', "", default=['val2'], values=return_val, values_params={'': ((st, False),)}, multi=True)
98     od = OptionDescription('od', '', [st, ch, ch2])
99     cfg = Config(od)
100     cfg.read_write()
101     assert cfg.ch == []
102     owner = cfg.cfgimpl_get_settings().getowner()
103     assert cfg.getowner(ch) == owners.default
104     raises(ValueError, "cfg.ch.append()")
105     cfg.ch = ['val1']
106     assert cfg.getowner(ch) == owner
107     del(cfg.ch)
108     assert cfg.getowner(ch) == owners.default
109     raises(ValueError, "cfg.ch='no'")
110     assert cfg.getowner(ch) == owners.default
111     #
112     raises(ValueError, "cfg.ch2")
113
114
115 def test_choiceoption_calc_invalid():
116     st = StrOption('st', '', ['val1'], multi=True)
117     st
118     raises(ValueError, "ch = ChoiceOption('ch', '', default_multi='val2', values=[1, 2, 3], values_params={'': ((st, False),)}, multi=True)")
119
120
121 def test_choiceoption_calc_not_list():
122     st = StrOption('st', '', 'val1')
123     ch = ChoiceOption('ch', "", default_multi='val2', values=return_val, values_params={'': ((st, False),)}, multi=True)
124     od = OptionDescription('od', '', [st, ch])
125     cfg = Config(od)
126     cfg.read_write()
127     raises(ConfigError, "cfg.ch = ['val1']")