1 | # Copyright David Abrahams 2004. Distributed under the Boost |
---|
2 | # Software License, Version 1.0. (See accompanying |
---|
3 | # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
---|
4 | import unittest |
---|
5 | from polymorphism_ext import * |
---|
6 | |
---|
7 | class PolymorphTest(unittest.TestCase): |
---|
8 | |
---|
9 | def testReturnCpp(self): |
---|
10 | |
---|
11 | # Python Created Object With Same Id As |
---|
12 | # Cpp Created B Object |
---|
13 | # b = B(872) |
---|
14 | |
---|
15 | # Get Reference To Cpp Created B Object |
---|
16 | a = getBCppObj() |
---|
17 | |
---|
18 | # Python Created B Object and Cpp B Object |
---|
19 | # Should have same result by calling f() |
---|
20 | self.failUnlessEqual ('B::f()', a.f()) |
---|
21 | self.failUnlessEqual ('B::f()', call_f(a)) |
---|
22 | self.failUnlessEqual ('A::f()', call_f(A())) |
---|
23 | |
---|
24 | def test_references(self): |
---|
25 | # B is not exposed to Python |
---|
26 | a = getBCppObj() |
---|
27 | self.failUnlessEqual(type(a), A) |
---|
28 | |
---|
29 | # C is exposed to Python |
---|
30 | c = getCCppObj() |
---|
31 | self.failUnlessEqual(type(c), C) |
---|
32 | |
---|
33 | def test_factory(self): |
---|
34 | self.failUnlessEqual(type(factory(0)), A) |
---|
35 | self.failUnlessEqual(type(factory(1)), A) |
---|
36 | self.failUnlessEqual(type(factory(2)), C) |
---|
37 | |
---|
38 | def test_return_py(self): |
---|
39 | |
---|
40 | class X(A): |
---|
41 | def f(self): |
---|
42 | return 'X.f' |
---|
43 | |
---|
44 | x = X() |
---|
45 | |
---|
46 | self.failUnlessEqual ('X.f', x.f()) |
---|
47 | self.failUnlessEqual ('X.f', call_f(x)) |
---|
48 | |
---|
49 | def test_wrapper_downcast(self): |
---|
50 | a = pass_a(D()) |
---|
51 | self.failUnlessEqual('D::g()', a.g()) |
---|
52 | |
---|
53 | def test_pure_virtual(self): |
---|
54 | p = P() |
---|
55 | self.assertRaises(RuntimeError, p.f) |
---|
56 | |
---|
57 | q = Q() |
---|
58 | self.failUnlessEqual ('Q::f()', q.f()) |
---|
59 | |
---|
60 | class R(P): |
---|
61 | def f(self): |
---|
62 | return 'R.f' |
---|
63 | |
---|
64 | r = R() |
---|
65 | self.failUnlessEqual ('R.f', r.f()) |
---|
66 | |
---|
67 | |
---|
68 | if __name__ == "__main__": |
---|
69 | |
---|
70 | # remove the option which upsets unittest |
---|
71 | import sys |
---|
72 | sys.argv = [ x for x in sys.argv if x != '--broken-auto-ptr' ] |
---|
73 | |
---|
74 | unittest.main() |
---|