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))