From 124167de099b05d937233958b7d5268bcc144855 Mon Sep 17 00:00:00 2001 From: Deadlocklogic Date: Sun, 17 Dec 2023 16:40:15 +0200 Subject: [PATCH] TestAST.cs: add TestASTClassTemplatePartialSpecialization --- src/Generator.Tests/AST/TestAST.cs | 22 ++++++++++++++++++++++ tests/dotnet/Native/AST.h | 11 ++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index b04a6f0c..62a0f6d9 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -289,6 +289,28 @@ namespace CppSharp.Generator.Tests.AST Assert.AreSame(classTemplateSpecialization.TemplatedDecl.TemplatedClass, template.TemplatedClass); } + [Test] + public void TestASTClassTemplatePartialSpecialization() + { + var classTemplate = AstContext.TranslationUnits + .SelectMany(u => u.Templates.OfType()) + .FirstOrDefault(t => t.Name == "TestClassTemplatePartialSpecialization"); + + var classTemplatePartialSpecializations = classTemplate.Specializations.Where(specialization => specialization is ClassTemplatePartialSpecialization).Cast(); + Assert.IsTrue(classTemplatePartialSpecializations.Count() == 1); + var classTemplatePartialSpecialization = classTemplatePartialSpecializations.First(); + Assert.AreEqual(TemplateSpecializationKind.ExplicitSpecialization, classTemplatePartialSpecialization.SpecializationKind); + + var classTemplatePartialSpecializationParameters = classTemplatePartialSpecialization.Parameters; + Assert.AreEqual(1, classTemplatePartialSpecializationParameters.Count); + Assert.AreEqual((classTemplatePartialSpecializationParameters[0] as TypeTemplateParameter).Name, "K"); + + var classTemplatePartialSpecializationArguments = classTemplatePartialSpecialization.Arguments; + Assert.AreEqual(2, classTemplatePartialSpecializationArguments.Count); + Assert.AreEqual((classTemplatePartialSpecializationArguments[0].Type.Type as BuiltinType).Type, PrimitiveType.Int); + Assert.AreEqual((classTemplatePartialSpecializationArguments[1].Type.Type as TemplateParameterType).Parameter, classTemplatePartialSpecializationParameters[0]); + } + [Test] public void TestDeprecatedAttrs() { diff --git a/tests/dotnet/Native/AST.h b/tests/dotnet/Native/AST.h index 29ff0762..1ec43910 100644 --- a/tests/dotnet/Native/AST.h +++ b/tests/dotnet/Native/AST.h @@ -190,4 +190,13 @@ class HasMethods { public: void isVolatileMethod() volatile {} -}; \ No newline at end of file +}; + +template +class TestClassTemplatePartialSpecialization +{ +}; +template +class TestClassTemplatePartialSpecialization +{ +};