From 36411faf43b28e42fced6974e478b3f89eb9fa1b Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 12 Oct 2022 14:56:27 +0200 Subject: [PATCH] test: context aware meta dtor --- test/entt/meta/meta_context.cpp | 39 ++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/test/entt/meta/meta_context.cpp b/test/entt/meta/meta_context.cpp index 04cf3cc0f..fee840bde 100644 --- a/test/entt/meta/meta_context.cpp +++ b/test/entt/meta/meta_context.cpp @@ -22,7 +22,12 @@ struct clazz: base { return v; } + static void move_to_bucket(const clazz &instance) { + bucket = instance.value; + } + int value{}; + static inline int bucket{}; }; struct local_only {}; @@ -43,12 +48,10 @@ private: int value{}; }; -struct MetaContext: ::testing::Test { - void SetUp() override { +class MetaContext: public ::testing::Test { + void init_global_context() { using namespace entt::literals; - // global context - entt::meta() .data<1>("marker"_hs); @@ -61,8 +64,10 @@ struct MetaContext: ::testing::Test { .data<&clazz::value>("value"_hs) .data<&clazz::value>("rw"_hs) .func<&clazz::func>("func"_hs); + } - // local context + void init_local_context() { + using namespace entt::literals; entt::meta(context) .data<42>("marker"_hs); @@ -77,16 +82,27 @@ struct MetaContext: ::testing::Test { .type("bar"_hs) .base() .ctor() + .dtor<&clazz::move_to_bucket>() .data("value"_hs) .data<&clazz::value>("rw"_hs) .func<&clazz::cfunc>("func"_hs); } +public: + void SetUp() override { + init_global_context(); + init_local_context(); + + clazz::bucket = bucket_value; + } + void TearDown() override { entt::meta_reset(context); entt::meta_reset(); } +protected: + static constexpr int bucket_value = 42; entt::meta_ctx context{}; }; @@ -248,7 +264,18 @@ TEST_F(MetaContext, MetaConv) { TEST_F(MetaContext, MetaDtor) { using namespace entt::literals; - // TODO + auto global = entt::resolve().construct(); + auto local = entt::resolve(context).construct(); + + ASSERT_EQ(clazz::bucket, bucket_value); + + global.reset(); + + ASSERT_EQ(clazz::bucket, bucket_value); + + local.reset(); + + ASSERT_NE(clazz::bucket, bucket_value); } TEST_F(MetaContext, MetaProp) {