#define CR_HOST #include #include #include #include #include #include #include #include "types.h" TEST(Lib, Meta) { using namespace entt::literals; ASSERT_FALSE(entt::resolve("position"_hs)); userdata ud{}; ud.ctx = entt::locator::handle(); cr_plugin ctx; ctx.userdata = &ud; cr_plugin_load(ctx, PLUGIN); cr_plugin_update(ctx); entt::meta().conv(); ASSERT_TRUE(entt::resolve("position"_hs)); ASSERT_TRUE(entt::resolve("velocity"_hs)); auto pos = entt::resolve("position"_hs).construct(42., 3.); auto vel = entt::resolve("velocity"_hs).construct(); ASSERT_TRUE(pos && vel); ASSERT_EQ(pos.type().data("x"_hs).type(), entt::resolve()); ASSERT_NE(pos.type().data("y"_hs).get(pos).try_cast(), nullptr); ASSERT_EQ(pos.type().data("x"_hs).get(pos).cast(), 42); ASSERT_EQ(pos.type().data("y"_hs).get(pos).cast(), 3); ASSERT_EQ(vel.type().data("dx"_hs).type(), entt::resolve()); ASSERT_TRUE(vel.type().data("dy"_hs).get(vel).allow_cast()); ASSERT_EQ(vel.type().data("dx"_hs).get(vel).cast(), 0.); ASSERT_EQ(vel.type().data("dy"_hs).get(vel).cast(), 0.); ASSERT_EQ(ud.any.type(), entt::resolve()); ASSERT_EQ(ud.any.cast(), 42); // these objects have been initialized from a different context pos.emplace(); vel.emplace(); ud.any.emplace(); cr_plugin_close(ctx); ASSERT_FALSE(entt::resolve("position"_hs)); ASSERT_FALSE(entt::resolve("velocity"_hs)); }