Skip to content

Commit 5e58656

Browse files
committed
[meta] Thoroughly test TClingInfo property
fixes ROOT-6913
1 parent 8420def commit 5e58656

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

core/metacling/test/TClingTests.cxx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,3 +274,62 @@ TEST_F(TClingTests, ROOT10499) {
274274
EXPECT_EQ((void*)&errno, (void*)gInterpreter->Calc("&errno"));
275275
#endif
276276
}
277+
278+
// ROOT-6913
279+
TEST_F(TClingTests, ClassInfoProperty)
280+
{
281+
gInterpreter->Declare(R"cpp(
282+
class ClassHasExplicitCtor{
283+
public:
284+
ClassHasExplicitCtor(){};
285+
};
286+
287+
class ClassHasExplicitDtor{
288+
public:
289+
~ClassHasExplicitDtor(){};
290+
};
291+
292+
class ClassHasImplicitCtor {
293+
ClassHasExplicitCtor c;
294+
};
295+
296+
class ClassHasImplicitDtor{
297+
ClassHasExplicitDtor c;
298+
};
299+
300+
class ClassHasDefaultCtor{
301+
ClassHasDefaultCtor(){};
302+
};
303+
304+
class ClassIsAbstract{
305+
virtual void PureVirtual() = 0;
306+
};
307+
308+
class ClassHasVirtual{
309+
virtual void Virtual() {};
310+
};
311+
312+
class ClassHasAssignOpr{
313+
ClassHasAssignOpr& operator=(const ClassHasAssignOpr&);
314+
};
315+
316+
// according to the C++ standard, being a POD implies being an aggregate
317+
struct ClassIsAggregate {
318+
int x;
319+
double y;
320+
};
321+
)cpp");
322+
323+
const std::vector<std::pair<std::string, Long_t>> classNPPairs{
324+
{"ClassHasImplicitCtor", kClassHasImplicitCtor}, {"ClassHasExplicitCtor", kClassHasExplicitCtor},
325+
{"ClassHasExplicitDtor", kClassHasExplicitDtor}, {"ClassHasImplicitDtor", kClassHasImplicitDtor},
326+
{"ClassHasDefaultCtor", kClassHasDefaultCtor}, {"ClassHasDefaultCtor", kClassIsValid},
327+
{"ClassIsAbstract", kClassIsAbstract}, {"ClassHasVirtual", kClassHasVirtual},
328+
{"ClassHasAssignOpr", kClassHasAssignOpr}, {"ClassIsAggregate", kClassIsAggregate}};
329+
330+
for (auto &[clName, clPropRef] : classNPPairs) {
331+
auto cl = TClass::GetClass(clName.c_str());
332+
const auto prop = gInterpreter->ClassInfo_ClassProperty(cl->GetClassInfo());
333+
EXPECT_TRUE(prop & clPropRef) << "Error checking property for class " << clName;
334+
}
335+
}

0 commit comments

Comments
 (0)