diff options
author | Georg Brandl <georg@python.org> | 2005-07-02 19:07:30 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2005-07-02 19:07:30 (GMT) |
commit | 9a65d583ac454a09ccb0c8e42eb4c496f6185653 (patch) | |
tree | 0bad2bb033938d5340da075662df5c3326318af7 /Lib/test/test_weakref.py | |
parent | f0af0e7a466797d9ed3fa7d635b9b1e91d5c2674 (diff) | |
download | cpython-9a65d583ac454a09ccb0c8e42eb4c496f6185653.zip cpython-9a65d583ac454a09ccb0c8e42eb4c496f6185653.tar.gz cpython-9a65d583ac454a09ccb0c8e42eb4c496f6185653.tar.bz2 |
Add doctest for examples in libweakref.tex to test_weakref.
Diffstat (limited to 'Lib/test/test_weakref.py')
-rw-r--r-- | Lib/test/test_weakref.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index 2754cec..9634ef2 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -1001,6 +1001,91 @@ class WeakKeyDictionaryTestCase(mapping_tests.BasicTestMappingProtocol): def _reference(self): return self.__ref.copy() +libreftest = """ Doctest for examples in the library reference: libweakref.tex + +>>> import weakref +>>> class Dict(dict): +... pass +... +>>> obj = Dict(red=1, green=2, blue=3) # this object is weak referencable +>>> r = weakref.ref(obj) +>>> print r() +{'blue': 3, 'green': 2, 'red': 1} + +>>> import weakref +>>> class Object: +... pass +... +>>> o = Object() +>>> r = weakref.ref(o) +>>> o2 = r() +>>> o is o2 +True +>>> del o, o2 +>>> print r() +None + +>>> import weakref +>>> class ExtendedRef(weakref.ref): +... def __init__(self, ob, callback=None, **annotations): +... super(ExtendedRef, self).__init__(ob, callback) +... self.__counter = 0 +... for k, v in annotations.iteritems(): +... setattr(self, k, v) +... def __call__(self): +... '''Return a pair containing the referent and the number of +... times the reference has been called. +... ''' +... ob = super(ExtendedRef, self).__call__() +... if ob is not None: +... self.__counter += 1 +... ob = (ob, self.__counter) +... return ob +... +>>> class A: # not in docs from here, just testing the ExtendedRef +... pass +... +>>> a = A() +>>> r = ExtendedRef(a, foo=1, bar="baz") +>>> r.foo +1 +>>> r.bar +'baz' +>>> r()[1] +1 +>>> r()[1] +2 +>>> r()[0] is a +True + + +>>> import weakref +>>> _id2obj_dict = weakref.WeakValueDictionary() +>>> def remember(obj): +... oid = id(obj) +... _id2obj_dict[oid] = obj +... return oid +... +>>> def id2obj(oid): +... return _id2obj_dict[oid] +... +>>> a = A() # from here, just testing +>>> a_id = remember(a) +>>> id2obj(a_id) is a +True +>>> del a +>>> try: +... id2obj(a_id) +... except KeyError: +... print 'OK' +... else: +... print 'WeakValueDictionary error' +OK + +""" + +__test__ = {'libreftest' : libreftest} + def test_main(): test_support.run_unittest( ReferencesTestCase, @@ -1008,6 +1093,7 @@ def test_main(): WeakValueDictionaryTestCase, WeakKeyDictionaryTestCase, ) + test_support.run_doctest(sys.modules[__name__]) if __name__ == "__main__": |