python 3.5 support
[tiramisu.git] / test / test_option_owner.py
1 from .autopath import do_autopath
2 do_autopath()
3
4 from py.test import raises
5
6 from tiramisu.setting import owners, groups
7 from tiramisu.config import Config
8 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption, \
9     StrOption, OptionDescription, SymLinkOption
10 from tiramisu.error import ConfigError, ConstError, PropertiesOptionError
11
12
13 def make_description():
14     gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref')
15     gcdummy = BoolOption('dummy', 'dummy', default=False)
16     objspaceoption = ChoiceOption('objspace', 'Object space',
17                                   ['std', 'thunk'], 'std')
18     booloption = BoolOption('bool', 'Test boolean option', default=True)
19     intoption = IntOption('int', 'Test int option', default=0)
20     floatoption = FloatOption('float', 'Test float option', default=2.3)
21     stroption = StrOption('str', 'Test string option', default="abc")
22     boolop = BoolOption('boolop', 'Test boolean option op', default=True)
23     wantref_option = BoolOption('wantref', 'Test requires', default=False)
24     wantframework_option = BoolOption('wantframework', 'Test requires',
25                                       default=False)
26
27     gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
28     descr = OptionDescription('tiram', '', [gcgroup, booloption, objspaceoption,
29                                             wantref_option, stroption,
30                                             wantframework_option,
31                                             intoption, boolop])
32     return descr
33
34
35 def test_default_owner():
36     gcdummy = BoolOption('dummy', 'dummy', default=False)
37     descr = OptionDescription('tiramisu', '', [gcdummy])
38     cfg = Config(descr)
39     assert cfg.dummy is False
40     assert cfg.getowner(gcdummy) == 'default'
41     raises(TypeError, "cfg.getowner('gcdummy')")
42     cfg.dummy = True
43     assert cfg.getowner(gcdummy) == owners.user
44
45
46 def test_hidden_owner():
47     gcdummy = BoolOption('dummy', 'dummy', default=False, properties=('hidden',))
48     descr = OptionDescription('tiramisu', '', [gcdummy])
49     cfg = Config(descr)
50     cfg.read_write()
51     raises(PropertiesOptionError, "cfg.getowner(gcdummy)")
52     raises(PropertiesOptionError, "cfg.getowner(gcdummy, force_permissive=True)")
53     raises(PropertiesOptionError, "cfg.cfgimpl_get_values().is_default_owner(gcdummy)")
54     raises(PropertiesOptionError, "cfg.cfgimpl_get_values().is_default_owner(gcdummy, force_permissive=True)")
55     cfg.cfgimpl_get_settings().setpermissive(('hidden',))
56     cfg.getowner(gcdummy, force_permissive=True)
57     cfg.cfgimpl_get_values().is_default_owner(gcdummy, force_permissive=True)
58
59
60 def test_addowner():
61     gcdummy = BoolOption('dummy', 'dummy', default=False)
62     descr = OptionDescription('tiramisu', '', [gcdummy])
63     cfg = Config(descr)
64     assert cfg.dummy is False
65     assert cfg.getowner(gcdummy) == 'default'
66     assert cfg.cfgimpl_get_values().is_default_owner(gcdummy)
67     owners.addowner("gen_config")
68     cfg.cfgimpl_get_settings().setowner(owners.gen_config)
69     cfg.dummy = True
70     assert cfg.getowner(gcdummy) == owners.gen_config
71     assert not cfg.cfgimpl_get_values().is_default_owner(gcdummy)
72
73
74 def test_addowner_multiple_time():
75     owners.addowner("testowner")
76     raises(ConstError, 'owners.addowner("testowner")')
77
78
79 def test_delete_owner():
80     owners.addowner('deleted')
81     raises(ConstError, 'del(owners.deleted)')
82     raises(ValueError, 'del(owners.deleted2)')
83
84
85 def test_owner_is_not_a_string():
86     gcdummy = BoolOption('dummy', 'dummy', default=False)
87     descr = OptionDescription('tiramisu', '', [gcdummy])
88     cfg = Config(descr)
89     assert cfg.dummy is False
90     assert cfg.getowner(gcdummy) == owners.default
91     assert cfg.getowner(gcdummy) == 'default'
92     assert isinstance(cfg.getowner(gcdummy), owners.Owner)
93     cfg.dummy = True
94     assert cfg.getowner(gcdummy) == 'user'
95
96
97 def test_setowner_without_valid_owner():
98     gcdummy = BoolOption('dummy', 'dummy', default=False)
99     descr = OptionDescription('tiramisu', '', [gcdummy])
100     cfg = Config(descr)
101     assert cfg.dummy is False
102     assert cfg.getowner(gcdummy) == 'default'
103     raises(TypeError, "cfg.cfgimpl_get_settings().setowner('gen_config')")
104
105
106 def test_setowner_for_value():
107     gcdummy = BoolOption('dummy', 'dummy', default=False)
108     descr = OptionDescription('tiramisu', '', [gcdummy])
109     cfg = Config(descr)
110     assert cfg.dummy is False
111     assert cfg.getowner(gcdummy) == 'default'
112     owners.addowner("new")
113     raises(ConfigError, "cfg.cfgimpl_get_values().setowner(gcdummy, owners.new)")
114     cfg.dummy = False
115     assert cfg.getowner(gcdummy) == owners.user
116     cfg.cfgimpl_get_values().setowner(gcdummy, owners.new)
117     assert cfg.getowner(gcdummy) == owners.new
118     raises(TypeError, "cfg.cfgimpl_get_values().setowner(gcdummy, 'new')")
119
120
121 def test_setowner_read_only():
122     gcdummy = BoolOption('dummy', 'dummy', default=False)
123     descr = OptionDescription('tiramisu', '', [gcdummy])
124     cfg = Config(descr)
125     cfg.read_write()
126     assert cfg.dummy is False
127     assert cfg.getowner(gcdummy) == 'default'
128     owners.addowner("readonly")
129     cfg.dummy = False
130     assert cfg.getowner(gcdummy) == owners.user
131     cfg.read_only()
132     raises(PropertiesOptionError,
133            "cfg.cfgimpl_get_values().setowner(gcdummy, owners.readonly)")
134     assert cfg.getowner(gcdummy) == owners.user
135
136
137 def test_setowner_optiondescription():
138     gcdummy = BoolOption('dummy', 'dummy', default=False)
139     descr1 = OptionDescription('tiramisu', '', [gcdummy])
140     descr = OptionDescription('tiramisu', '', [descr1])
141     cfg = Config(descr)
142     cfg
143     raises(ConfigError, 'cfg.cfgimpl_get_values().getowner(descr1)')
144     raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(descr1, owners.user)')
145
146
147 def test_setowner_symlinkoption():
148     gcdummy = BoolOption('dummy', 'dummy', default=False)
149     s = SymLinkOption('symdummy', gcdummy)
150     descr1 = OptionDescription('tiramisu', '', [gcdummy, s])
151     descr = OptionDescription('tiramisu', '', [descr1])
152     cfg = Config(descr)
153     assert cfg.cfgimpl_get_values().getowner(s) == owners.default
154     cfg.tiramisu.dummy = True
155     assert cfg.cfgimpl_get_values().getowner(s) == owners.user
156     raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(s, owners.user)')
157
158
159 def test_owner_masterslaves():
160     b = IntOption('int', 'Test int option', default=[0], multi=True)
161     c = StrOption('str', 'Test string option', multi=True)
162     descr = OptionDescription("int", "", [b, c])
163     descr.impl_set_group_type(groups.master)
164     cfg = Config(descr)
165     raises(ConfigError, 'cfg.cfgimpl_get_values().setowner(c, owners.user)')
166
167     cfg.int.append(1)
168     cfg.str[0] = 'yes'
169     assert cfg.cfgimpl_get_values().getowner(c, 0) == owners.user
170     assert cfg.cfgimpl_get_values().getowner(c, 1) == owners.default
171     cfg.cfgimpl_get_values().setowner(c, owners.user, 0)
172     assert cfg.cfgimpl_get_values().getowner(c, 0) == owners.user
173     assert cfg.cfgimpl_get_values().getowner(c, 1) == owners.default
174     assert cfg.str == ['yes', None]