123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- # Copyright David Abrahams 2004. Distributed under the Boost
- # Software License, Version 1.0. (See accompanying
- # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- from __future__ import print_function
- '''
- >>> from object_ext import *
- >>> type(ref_to_noncopyable())
- <class 'object_ext.NotCopyable'>
- >>> def print1(x):
- ... print(x)
- >>> call_object_3(print1)
- 3
- >>> message()
- 'hello, world!'
- >>> number()
- 42
- >>> test('hi')
- 1
- >>> test(None)
- 0
- >>> test_not('hi')
- 0
- >>> test_not(0)
- 1
- Attributes
- >>> class X: pass
- ...
- >>> x = X()
- >>> try: obj_getattr(x, 'foo')
- ... except AttributeError: pass
- ... else: print('expected an exception')
- >>> try: obj_objgetattr(x, 'objfoo')
- ... except AttributeError: pass
- ... else: print('expected an exception')
- >>> obj_setattr(x, 'foo', 1)
- >>> x.foo
- 1
- >>> obj_objsetattr(x, 'objfoo', 1)
- >>> try:obj_objsetattr(x, 1)
- ... except TypeError: pass
- ... else: print('expected an exception')
- >>> x.objfoo
- 1
- >>> obj_getattr(x, 'foo')
- 1
- >>> obj_objgetattr(x, 'objfoo')
- 1
- >>> try:obj_objgetattr(x, 1)
- ... except TypeError: pass
- ... else: print('expected an exception')
- >>> obj_const_getattr(x, 'foo')
- 1
- >>> obj_const_objgetattr(x, 'objfoo')
- 1
- >>> obj_setattr42(x, 'foo')
- >>> x.foo
- 42
- >>> obj_objsetattr42(x, 'objfoo')
- >>> x.objfoo
- 42
- >>> obj_moveattr(x, 'foo', 'bar')
- >>> x.bar
- 42
- >>> obj_objmoveattr(x, 'objfoo', 'objbar')
- >>> x.objbar
- 42
- >>> test_attr(x, 'foo')
- 1
- >>> test_objattr(x, 'objfoo')
- 1
- >>> test_not_attr(x, 'foo')
- 0
- >>> test_not_objattr(x, 'objfoo')
- 0
- >>> x.foo = None
- >>> test_attr(x, 'foo')
- 0
- >>> x.objfoo = None
- >>> test_objattr(x, 'objfoo')
- 0
- >>> test_not_attr(x, 'foo')
- 1
- >>> test_not_objattr(x, 'objfoo')
- 1
- >>> obj_delattr(x, 'foo')
- >>> obj_objdelattr(x, 'objfoo')
- >>> try:obj_delattr(x, 'foo')
- ... except AttributeError: pass
- ... else: print('expected an exception')
- >>> try:obj_objdelattr(x, 'objfoo')
- ... except AttributeError: pass
- ... else: print('expected an exception')
- Items
- >>> d = {}
- >>> obj_setitem(d, 'foo', 1)
- >>> d['foo']
- 1
- >>> obj_getitem(d, 'foo')
- 1
- >>> obj_const_getitem(d, 'foo')
- 1
- >>> obj_setitem42(d, 'foo')
- >>> obj_getitem(d, 'foo')
- 42
- >>> d['foo']
- 42
- >>> obj_moveitem(d, 'foo', 'bar')
- >>> d['bar']
- 42
- >>> obj_moveitem2(d, 'bar', d, 'baz')
- >>> d['baz']
- 42
- >>> test_item(d, 'foo')
- 1
- >>> test_not_item(d, 'foo')
- 0
- >>> d['foo'] = None
- >>> test_item(d, 'foo')
- 0
- >>> test_not_item(d, 'foo')
- 1
- Slices
-
- >>> assert check_string_slice()
- Operators
- >>> def print_args(*args, **kwds):
- ... print(args, kwds)
- >>> test_call(print_args, (0, 1, 2, 3), {'a':'A'})
- (0, 1, 2, 3) {'a': 'A'}
- >>> assert check_binary_operators()
- >>> class X: pass
- ...
- >>> assert check_inplace(list(range(3)), X())
- Now make sure that object is actually managing reference counts
-
- >>> import weakref
- >>> class Z: pass
- ...
- >>> z = Z()
- >>> def death(r): print('death')
- ...
- >>> r = weakref.ref(z, death)
- >>> z.foo = 1
- >>> obj_getattr(z, 'foo')
- 1
- >>> del z
- death
- '''
- def run(args = None):
- import sys
- import doctest
- if args is not None:
- sys.argv = args
- return doctest.testmod(sys.modules.get(__name__))
-
- if __name__ == '__main__':
- print("running...")
- import sys
- status = run()[0]
- if (status == 0): print("Done.")
- sys.exit(status)
|