summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/python/test/newtest.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/python/test/newtest.py')
-rw-r--r--src/boost/libs/python/test/newtest.py206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/boost/libs/python/test/newtest.py b/src/boost/libs/python/test/newtest.py
new file mode 100644
index 000000000..b878d5192
--- /dev/null
+++ b/src/boost/libs/python/test/newtest.py
@@ -0,0 +1,206 @@
+# 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)