polymorphism2.py

来自「Boost provides free peer-reviewed portab」· Python 代码 · 共 95 行

PY
95
字号
# 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)import unittestimport sysclass PolymorphTest(unittest.TestCase):   def testReturnCpp(self):      # Python Created Object With Same Id As      # Cpp Created B Object       # b = B(872)        #  Get Reference To Cpp Created B Object      a = getBCppObj()      # Python Created B Object and Cpp B Object      # Should have same result by calling f()      self.failUnlessEqual ('B::f()', a.f())      self.failUnlessEqual ('B::f()', call_f(a))      self.failUnlessEqual ('A::f()', call_f(A()))   def test_references(self):      # B is not exposed to Python      a = getBCppObj()      self.failUnlessEqual(type(a), A)      # C is exposed to Python      c = getCCppObj()      self.failUnlessEqual(type(c), C)         def test_factory(self):      self.failUnlessEqual(type(factory(0)), A)      self.failUnlessEqual(type(factory(1)), A)      self.failUnlessEqual(type(factory(2)), C)   def test_return_py(self):      class X(A):         def f(self):            return 'X.f'      x = X()            self.failUnlessEqual ('X.f', x.f())      self.failUnlessEqual ('X.f', call_f(x))   def test_self_default(self):      class X(A):         def f(self):            return 'X.f() -> ' + A.f(self)      x = X()            self.failUnlessEqual ('X.f() -> A::f()', x.f())            # This one properly raises the "dangling reference" exception      # self.failUnlessEqual ('X.f() -> A::f()', call_f(x))   def test_wrapper_downcast(self):      a = pass_a(D())      self.failUnlessEqual('D::g()', a.g())   def test_pure_virtual(self):      p = P()      self.assertRaises(RuntimeError, p.f)            q = Q()      self.failUnlessEqual ('Q::f()', q.f())            class R(P):         def f(self):            return 'R.f'      r = R()      self.failUnlessEqual ('R.f', r.f())      def test():   # remove the option that upsets unittest   import sys   sys.argv = [ x for x in sys.argv if x != '--broken-auto-ptr' ]   unittest.main()# This nasty hack basically says that if we're loaded by another module, we'll# be testing polymorphism2_auto_ptr_ext instead of polymorphism2_ext.if __name__ == "__main__":   from polymorphism2_ext import *   test()else:   from polymorphism2_auto_ptr_ext import *   

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?