rename FileOption to FilenameOption
[tiramisu.git] / test / test_slots.py
1 # coding: utf-8
2 import autopath
3 from py.test import raises
4
5 from tiramisu.config import Config, SubConfig
6 from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption,\
7     StrOption, SymLinkOption, UnicodeOption, IPOption, OptionDescription, \
8     PortOption, NetworkOption, NetmaskOption, DomainnameOption, EmailOption, \
9     URLOption, FilenameOption
10
11
12 def test_slots_option():
13     c = ChoiceOption('a', '', ('a',))
14     raises(AttributeError, "c.x = 1")
15     c = BoolOption('a', '')
16     raises(AttributeError, "c.x = 1")
17     c = IntOption('a', '')
18     raises(AttributeError, "c.x = 1")
19     c = FloatOption('a', '')
20     raises(AttributeError, "c.x = 1")
21     c = StrOption('a', '')
22     raises(AttributeError, "c.x = 1")
23     c = SymLinkOption('b', c)
24     raises(AttributeError, "c.x = 1")
25     c = UnicodeOption('a', '')
26     raises(AttributeError, "c.x = 1")
27     c = IPOption('a', '')
28     raises(AttributeError, "c.x = 1")
29     c = OptionDescription('a', '', [])
30     raises(AttributeError, "c.x = 1")
31     c = PortOption('a', '')
32     raises(AttributeError, "c.x = 1")
33     c = NetworkOption('a', '')
34     raises(AttributeError, "c.x = 1")
35     c = NetmaskOption('a', '')
36     raises(AttributeError, "c.x = 1")
37     c = DomainnameOption('a', '')
38     raises(AttributeError, "c.x = 1")
39     c = EmailOption('a', '')
40     raises(AttributeError, "c.x = 1")
41     c = URLOption('a', '')
42     raises(AttributeError, "c.x = 1")
43     c = FilenameOption('a', '')
44     raises(AttributeError, "c.x = 1")
45
46
47 def test_slots_option_readonly():
48     a = ChoiceOption('a', '', ('a',))
49     b = BoolOption('b', '')
50     c = IntOption('c', '')
51     d = FloatOption('d', '')
52     e = StrOption('e', '')
53     g = UnicodeOption('g', '')
54     h = IPOption('h', '')
55     i = PortOption('i', '')
56     j = NetworkOption('j', '')
57     k = NetmaskOption('k', '')
58     l = DomainnameOption('l', '')
59     o = EmailOption('o', '')
60     p = URLOption('p', '')
61     q = FilenameOption('q', '')
62     m = OptionDescription('m', '', [a, b, c, d, e, g, h, i, j, k, l, o, p, q])
63     a._requires = 'a'
64     b._requires = 'b'
65     c._requires = 'c'
66     d._requires = 'd'
67     e._requires = 'e'
68     g._requires = 'g'
69     h._requires = 'h'
70     i._requires = 'i'
71     j._requires = 'j'
72     k._requires = 'k'
73     l._requires = 'l'
74     m._requires = 'm'
75     o._requires = 'o'
76     p._requires = 'p'
77     q._requires = 'q'
78     Config(m)
79     raises(AttributeError, "a._requires = 'a'")
80     raises(AttributeError, "b._requires = 'b'")
81     raises(AttributeError, "c._requires = 'c'")
82     raises(AttributeError, "d._requires = 'd'")
83     raises(AttributeError, "e._requires = 'e'")
84     raises(AttributeError, "g._requires = 'g'")
85     raises(AttributeError, "h._requires = 'h'")
86     raises(AttributeError, "i._requires = 'i'")
87     raises(AttributeError, "j._requires = 'j'")
88     raises(AttributeError, "k._requires = 'k'")
89     raises(AttributeError, "l._requires = 'l'")
90     raises(AttributeError, "m._requires = 'm'")
91     raises(AttributeError, "o._requires = 'o'")
92     raises(AttributeError, "p._requires = 'p'")
93     raises(AttributeError, "q._requires = 'q'")
94
95
96 def test_slots_option_readonly_name():
97     a = ChoiceOption('a', '', ('a',))
98     b = BoolOption('b', '')
99     c = IntOption('c', '')
100     d = FloatOption('d', '')
101     e = StrOption('e', '')
102     f = SymLinkOption('f', c)
103     g = UnicodeOption('g', '')
104     h = IPOption('h', '')
105     i = PortOption('i', '')
106     j = NetworkOption('j', '')
107     k = NetmaskOption('k', '')
108     l = DomainnameOption('l', '')
109     o = DomainnameOption('o', '')
110     p = DomainnameOption('p', '')
111     q = DomainnameOption('q', '')
112     m = OptionDescription('m', '', [a, b, c, d, e, f, g, h, i, j, k, l, o, p, q])
113     raises(AttributeError, "a._name = 'a'")
114     raises(AttributeError, "b._name = 'b'")
115     raises(AttributeError, "c._name = 'c'")
116     raises(AttributeError, "d._name = 'd'")
117     raises(AttributeError, "e._name = 'e'")
118     raises(AttributeError, "f._name = 'f'")
119     raises(AttributeError, "g._name = 'g'")
120     raises(AttributeError, "h._name = 'h'")
121     raises(AttributeError, "i._name = 'i'")
122     raises(AttributeError, "j._name = 'j'")
123     raises(AttributeError, "k._name = 'k'")
124     raises(AttributeError, "l._name = 'l'")
125     raises(AttributeError, "m._name = 'm'")
126     raises(AttributeError, "o._name = 'o'")
127     raises(AttributeError, "p._name = 'p'")
128     raises(AttributeError, "q._name = 'q'")
129
130
131 def test_slots_description():
132     # __slots__ for OptionDescription should be complete for __getattr__
133     slots = set()
134     for subclass in OptionDescription.__mro__:
135         if subclass is not object:
136             slots.update(subclass.__slots__)
137     assert slots == set(OptionDescription.__slots__)
138
139
140 def test_slots_config():
141     od1 = OptionDescription('a', '', [])
142     od2 = OptionDescription('a', '', [od1])
143     c = Config(od2)
144     raises(AttributeError, "c.x = 1")
145     raises(AttributeError, "c.cfgimpl_x = 1")
146     sc = c.a
147     assert isinstance(sc, SubConfig)
148     raises(AttributeError, "sc.x = 1")
149     raises(AttributeError, "sc.cfgimpl_x = 1")
150
151
152 def test_slots_setting():
153     od1 = OptionDescription('a', '', [])
154     od2 = OptionDescription('a', '', [od1])
155     c = Config(od2)
156     s = c.cfgimpl_get_settings()
157     raises(AttributeError, "s.x = 1")
158
159
160 def test_slots_value():
161     od1 = OptionDescription('a', '', [])
162     od2 = OptionDescription('a', '', [od1])
163     c = Config(od2)
164     v = c.cfgimpl_get_values()
165     raises(AttributeError, "v.x = 1")