| """Test module for the noddy examples | 
 |  | 
 | Noddy 1: | 
 |  | 
 | >>> import noddy | 
 | >>> n1 = noddy.Noddy() | 
 | >>> n2 = noddy.Noddy() | 
 | >>> del n1 | 
 | >>> del n2 | 
 |  | 
 |  | 
 | Noddy 2 | 
 |  | 
 | >>> import noddy2 | 
 | >>> n1 = noddy2.Noddy('jim', 'fulton', 42) | 
 | >>> n1.first | 
 | 'jim' | 
 | >>> n1.last | 
 | 'fulton' | 
 | >>> n1.number | 
 | 42 | 
 | >>> n1.name() | 
 | 'jim fulton' | 
 | >>> n1.first = 'will' | 
 | >>> n1.name() | 
 | 'will fulton' | 
 | >>> n1.last = 'tell' | 
 | >>> n1.name() | 
 | 'will tell' | 
 | >>> del n1.first | 
 | >>> n1.name() | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n1.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n1.first = 'drew' | 
 | >>> n1.first | 
 | 'drew' | 
 | >>> del n1.number | 
 | Traceback (most recent call last): | 
 | ... | 
 | TypeError: can't delete numeric/char attribute | 
 | >>> n1.number=2 | 
 | >>> n1.number | 
 | 2 | 
 | >>> n1.first = 42 | 
 | >>> n1.name() | 
 | '42 tell' | 
 | >>> n2 = noddy2.Noddy() | 
 | >>> n2.name() | 
 | ' ' | 
 | >>> n2.first | 
 | '' | 
 | >>> n2.last | 
 | '' | 
 | >>> del n2.first | 
 | >>> n2.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n2.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n2.name() | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | AttributeError: first | 
 | >>> n2.number | 
 | 0 | 
 | >>> n3 = noddy2.Noddy('jim', 'fulton', 'waaa') | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | TypeError: an integer is required | 
 | >>> del n1 | 
 | >>> del n2 | 
 |  | 
 |  | 
 | Noddy 3 | 
 |  | 
 | >>> import noddy3 | 
 | >>> n1 = noddy3.Noddy('jim', 'fulton', 42) | 
 | >>> n1 = noddy3.Noddy('jim', 'fulton', 42) | 
 | >>> n1.name() | 
 | 'jim fulton' | 
 | >>> del n1.first | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | TypeError: Cannot delete the first attribute | 
 | >>> n1.first = 42 | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | TypeError: The first attribute value must be a string | 
 | >>> n1.first = 'will' | 
 | >>> n1.name() | 
 | 'will fulton' | 
 | >>> n2 = noddy3.Noddy() | 
 | >>> n2 = noddy3.Noddy() | 
 | >>> n2 = noddy3.Noddy() | 
 | >>> n3 = noddy3.Noddy('jim', 'fulton', 'waaa') | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | TypeError: an integer is required | 
 | >>> del n1 | 
 | >>> del n2 | 
 |  | 
 | Noddy 4 | 
 |  | 
 | >>> import noddy4 | 
 | >>> n1 = noddy4.Noddy('jim', 'fulton', 42) | 
 | >>> n1.first | 
 | 'jim' | 
 | >>> n1.last | 
 | 'fulton' | 
 | >>> n1.number | 
 | 42 | 
 | >>> n1.name() | 
 | 'jim fulton' | 
 | >>> n1.first = 'will' | 
 | >>> n1.name() | 
 | 'will fulton' | 
 | >>> n1.last = 'tell' | 
 | >>> n1.name() | 
 | 'will tell' | 
 | >>> del n1.first | 
 | >>> n1.name() | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n1.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n1.first = 'drew' | 
 | >>> n1.first | 
 | 'drew' | 
 | >>> del n1.number | 
 | Traceback (most recent call last): | 
 | ... | 
 | TypeError: can't delete numeric/char attribute | 
 | >>> n1.number=2 | 
 | >>> n1.number | 
 | 2 | 
 | >>> n1.first = 42 | 
 | >>> n1.name() | 
 | '42 tell' | 
 | >>> n2 = noddy4.Noddy() | 
 | >>> n2 = noddy4.Noddy() | 
 | >>> n2 = noddy4.Noddy() | 
 | >>> n2 = noddy4.Noddy() | 
 | >>> n2.name() | 
 | ' ' | 
 | >>> n2.first | 
 | '' | 
 | >>> n2.last | 
 | '' | 
 | >>> del n2.first | 
 | >>> n2.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n2.first | 
 | Traceback (most recent call last): | 
 | ... | 
 | AttributeError: first | 
 | >>> n2.name() | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | AttributeError: first | 
 | >>> n2.number | 
 | 0 | 
 | >>> n3 = noddy4.Noddy('jim', 'fulton', 'waaa') | 
 | Traceback (most recent call last): | 
 |   File "<stdin>", line 1, in ? | 
 | TypeError: an integer is required | 
 |  | 
 |  | 
 | Test cyclic gc(?) | 
 |  | 
 | >>> import gc | 
 | >>> gc.disable() | 
 |  | 
 | >>> x = [] | 
 | >>> l = [x] | 
 | >>> n2.first = l | 
 | >>> n2.first | 
 | [[]] | 
 | >>> l.append(n2) | 
 | >>> del l | 
 | >>> del n1 | 
 | >>> del n2 | 
 | >>> sys.getrefcount(x) | 
 | 3 | 
 | >>> ignore = gc.collect() | 
 | >>> sys.getrefcount(x) | 
 | 2 | 
 |  | 
 | >>> gc.enable() | 
 | """ | 
 |  | 
 | import os | 
 | import sys | 
 | from distutils.util import get_platform | 
 | PLAT_SPEC = "%s-%s" % (get_platform(), sys.version[0:3]) | 
 | src = os.path.join("build", "lib.%s" % PLAT_SPEC) | 
 | sys.path.append(src) | 
 |  | 
 | if __name__ == "__main__": | 
 |     import doctest, __main__ | 
 |     doctest.testmod(__main__) |