diff --git a/core/meta/CMakeLists.txt b/core/meta/CMakeLists.txt index 46aaa705f82fae23244863be3d2b658a00c97ab0..df84a83948043738bf30ec220997236847e98580 100644 --- a/core/meta/CMakeLists.txt +++ b/core/meta/CMakeLists.txt @@ -12,3 +12,6 @@ ROOT_OBJECT_LIBRARY(Meta ${sources}) ROOT_INSTALL_HEADERS() +if(testing) + add_subdirectory(test) +endif() diff --git a/core/meta/test/CMakeLists.txt b/core/meta/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..07724e30a4eccafa3fd2e8652b759bd25d8b6969 --- /dev/null +++ b/core/meta/test/CMakeLists.txt @@ -0,0 +1 @@ +ROOT_ADD_GTEST(testStatusBitsChecker testStatusBitsChecker.cxx LIBRARIES Core) diff --git a/core/meta/test/testStatusBitsChecker.cxx b/core/meta/test/testStatusBitsChecker.cxx new file mode 100644 index 0000000000000000000000000000000000000000..49934932b1233be0b243d6ac20e12820d686fd6f --- /dev/null +++ b/core/meta/test/testStatusBitsChecker.cxx @@ -0,0 +1,32 @@ +#include "TStatusBitsChecker.h" + +#include "TClass.h" +#include "TInterpreter.h" + +#include "gtest/gtest.h" + +const char* gCode = R"CODE( + struct ClassWithOverlap : public TObject { + enum EStatusBits { + kOverlappingBit = BIT(13) + }; + }; +)CODE"; + +void MakeClassWithOverlap() { + gInterpreter->Declare(gCode); +} + +TEST(StatusBitsChecker,NoOverlap) +{ + EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TObject")); + EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TNamed")); + EXPECT_TRUE(ROOT::Detail::TStatusBitsChecker::Check("TStreamerElement")); +} + +TEST(StatusBitsChecker,Overlap) +{ + MakeClassWithOverlap(); + EXPECT_NE(nullptr,TClass::GetClass("ClassWithOverlap")); + EXPECT_FALSE(ROOT::Detail::TStatusBitsChecker::Check("ClassWithOverlap")); +}