| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // context_test.cpp
- // reflection-test
- //
- // Created by Sam Jaffe on 8/7/22.
- // Copyright © 2022 Sam Jaffe. All rights reserved.
- //
- #include "reflection/context.h"
- #include "xcode_gtest_helper.h"
- #include "reflection/reflection.h"
- namespace {
- struct Example {
- int a;
- int b;
- };
- }
- namespace reflection {
- INSTANTIATE_REFLECTION(Example);
- }
- REFLECTION(Example)
- .bind("a", &Example::a)
- .bind("b", &Example::b);
- TEST(Context, CanWrap) {
- reflection::Context ctx{{"arg0", Example{.a = 0, .b = 1}}, {"arg1", Example{.a = 1, .b = 0}}};
-
- EXPECT_NO_THROW(ctx.get("arg0"));
- EXPECT_NO_THROW(ctx.get("arg1"));
- EXPECT_THROW(ctx.get("example"), std::out_of_range);
- }
- TEST(Context, CanBuildFromObjects) {
- Example const arg0{.a = 0, .b = 1};
-
- reflection::Context ctx{reflect(arg0)};
- EXPECT_NO_THROW(ctx.get("arg0"));
- }
- TEST(Context, CanAccessChildren) {
- Example const arg0{.a = 0, .b = 1};
-
- reflection::Context ctx{reflect(arg0)};
- reflection::Object b = ctx.get(std::vector{"arg0", "b"});
- EXPECT_THAT(int(b), 1);
- }
- TEST(Context, CanProvideMutableAccess) {
- Example arg0{.a = 0, .b = 1};
-
- reflection::Context ctx{reflect(arg0)};
- reflection::Object b = ctx.get(std::vector{"arg0", "b"});
- EXPECT_NO_THROW(b = 2);
- EXPECT_THAT(arg0.b, 2);
- }
- TEST(Context, CanMutateWithPairCtor) {
- Example arg0{.a = 0, .b = 1};
-
- reflection::Context ctx{{"arg0", arg0}};
- reflection::Object b = ctx.get(std::vector{"arg0", "b"});
- EXPECT_NO_THROW(b = 2);
- EXPECT_THAT(arg0.b, 2);
- }
|