#include "reflection/reflection.h" #include "xcode_gtest_helper.h" using reflection::Object; using reflection::Reflection; using testing::Eq; using testing::NotNull; namespace { struct Example { int a; int b; }; bool _ = Reflection().bind("a", &Example::a).bind("c", &Example::b); } TEST(ReflectionTest, AquiresGetter) { EXPECT_NO_THROW(Reflection::getter("a")); } TEST(ReflectionTest, AquiresAccessor) { EXPECT_NO_THROW(Reflection::accessor("a")); } TEST(ReflectionTest, ThrowsOnFakeGetter) { EXPECT_THROW(Reflection::getter("b"), std::out_of_range); } TEST(ReflectionTest, ThrowsOnFakeAccessor) { EXPECT_THROW(Reflection::accessor("b"), std::out_of_range); } TEST(ReflectionTest, UseOnPrimitiveThrows) { EXPECT_THROW(Reflection::getter("a"), std::logic_error); EXPECT_THROW(Reflection::accessor("a"), std::logic_error); } TEST(ReflectionTest, UseOnStringThrows) { EXPECT_THROW(Reflection::getter("a"), std::logic_error); EXPECT_THROW(Reflection::accessor("a"), std::logic_error); } // 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("")); // }