impl_get_values with calculated values and no context should return []
[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 test_choiceoption_function():
26     ch = ChoiceOption('ch', '', values=return_list)
27     od = OptionDescription('od', '', [ch])
28     cfg = Config(od)
29     cfg.read_write()
30     owner = cfg.cfgimpl_get_settings().getowner()
31     assert cfg.getowner(ch) == owners.default
32     cfg.ch = 'val1'
33     assert cfg.getowner(ch) == owner
34     del(cfg.ch)
35     assert cfg.getowner(ch) == owners.default
36     raises(ValueError, "cfg.ch='no'")
37     assert cfg.getowner(ch) == owners.default
38     assert ch.impl_get_values(None) == []
39     assert ch.impl_get_values(cfg) == ['val1', 'val2']
40
41
42 def test_choiceoption_calc_function():
43     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ('val1',)})
44     od = OptionDescription('od', '', [ch])
45     cfg = Config(od)
46     cfg.read_write()
47     owner = cfg.cfgimpl_get_settings().getowner()
48     assert cfg.getowner(ch) == owners.default
49     cfg.ch = 'val1'
50     assert cfg.getowner(ch) == owner
51     del(cfg.ch)
52     assert cfg.getowner(ch) == owners.default
53     raises(ValueError, "cfg.ch='no'")
54     assert cfg.getowner(ch) == owners.default
55
56
57 def test_choiceoption_calc_opt_function():
58     st = StrOption('st', '', 'val1')
59     ch = ChoiceOption('ch', "", values=return_calc_list, values_params={'': ((st, False),)})
60     od = OptionDescription('od', '', [st, ch])
61     cfg = Config(od)
62     cfg.read_write()
63     owner = cfg.cfgimpl_get_settings().getowner()
64     assert cfg.getowner(ch) == owners.default
65     cfg.ch = 'val1'
66     assert cfg.getowner(ch) == owner
67     del(cfg.ch)
68     assert cfg.getowner(ch) == owners.default
69     raises(ValueError, "cfg.ch='no'")
70     assert cfg.getowner(ch) == owners.default
71
72
73 def test_choiceoption_calc_opt_multi_function():
74     st = StrOption('st', '', ['val1'], multi=True)
75     ch = ChoiceOption('ch', "", default_multi='val2', values=return_val, values_params={'': ((st, False),)}, multi=True)
76     ch2 = ChoiceOption('ch2', "", default=['val2'], values=return_val, values_params={'': ((st, False),)}, multi=True)
77     od = OptionDescription('od', '', [st, ch, ch2])
78     cfg = Config(od)
79     cfg.read_write()
80     assert cfg.ch == []
81     owner = cfg.cfgimpl_get_settings().getowner()
82     assert cfg.getowner(ch) == owners.default
83     raises(ValueError, "cfg.ch.append()")
84     cfg.ch = ['val1']
85     assert cfg.getowner(ch) == owner
86     del(cfg.ch)
87     assert cfg.getowner(ch) == owners.default
88     raises(ValueError, "cfg.ch='no'")
89     assert cfg.getowner(ch) == owners.default
90     #
91     raises(ValueError, "cfg.ch2")
92
93
94 def test_choiceoption_calc_invalid():
95     st = StrOption('st', '', ['val1'], multi=True)
96     st
97     raises(ValueError, "ch = ChoiceOption('ch', '', default_multi='val2', values=[1, 2, 3], values_params={'': ((st, False),)}, multi=True)")
98
99
100 def test_choiceoption_calc_not_list():
101     st = StrOption('st', '', 'val1')
102     ch = ChoiceOption('ch', "", default_multi='val2', values=return_val, values_params={'': ((st, False),)}, multi=True)
103     od = OptionDescription('od', '', [st, ch])
104     cfg = Config(od)
105     cfg.read_write()
106     raises(ConfigError, "cfg.ch = ['val1']")