123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- # 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 m1 import *
- >>> from m2 import *
- Prove that we get an appropriate error from trying to return a type
- for which we have no registered to_python converter
- >>> def check_unregistered(f, msgprefix):
- ... try:
- ... f(1)
- ... except TypeError as x:
- ... if not str(x).startswith(msgprefix):
- ... print(str(x))
- ... else:
- ... print('expected a TypeError')
- ...
- >>> check_unregistered(make_unregistered, 'No to_python (by-value) converter found for C++ type')
- >>> check_unregistered(make_unregistered2, 'No Python class registered for C++ class')
- >>> n = new_noddy()
- >>> s = new_simple()
- >>> unwrap_int(n)
- 42
- >>> unwrap_int_ref(n)
- 42
- >>> unwrap_int_const_ref(n)
- 42
- >>> unwrap_simple(s)
- 'hello, world'
- >>> unwrap_simple_ref(s)
- 'hello, world'
- >>> unwrap_simple_const_ref(s)
- 'hello, world'
- >>> unwrap_int(5)
- 5
- Can't get a non-const reference to a built-in integer object
- >>> try:
- ... unwrap_int_ref(7)
- ... except: pass
- ... else: print('no exception')
- >>> unwrap_int_const_ref(9)
- 9
- >>> wrap_int(n)
- 42
- try: wrap_int_ref(n)
- ... except: pass
- ... else: print('no exception')
- >>> wrap_int_const_ref(n)
- 42
- >>> unwrap_simple_ref(wrap_simple(s))
- 'hello, world'
- >>> unwrap_simple_ref(wrap_simple_ref(s))
- 'hello, world'
- >>> unwrap_simple_ref(wrap_simple_const_ref(s))
- 'hello, world'
- >>> f(s)
- 12
- >>> unwrap_simple(g(s))
- 'hello, world'
- >>> f(g(s))
- 12
- >>> f_mutable_ref(g(s))
- 12
- >>> f_const_ptr(g(s))
- 12
- >>> f_mutable_ptr(g(s))
- 12
- >>> f2(g(s))
- 12
- Create an extension class which wraps "complicated" (init1 and get_n)
- are a complicated constructor and member function, respectively.
- >>> c1 = complicated(s, 99)
- >>> c1.get_n()
- 99
- >>> c2 = complicated(s)
- >>> c2.get_n()
- 0
- a quick regression test for a bug where None could be converted
- to the target of any member function. To see it, we need to
- access the __dict__ directly, to bypass the type check supplied
- by the Method property which wraps the method when accessed as an
- attribute.
- >>> try: A.__dict__['name'](None)
- ... except TypeError: pass
- ... else: print('expected an exception!')
- >>> a = A()
- >>> b = B()
- >>> c = C()
- >>> d = D()
- >>> take_a(a).name()
- 'A'
- >>> try:
- ... take_b(a)
- ... except: pass
- ... else: print('no exception')
- >>> try:
- ... take_c(a)
- ... except: pass
- ... else: print('no exception')
- >>> try:
- ... take_d(a)
- ... except: pass
- ... else: print('no exception')
- ------
- >>> take_a(b).name()
- 'A'
- >>> take_b(b).name()
- 'B'
- >>> try:
- ... take_c(b)
- ... except: pass
- ... else: print('no exception')
- >>> try:
- ... take_d(b)
- ... except: pass
- ... else: print('no exception')
- -------
- >>> take_a(c).name()
- 'A'
- >>> try:
- ... take_b(c)
- ... except: pass
- ... else: print('no exception')
- >>> take_c(c).name()
- 'C'
- >>> try:
- ... take_d(c)
- ... except: pass
- ... else: print('no exception')
- -------
- >>> take_a(d).name()
- 'A'
- >>> take_b(d).name()
- 'B'
- >>> take_c(d).name()
- 'C'
- >>> take_d(d).name()
- 'D'
- >>> take_d_shared_ptr(d).name()
- 'D'
- >>> d_as_a = d_factory()
- >>> dd = take_d(d_as_a)
- >>> dd.name()
- 'D'
- >>> print(g.__doc__.splitlines()[1])
- g( (Simple)arg1) -> Simple :
- """
- 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)
|