Skip to content

Commit 68b883c

Browse files
aaronj0vgvassilev
authored andcommitted
Add tests for LookupConstructor and new codepaths in IsConstructor
1 parent 0c94a9c commit 68b883c

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

unittests/CppInterOp/FunctionReflectionTest.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,45 @@ TEST(FunctionReflectionTest, InstantiateTemplateMethod) {
662662
EXPECT_TRUE(TA1.getAsType()->isIntegerType());
663663
}
664664

665+
TEST(FunctionReflectionTest, LookupConstructors) {
666+
std::vector<Decl*> Decls;
667+
std::string code = R"(
668+
class MyClass {
669+
public:
670+
MyClass();
671+
void helperMethod();
672+
MyClass(const MyClass&);
673+
static void staticFunc();
674+
MyClass(MyClass&&);
675+
template<typename T>
676+
MyClass(T);
677+
~MyClass();
678+
};
679+
680+
MyClass::MyClass() {}
681+
void MyClass::helperMethod() {}
682+
MyClass::MyClass(const MyClass&) {}
683+
void MyClass::staticFunc() {}
684+
MyClass::MyClass(MyClass&&) {}
685+
template<typename T>
686+
MyClass::MyClass(T t) {}
687+
MyClass::~MyClass() {}
688+
)";
689+
690+
GetAllTopLevelDecls(code, Decls);
691+
std::vector<Cpp::TCppFunction_t> ctors;
692+
Cpp::LookupConstructors("MyClass", Decls[0], ctors);
693+
694+
EXPECT_EQ(ctors.size(), 4)
695+
<< "Constructor lookup did not retrieve the expected set";
696+
EXPECT_EQ(Cpp::GetFunctionSignature(ctors[0]), "MyClass::MyClass()");
697+
EXPECT_EQ(Cpp::GetFunctionSignature(ctors[1]),
698+
"MyClass::MyClass(const MyClass &)");
699+
EXPECT_EQ(Cpp::GetFunctionSignature(ctors[2]),
700+
"MyClass::MyClass(MyClass &&)");
701+
EXPECT_EQ(Cpp::GetFunctionSignature(ctors[3]), "MyClass::MyClass(T t)");
702+
}
703+
665704
TEST(FunctionReflectionTest, BestOverloadFunctionMatch1) {
666705
std::vector<Decl*> Decls;
667706
std::string code = R"(
@@ -1061,6 +1100,28 @@ TEST(FunctionReflectionTest, IsConstructor) {
10611100
EXPECT_FALSE(Cpp::IsConstructor(SubDecls[4]));
10621101
EXPECT_FALSE(Cpp::IsConstructor(SubDecls[6]));
10631102
EXPECT_FALSE(Cpp::IsConstructor(SubDecls[8]));
1103+
1104+
// Test for templated constructor
1105+
std::vector<Decl*> templDecls, templSubDecls;
1106+
std::string templCode = R"(
1107+
class T {
1108+
public:
1109+
template<typename U>
1110+
T(U) {}
1111+
void func() {}
1112+
~T() {}
1113+
};
1114+
)";
1115+
1116+
GetAllTopLevelDecls(templCode, templDecls);
1117+
GetAllSubDecls(templDecls[0], templSubDecls);
1118+
1119+
int templCtorCount = 0;
1120+
for (auto* decl : templSubDecls) {
1121+
if (Cpp::IsConstructor(decl))
1122+
templCtorCount++;
1123+
}
1124+
EXPECT_EQ(templCtorCount, 1);
10641125
}
10651126

10661127
TEST(FunctionReflectionTest, IsDestructor) {

0 commit comments

Comments
 (0)