# coding: utf-8 import autopath #from py.test import raises from tiramisu.config import Config, GroupConfig, MetaConfig from tiramisu.option import BoolOption, IntOption, OptionDescription import weakref def test_deref_storage(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) c = Config(o) w = weakref.ref(c.cfgimpl_get_values()._p_) del(c) assert w() is None def test_deref_value(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) c = Config(o) w = weakref.ref(c.cfgimpl_get_values()) del(c) assert w() is None def test_deref_setting(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) c = Config(o) w = weakref.ref(c.cfgimpl_get_settings()) del(c) assert w() is None def test_deref_config(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) c = Config(o) w = weakref.ref(c) del(c) assert w() is None def test_deref_option(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) w = weakref.ref(b) del(b) assert w() is not None del(o) #FIXME #assert w() is None def test_deref_optiondescription(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) w = weakref.ref(o) del(b) assert w() is not None del(o) #FIXME #assert w() is None #def test_deref_option_cache(): # FIXME quand c'est un dico, il faut garder la reference # mais la comme c'est dans la base, forcement c'est dereference # b = BoolOption('b', '') # o = OptionDescription('od', '', [b]) # o.impl_build_cache_option() # w = weakref.ref(b) # del(b) # assert w() is not None # del(o) # #FIXME l'objet n'est plus en mémoire mais par contre reste dans la base # #Voir comment supprimer (et quand) # #assert w() is None def test_deref_optiondescription_cache(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) o.impl_build_cache_option() w = weakref.ref(o) del(b) assert w() is not None del(o) #FIXME #assert w() is None #def test_deref_option_config(): # b = BoolOption('b', '') # o = OptionDescription('od', '', [b]) # c = Config(o) # w = weakref.ref(b) # del(b) # assert w() is not None # del(o) # assert w() is not None # del(c) # #FIXME meme chose # #assert w() is None #FIXME rien a voir mais si je fais un config.impl_get_path_by_opt() ca me retourne la methode ! def test_deref_optiondescription_config(): b = BoolOption('b', '') o = OptionDescription('od', '', [b]) c = Config(o) w = weakref.ref(o) del(b) assert w() is not None del(o) assert w() is not None del(c) #FIXME #assert w() is None def test_deref_groupconfig(): i1 = IntOption('i1', '') od1 = OptionDescription('od1', '', [i1]) od2 = OptionDescription('od2', '', [od1]) conf1 = Config(od2) conf2 = Config(od2) meta = GroupConfig([conf1, conf2]) w = weakref.ref(conf1) del(conf1) assert w() is not None del(meta) assert w() is None def test_deref_metaconfig(): i1 = IntOption('i1', '') od1 = OptionDescription('od1', '', [i1]) od2 = OptionDescription('od2', '', [od1]) conf1 = Config(od2) conf2 = Config(od2) meta = MetaConfig([conf1, conf2]) w = weakref.ref(conf1) del(conf1) assert w() is not None del(meta) assert w() is None