Browse Source

TestAST.cs: add TestASTClassTemplatePartialSpecialization

pull/1809/head
Deadlocklogic 2 years ago
parent
commit
124167de09
  1. 22
      src/Generator.Tests/AST/TestAST.cs
  2. 11
      tests/dotnet/Native/AST.h

22
src/Generator.Tests/AST/TestAST.cs

@ -289,6 +289,28 @@ namespace CppSharp.Generator.Tests.AST @@ -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<ClassTemplate>())
.FirstOrDefault(t => t.Name == "TestClassTemplatePartialSpecialization");
var classTemplatePartialSpecializations = classTemplate.Specializations.Where(specialization => specialization is ClassTemplatePartialSpecialization).Cast<ClassTemplatePartialSpecialization>();
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()
{

11
tests/dotnet/Native/AST.h

@ -190,4 +190,13 @@ class HasMethods @@ -190,4 +190,13 @@ class HasMethods
{
public:
void isVolatileMethod() volatile {}
};
};
template <typename K, typename V>
class TestClassTemplatePartialSpecialization
{
};
template <typename K>
class TestClassTemplatePartialSpecialization<int, K>
{
};

Loading…
Cancel
Save