Merge branch 'master' into orm
[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     #FIXME
54     #assert w() is None
55
56
57 def test_deref_optiondescription():
58     b = BoolOption('b', '')
59     o = OptionDescription('od', '', [b])
60     w = weakref.ref(o)
61     del(b)
62     assert w() is not None
63     del(o)
64     #FIXME
65     #assert w() is None
66
67
68 #def test_deref_option_cache():
69 #    FIXME quand c'est un dico, il faut garder la reference
70 #    mais la comme c'est dans la base, forcement c'est dereference
71 #    b = BoolOption('b', '')
72 #    o = OptionDescription('od', '', [b])
73 #    o.impl_build_cache_option()
74 #    w = weakref.ref(b)
75 #    del(b)
76 #    assert w() is not None
77 #    del(o)
78 #    #FIXME l'objet n'est plus en mémoire mais par contre reste dans la base
79 #    #Voir comment supprimer (et quand)
80 #    #assert w() is None
81
82
83 def test_deref_optiondescription_cache():
84     b = BoolOption('b', '')
85     o = OptionDescription('od', '', [b])
86     o.impl_build_cache_option()
87     w = weakref.ref(o)
88     del(b)
89     assert w() is not None
90     del(o)
91     #FIXME
92     #assert w() is None
93
94
95 #def test_deref_option_config():
96 #    b = BoolOption('b', '')
97 #    o = OptionDescription('od', '', [b])
98 #    c = Config(o)
99 #    w = weakref.ref(b)
100 #    del(b)
101 #    assert w() is not None
102 #    del(o)
103 #    assert w() is not None
104 #    del(c)
105 #    #FIXME meme chose
106 #    #assert w() is None
107
108
109 #FIXME rien a voir mais si je fais un config.impl_get_path_by_opt() ca me retourne la methode !
110 def test_deref_optiondescription_config():
111     b = BoolOption('b', '')
112     o = OptionDescription('od', '', [b])
113     c = Config(o)
114     w = weakref.ref(o)
115     del(b)
116     assert w() is not None
117     del(o)
118     assert w() is not None
119     del(c)
120     #FIXME
121     #assert w() is None
122
123
124 def test_deref_groupconfig():
125     i1 = IntOption('i1', '')
126     od1 = OptionDescription('od1', '', [i1])
127     od2 = OptionDescription('od2', '', [od1])
128     conf1 = Config(od2)
129     conf2 = Config(od2)
130     meta = GroupConfig([conf1, conf2])
131     w = weakref.ref(conf1)
132     del(conf1)
133     assert w() is not None
134     del(meta)
135     assert w() is None
136
137
138 def test_deref_metaconfig():
139     i1 = IntOption('i1', '')
140     od1 = OptionDescription('od1', '', [i1])
141     od2 = OptionDescription('od2', '', [od1])
142     conf1 = Config(od2)
143     conf2 = Config(od2)
144     meta = MetaConfig([conf1, conf2])
145     w = weakref.ref(conf1)
146     del(conf1)
147     assert w() is not None
148     del(meta)
149     assert w() is None