From 0da8a9bb44ba3703393b7f03a358b5d4357a68d5 Mon Sep 17 00:00:00 2001 From: Seth R Johnson Date: Sat, 12 Feb 2022 18:43:02 -0500 Subject: [PATCH] Test ability to manipulate a daughter class from its base class wrapper Even in the case of just creating a `DerivedClass` this test says: ``` swig/python detected a memory leak of type 'DerivedClass *', no destructor found. ``` even though the destructor is defined in the base class. --- Examples/test-suite/abstract_basecast.i | 20 +++++++++++++++++++ Examples/test-suite/common.mk | 1 + .../python/abstract_basecast_runme.py | 15 ++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 Examples/test-suite/abstract_basecast.i create mode 100644 Examples/test-suite/python/abstract_basecast_runme.py diff --git a/Examples/test-suite/abstract_basecast.i b/Examples/test-suite/abstract_basecast.i new file mode 100644 index 000000000..b6a21aa64 --- /dev/null +++ b/Examples/test-suite/abstract_basecast.i @@ -0,0 +1,20 @@ +%module abstract_basecast + +%inline %{ +class BaseClass { +public: + virtual ~BaseClass() { } + + virtual void g() = 0; +}; + +class DerivedClass : public BaseClass { +public: + + virtual void g() { } + + BaseClass& f() { + return *this; + } +}; +%} diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 20d358d80..4a7855efb 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -102,6 +102,7 @@ C_TEST_BROKEN += \ # C++ test cases. (Can be run individually using: make testcase.cpptest) CPP_TEST_CASES += \ abstract_access \ + abstract_basecast \ abstract_inherit \ abstract_inherit_ok \ abstract_signature \ diff --git a/Examples/test-suite/python/abstract_basecast_runme.py b/Examples/test-suite/python/abstract_basecast_runme.py new file mode 100644 index 000000000..4a3f4a9e1 --- /dev/null +++ b/Examples/test-suite/python/abstract_basecast_runme.py @@ -0,0 +1,15 @@ +from abstract_basecast import * + +def check(flag): + if not flag: + raise RuntimeError("Test failed") + +derived = DerivedClass() +derived.g() +check(isinstance(derived, BaseClass)) +check(isinstance(derived, DerivedClass)) + +base = derived.f() +base.g() +check(isinstance(base, BaseClass)) +check(not isinstance(base, DerivedClass))