diff --git a/test/test_dereference.py b/test/test_dereference.py index 9d17e3d..51daa9e 100644 --- a/test/test_dereference.py +++ b/test/test_dereference.py @@ -7,77 +7,71 @@ 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_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_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_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) + 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) + assert w() is None + + +def test_deref_option_cache(): + 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) + assert w() is None def test_deref_optiondescription_cache(): @@ -88,22 +82,20 @@ def test_deref_optiondescription_cache(): del(b) assert w() is not None del(o) - #FIXME - #assert w() is None + 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 +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) + assert w() is None #FIXME rien a voir mais si je fais un config.impl_get_path_by_opt() ca me retourne la methode ! diff --git a/test/test_slots.py b/test/test_slots.py index 1ce874b..225ccce 100644 --- a/test/test_slots.py +++ b/test/test_slots.py @@ -9,157 +9,157 @@ from tiramisu.option import ChoiceOption, BoolOption, IntOption, FloatOption,\ URLOption, FilenameOption -#def test_slots_option(): -# c = ChoiceOption('a', '', ('a',)) -# raises(AttributeError, "c.x = 1") -# c = BoolOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = IntOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = FloatOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = StrOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = SymLinkOption('b', c) -# raises(AttributeError, "c.x = 1") -# c = UnicodeOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = IPOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = OptionDescription('a', '', []) -# raises(AttributeError, "c.x = 1") -# c = PortOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = NetworkOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = NetmaskOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = DomainnameOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = EmailOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = URLOption('a', '') -# raises(AttributeError, "c.x = 1") -# c = FilenameOption('a', '') -# raises(AttributeError, "c.x = 1") -# -# -#def test_slots_option_readonly(): -# a = ChoiceOption('a', '', ('a',)) -# b = BoolOption('b', '') -# c = IntOption('c', '') -# d = FloatOption('d', '') -# e = StrOption('e', '') -# g = UnicodeOption('g', '') -# h = IPOption('h', '') -# i = PortOption('i', '') -# j = NetworkOption('j', '') -# k = NetmaskOption('k', '') -# l = DomainnameOption('l', '') -# o = EmailOption('o', '') -# p = URLOption('p', '') -# q = FilenameOption('q', '') -# m = OptionDescription('m', '', [a, b, c, d, e, g, h, i, j, k, l, o, p, q]) -# a._requires = 'a' -# b._requires = 'b' -# c._requires = 'c' -# d._requires = 'd' -# e._requires = 'e' -# g._requires = 'g' -# h._requires = 'h' -# i._requires = 'i' -# j._requires = 'j' -# k._requires = 'k' -# l._requires = 'l' -# m._requires = 'm' -# o._requires = 'o' -# p._requires = 'p' -# q._requires = 'q' -# Config(m) -# raises(AttributeError, "a._requires = 'a'") -# raises(AttributeError, "b._requires = 'b'") -# raises(AttributeError, "c._requires = 'c'") -# raises(AttributeError, "d._requires = 'd'") -# raises(AttributeError, "e._requires = 'e'") -# raises(AttributeError, "g._requires = 'g'") -# raises(AttributeError, "h._requires = 'h'") -# raises(AttributeError, "i._requires = 'i'") -# raises(AttributeError, "j._requires = 'j'") -# raises(AttributeError, "k._requires = 'k'") -# raises(AttributeError, "l._requires = 'l'") -# raises(AttributeError, "m._requires = 'm'") -# raises(AttributeError, "o._requires = 'o'") -# raises(AttributeError, "p._requires = 'p'") -# raises(AttributeError, "q._requires = 'q'") -# -# -#def test_slots_option_readonly_name(): -# a = ChoiceOption('a', '', ('a',)) -# b = BoolOption('b', '') -# c = IntOption('c', '') -# d = FloatOption('d', '') -# e = StrOption('e', '') -# f = SymLinkOption('f', c) -# g = UnicodeOption('g', '') -# h = IPOption('h', '') -# i = PortOption('i', '') -# j = NetworkOption('j', '') -# k = NetmaskOption('k', '') -# l = DomainnameOption('l', '') -# o = DomainnameOption('o', '') -# p = DomainnameOption('p', '') -# q = DomainnameOption('q', '') -# m = OptionDescription('m', '', [a, b, c, d, e, f, g, h, i, j, k, l, o, p, q]) -# raises(AttributeError, "a._name = 'a'") -# raises(AttributeError, "b._name = 'b'") -# raises(AttributeError, "c._name = 'c'") -# raises(AttributeError, "d._name = 'd'") -# raises(AttributeError, "e._name = 'e'") -# raises(AttributeError, "f._name = 'f'") -# raises(AttributeError, "g._name = 'g'") -# raises(AttributeError, "h._name = 'h'") -# raises(AttributeError, "i._name = 'i'") -# raises(AttributeError, "j._name = 'j'") -# raises(AttributeError, "k._name = 'k'") -# raises(AttributeError, "l._name = 'l'") -# raises(AttributeError, "m._name = 'm'") -# raises(AttributeError, "o._name = 'o'") -# raises(AttributeError, "p._name = 'p'") -# raises(AttributeError, "q._name = 'q'") -# -# -##def test_slots_description(): -## # __slots__ for OptionDescription should be complete for __getattr__ -## slots = set() -## for subclass in OptionDescription.__mro__: -## if subclass is not object: -## slots.update(subclass.__slots__) -## assert slots == set(OptionDescription.__slots__) -# -# -#def test_slots_config(): -# od1 = OptionDescription('a', '', []) -# od2 = OptionDescription('a', '', [od1]) -# c = Config(od2) -# raises(AttributeError, "c.x = 1") -# raises(AttributeError, "c.cfgimpl_x = 1") -# sc = c.a -# assert isinstance(sc, SubConfig) -# raises(AttributeError, "sc.x = 1") -# raises(AttributeError, "sc.cfgimpl_x = 1") -# -# -#def test_slots_setting(): -# od1 = OptionDescription('a', '', []) -# od2 = OptionDescription('a', '', [od1]) -# c = Config(od2) -# s = c.cfgimpl_get_settings() -# raises(AttributeError, "s.x = 1") -# -# -#def test_slots_value(): -# od1 = OptionDescription('a', '', []) -# od2 = OptionDescription('a', '', [od1]) -# c = Config(od2) -# v = c.cfgimpl_get_values() -# raises(AttributeError, "v.x = 1") +def test_slots_option(): + c = ChoiceOption('a', '', ('a',)) + raises(AttributeError, "c.x = 1") + c = BoolOption('a', '') + raises(AttributeError, "c.x = 1") + c = IntOption('a', '') + raises(AttributeError, "c.x = 1") + c = FloatOption('a', '') + raises(AttributeError, "c.x = 1") + c = StrOption('a', '') + raises(AttributeError, "c.x = 1") + c = SymLinkOption('b', c) + raises(AttributeError, "c.x = 1") + c = UnicodeOption('a', '') + raises(AttributeError, "c.x = 1") + c = IPOption('a', '') + raises(AttributeError, "c.x = 1") + c = OptionDescription('a', '', []) + raises(AttributeError, "c.x = 1") + c = PortOption('a', '') + raises(AttributeError, "c.x = 1") + c = NetworkOption('a', '') + raises(AttributeError, "c.x = 1") + c = NetmaskOption('a', '') + raises(AttributeError, "c.x = 1") + c = DomainnameOption('a', '') + raises(AttributeError, "c.x = 1") + c = EmailOption('a', '') + raises(AttributeError, "c.x = 1") + c = URLOption('a', '') + raises(AttributeError, "c.x = 1") + c = FilenameOption('a', '') + raises(AttributeError, "c.x = 1") + + +def test_slots_option_readonly(): + a = ChoiceOption('a', '', ('a',)) + b = BoolOption('b', '') + c = IntOption('c', '') + d = FloatOption('d', '') + e = StrOption('e', '') + g = UnicodeOption('g', '') + h = IPOption('h', '') + i = PortOption('i', '') + j = NetworkOption('j', '') + k = NetmaskOption('k', '') + l = DomainnameOption('l', '') + o = EmailOption('o', '') + p = URLOption('p', '') + q = FilenameOption('q', '') + m = OptionDescription('m', '', [a, b, c, d, e, g, h, i, j, k, l, o, p, q]) + a._requires = 'a' + b._requires = 'b' + c._requires = 'c' + d._requires = 'd' + e._requires = 'e' + g._requires = 'g' + h._requires = 'h' + i._requires = 'i' + j._requires = 'j' + k._requires = 'k' + l._requires = 'l' + m._requires = 'm' + o._requires = 'o' + p._requires = 'p' + q._requires = 'q' + Config(m) + raises(AttributeError, "a._requires = 'a'") + raises(AttributeError, "b._requires = 'b'") + raises(AttributeError, "c._requires = 'c'") + raises(AttributeError, "d._requires = 'd'") + raises(AttributeError, "e._requires = 'e'") + raises(AttributeError, "g._requires = 'g'") + raises(AttributeError, "h._requires = 'h'") + raises(AttributeError, "i._requires = 'i'") + raises(AttributeError, "j._requires = 'j'") + raises(AttributeError, "k._requires = 'k'") + raises(AttributeError, "l._requires = 'l'") + raises(AttributeError, "m._requires = 'm'") + raises(AttributeError, "o._requires = 'o'") + raises(AttributeError, "p._requires = 'p'") + raises(AttributeError, "q._requires = 'q'") + + +def test_slots_option_readonly_name(): + a = ChoiceOption('a', '', ('a',)) + b = BoolOption('b', '') + c = IntOption('c', '') + d = FloatOption('d', '') + e = StrOption('e', '') + f = SymLinkOption('f', c) + g = UnicodeOption('g', '') + h = IPOption('h', '') + i = PortOption('i', '') + j = NetworkOption('j', '') + k = NetmaskOption('k', '') + l = DomainnameOption('l', '') + o = DomainnameOption('o', '') + p = DomainnameOption('p', '') + q = DomainnameOption('q', '') + m = OptionDescription('m', '', [a, b, c, d, e, f, g, h, i, j, k, l, o, p, q]) + raises(AttributeError, "a._name = 'a'") + raises(AttributeError, "b._name = 'b'") + raises(AttributeError, "c._name = 'c'") + raises(AttributeError, "d._name = 'd'") + raises(AttributeError, "e._name = 'e'") + raises(AttributeError, "f._name = 'f'") + raises(AttributeError, "g._name = 'g'") + raises(AttributeError, "h._name = 'h'") + raises(AttributeError, "i._name = 'i'") + raises(AttributeError, "j._name = 'j'") + raises(AttributeError, "k._name = 'k'") + raises(AttributeError, "l._name = 'l'") + raises(AttributeError, "m._name = 'm'") + raises(AttributeError, "o._name = 'o'") + raises(AttributeError, "p._name = 'p'") + raises(AttributeError, "q._name = 'q'") + + +#def test_slots_description(): +# # __slots__ for OptionDescription should be complete for __getattr__ +# slots = set() +# for subclass in OptionDescription.__mro__: +# if subclass is not object: +# slots.update(subclass.__slots__) +# assert slots == set(OptionDescription.__slots__) + + +def test_slots_config(): + od1 = OptionDescription('a', '', []) + od2 = OptionDescription('a', '', [od1]) + c = Config(od2) + raises(AttributeError, "c.x = 1") + raises(AttributeError, "c.cfgimpl_x = 1") + sc = c.a + assert isinstance(sc, SubConfig) + raises(AttributeError, "sc.x = 1") + raises(AttributeError, "sc.cfgimpl_x = 1") + + +def test_slots_setting(): + od1 = OptionDescription('a', '', []) + od2 = OptionDescription('a', '', [od1]) + c = Config(od2) + s = c.cfgimpl_get_settings() + raises(AttributeError, "s.x = 1") + + +def test_slots_value(): + od1 = OptionDescription('a', '', []) + od2 = OptionDescription('a', '', [od1]) + c = Config(od2) + v = c.cfgimpl_get_values() + raises(AttributeError, "v.x = 1")