From 6acaf248f71e4bb1fe861932ab77bfdac01085ef Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Tue, 24 Nov 2020 23:24:32 +0200 Subject: [PATCH] Test using a specialization from a dependent module Signed-off-by: Dimitar Dobrev --- tests/NamespacesBase/NamespacesBase.h | 19 +++++++++++++++++++ .../NamespacesDerived.Tests.cs | 6 ++++++ tests/NamespacesDerived/NamespacesDerived.cpp | 13 +++++++++++++ tests/NamespacesDerived/NamespacesDerived.h | 5 ++++- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/tests/NamespacesBase/NamespacesBase.h b/tests/NamespacesBase/NamespacesBase.h index c83df7a7..d6e0544b 100644 --- a/tests/NamespacesBase/NamespacesBase.h +++ b/tests/NamespacesBase/NamespacesBase.h @@ -51,6 +51,10 @@ public: template class TemplateClass { +public: + T getField() const; + void setField(const T& value); +private: union { int i; @@ -59,6 +63,18 @@ class TemplateClass T t; }; +template +T TemplateClass::getField() const +{ + return t; +} + +template +void TemplateClass::setField(const T& value) +{ + t = value; +} + template class DLL_API TemplateWithIndependentFields { @@ -84,3 +100,6 @@ public: ~SecondaryBase(); void function(); }; + +// force the symbols for the template instantiations because we do not have the auto-compilation for the generated C++ source +template class DLL_API TemplateClass; diff --git a/tests/NamespacesDerived/NamespacesDerived.Tests.cs b/tests/NamespacesDerived/NamespacesDerived.Tests.cs index 0b2e147a..06511576 100644 --- a/tests/NamespacesDerived/NamespacesDerived.Tests.cs +++ b/tests/NamespacesDerived/NamespacesDerived.Tests.cs @@ -18,6 +18,12 @@ public class NamespaceDerivedTests var parent = derived.Parent; derived.parent(0); } + using (var derived2 = new Derived2()) + { + var template = derived2.Template; + template.Field = 5; + Assert.That(template.Field, Is.EqualTo(5)); + } } [Test] diff --git a/tests/NamespacesDerived/NamespacesDerived.cpp b/tests/NamespacesDerived/NamespacesDerived.cpp index 51740df9..e463a7c3 100644 --- a/tests/NamespacesDerived/NamespacesDerived.cpp +++ b/tests/NamespacesDerived/NamespacesDerived.cpp @@ -33,6 +33,14 @@ void Derived::setNestedNSComponent(OverlappingNamespace::InBaseLib c) nestedNSComponent = c; } +Derived2::Derived2() +{ +} + +Derived2::~Derived2() +{ +} + Base3 Derived2::getBase() { return baseComponent; @@ -57,6 +65,11 @@ void Derived2::defaultEnumValueFromDependency(OverlappingNamespace::ColorsEnum c { } +TemplateClass Derived2::getTemplate() +{ + return t; +} + Abstract* Derived2::getAbstract() { return 0; diff --git a/tests/NamespacesDerived/NamespacesDerived.h b/tests/NamespacesDerived/NamespacesDerived.h index a5a66d43..6183053c 100644 --- a/tests/NamespacesDerived/NamespacesDerived.h +++ b/tests/NamespacesDerived/NamespacesDerived.h @@ -44,9 +44,11 @@ class Base3 template class TemplateClass; -class Derived2 : public Base3 +class DLL_API Derived2 : public Base3 { public: + Derived2(); + ~Derived2(); Base3 baseComponent; Base3 getBase(); void setBase(Base3); @@ -56,6 +58,7 @@ public: void setNestedNSComponent(OverlappingNamespace::InDerivedLib); void defaultEnumValueFromDependency(OverlappingNamespace::ColorsEnum c = OverlappingNamespace::ColorsEnum::black); + TemplateClass getTemplate(); Abstract* getAbstract(); private: TemplateClass t;