def test_BaseDerived(self): mb = MyBase() d = Tf._TestDerived() md = MyDerived() self.assertEqual('unwrapped virtual', mb.TestCallVirtual()) self.assertEqual('cpp base', mb.Virtual4()) self.assertEqual('python derived v4', md.Virtual4()) self.assertEqual((False, 'python base'), Tf._TakesBase(mb)) self.assertEqual((True, 'cpp derived'), Tf._TakesBase(d)) self.assertEqual((True, 'python derived'), Tf._TakesBase(md)) self.assertEqual('python base', Tf._TakesConstBase(mb)) self.assertEqual('cpp derived', Tf._TakesConstBase(d)) self.assertEqual('python derived', Tf._TakesConstBase(md)) self.assertEqual('cpp derived', Tf._TakesDerived(d)) self.assertEqual('python derived', Tf._TakesDerived(md)) self.assertIs(Tf._ReturnsConstBase(md), md) self.assertIs(Tf._ReturnsBase(md), md) self.assertIs(Tf._ReturnsBaseRefPtr(md), md) try: Tf._TestBase().Virtual() assert False, 'calling pure virtual' except: pass
class testPySender(object): pass args = [ # Global notices (1, "TfNotice", Tf.Notice()), (1, Tf.Notice, Tf.Notice()), (1, Tf.Notice, PyNoticeBase()), (1, PyNoticeBase, PyNoticeBase()), (1, PyNoticeBase, PyNoticeDerived()), (0, PyNoticeDerived, PyNoticeBase()), # Notices from C++ sender. (1, "TfNotice", Tf.Notice(), Tf._TestBase()), (1, Tf.Notice, Tf.Notice(), Tf._TestBase()), (1, Tf.Notice, PyNoticeBase(), Tf._TestBase()), (1, PyNoticeBase, PyNoticeBase(), Tf._TestBase()), (1, PyNoticeBase, PyNoticeDerived(), Tf._TestBase()), (0, PyNoticeDerived, PyNoticeBase(), Tf._TestBase()), # Notices from Python sender. (1, "TfNotice", Tf.Notice(), testPySender()), (1, Tf.Notice, Tf.Notice(), testPySender()), (1, Tf.Notice, PyNoticeBase(), testPySender()), (1, PyNoticeBase, PyNoticeBase(), testPySender()), (1, PyNoticeBase, PyNoticeDerived(), testPySender()), (0, PyNoticeDerived, PyNoticeBase(), testPySender()) ]