From 29c6eb562540bb3dc87fe01b6ac40d6ebbab2407 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 11 May 2020 00:56:28 +0300 Subject: [PATCH] Test overriding from a secondary base for Itanium Fixes https://github.com/mono/CppSharp/issues/1364. Signed-off-by: Dimitar Dobrev --- tests/CSharp/CSharp.Tests.cs | 18 ++++++++++++++++++ tests/CSharp/CSharp.cpp | 23 +++++++++++++++++++++++ tests/CSharp/CSharp.h | 12 ++++++++++++ 3 files changed, 53 insertions(+) diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index 7bcee686..f2f0fc60 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -102,6 +102,24 @@ public unsafe class CSharpTests : GeneratorTestFixture #pragma warning restore 0219 } + private class OverriddenInManaged : Baz + { + public override int Type => 10; + } + + [Test] + public void TestDer() + { + using (var der = new OverriddenInManaged()) + { + using (var hasDer = new HasOverriddenInManaged()) + { + hasDer.SetOverriddenInManaged(der); + Assert.That(hasDer.CallOverriddenInManaged(), Is.EqualTo(10)); + } + } + } + [Test] public void TestReturnCharPointer() { diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 024c9833..0e0cfe44 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -329,6 +329,11 @@ void Baz::setMethod(ProtectedNestedEnum value) { } +int Baz::type() const +{ + return -1; +} + AbstractProprietor::~AbstractProprietor() { } @@ -865,6 +870,24 @@ AbstractWithProperty::~AbstractWithProperty() { } +HasOverriddenInManaged::HasOverriddenInManaged() +{ +} + +HasOverriddenInManaged::~HasOverriddenInManaged() +{ +} + +void HasOverriddenInManaged::setOverriddenInManaged(Baz* value) +{ + overriddenInManaged = value; +} + +int HasOverriddenInManaged::callOverriddenInManaged() +{ + return overriddenInManaged->type(); +} + IgnoredType PropertyWithIgnoredType::ignoredType() { return _ignoredType; diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index 500d8fcd..e57a704d 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -161,6 +161,7 @@ public: int takesQux(const Qux& qux); Qux returnQux(); void setMethod(ProtectedNestedEnum value); + int type() const override; typedef bool (*FunctionTypedef)(const void *); FunctionTypedef functionTypedef; @@ -537,6 +538,17 @@ class DLL_API IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor : public P { }; +class DLL_API HasOverriddenInManaged +{ +public: + HasOverriddenInManaged(); + ~HasOverriddenInManaged(); + void setOverriddenInManaged(Baz *value); + int callOverriddenInManaged(); +private: + Baz* overriddenInManaged = 0; +}; + class DLL_API PropertyWithIgnoredType { public: