'getattr' in optiondescription can return a bound method
[tiramisu.git] / test / test_dereference.py
1 # coding: utf-8
2 import autopath
3 #from py.test import raises
4
5 from tiramisu.config import Config, GroupConfig, MetaConfig
6 from tiramisu.option import BoolOption, IntOption, OptionDescription
7 import weakref
8
9
10 def test_deref_storage():
11     b = BoolOption('b', '')
12     o = OptionDescription('od', '', [b])
13     c = Config(o)
14     w = weakref.ref(c.cfgimpl_get_values()._p_)
15     del(c)
16     assert w() is None
17
18
19 def test_deref_value():
20     b = BoolOption('b', '')
21     o = OptionDescription('od', '', [b])
22     c = Config(o)
23     w = weakref.ref(c.cfgimpl_get_values())
24     del(c)
25     assert w() is None
26
27
28 def test_deref_setting():
29     b = BoolOption('b', '')
30     o = OptionDescription('od', '', [b])
31     c = Config(o)
32     w = weakref.ref(c.cfgimpl_get_settings())
33     del(c)
34     assert w() is None
35
36
37 def test_deref_config():
38     b = BoolOption('b', '')
39     o = OptionDescription('od', '', [b])
40     c = Config(o)
41     w = weakref.ref(c)
42     del(c)
43     assert w() is None
44
45
46 def test_deref_option():
47     b = BoolOption('b', '')
48     o = OptionDescription('od', '', [b])
49     w = weakref.ref(b)
50     del(b)
51     assert w() is not None
52     del(o)
53     assert w() is None
54
55
56 def test_deref_optiondescription():
57     b = BoolOption('b', '')
58     o = OptionDescription('od', '', [b])
59     w = weakref.ref(o)
60     del(b)
61     assert w() is not None
62     del(o)
63     assert w() is None
64
65
66 def test_deref_option_cache():
67     b = BoolOption('b', '')
68     o = OptionDescription('od', '', [b])
69     o.impl_build_cache_option()
70     w = weakref.ref(b)
71     del(b)
72     assert w() is not None
73     del(o)
74     assert w() is None
75
76
77 def test_deref_optiondescription_cache():
78     b = BoolOption('b', '')
79     o = OptionDescription('od', '', [b])
80     o.impl_build_cache_option()
81     w = weakref.ref(o)
82     del(b)
83     assert w() is not None
84     del(o)
85     assert w() is None
86
87
88 def test_deref_option_config():
89     b = BoolOption('b', '')
90     o = OptionDescription('od', '', [b])
91     c = Config(o)
92     w = weakref.ref(b)
93     del(b)
94     assert w() is not None
95     del(o)
96     assert w() is not None
97     del(c)
98     assert w() is None
99
100
101 def test_deref_optiondescription_config():
102     b = BoolOption('b', '')
103     o = OptionDescription('od', '', [b])
104     c = Config(o)
105     w = weakref.ref(o)
106     del(b)
107     assert w() is not None
108     del(o)
109     assert w() is not None
110     del(c)
111     assert w() is None
112
113
114 def test_deref_groupconfig():
115     i1 = IntOption('i1', '')
116     od1 = OptionDescription('od1', '', [i1])
117     od2 = OptionDescription('od2', '', [od1])
118     conf1 = Config(od2)
119     conf2 = Config(od2)
120     meta = GroupConfig([conf1, conf2])
121     w = weakref.ref(conf1)
122     del(conf1)
123     assert w() is not None
124     del(meta)
125     assert w() is None
126
127
128 def test_deref_metaconfig():
129     i1 = IntOption('i1', '')
130     od1 = OptionDescription('od1', '', [i1])
131     od2 = OptionDescription('od2', '', [od1])
132     conf1 = Config(od2)
133     conf2 = Config(od2)
134     meta = MetaConfig([conf1, conf2])
135     w = weakref.ref(conf1)
136     del(conf1)
137     assert w() is not None
138     del(meta)
139     assert w() is None