#include "reflect/reflect.hpp" #include struct example { int a; int b; }; CREATE_REFLECTION(example, (a), (b, "c")); using testing::Eq; using testing::NotNull; TEST(ReflectionTest, BindsParameterByName) { EXPECT_TRUE(reflection::exists("a")); } TEST(ReflectionTest, CanRenameParameter) { EXPECT_FALSE(reflection::exists("b")); EXPECT_TRUE(reflection::exists("c")); } TEST(ReflectionTest, CanAccessMember) { auto p = reflection::get_pointer("a"); EXPECT_THAT(p, NotNull()); EXPECT_THAT(p, Eq(&example::a)); example ex = { 5, 6 }; EXPECT_THAT(&(ex.*p), Eq(&ex.a)); EXPECT_THAT(ex.*p, Eq(5)); } TEST(ReflectionTest, CanGetNameFromMemPtr) { EXPECT_THAT(reflection::name(&example::a), Eq("a")); EXPECT_THAT(reflection::name(&example::b), Eq("c")); } TEST(ReflectionTest, CanGetNameFromThis) { example ex = { 5, 6 }; EXPECT_THAT(reflection::name(ex, ex.a), Eq("a")); EXPECT_THAT(reflection::name(ex, ex.b), Eq("c")); } TEST(ReflectionTest, NameForMissingIsEmpty) { example ex = { 5, 6 }; EXPECT_THAT(reflection::name(ex, 5), Eq("")); }