From 08e2322d79ee90c9e3d39631c734b2d62cfa0efd Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Tue, 9 Mar 2021 12:11:25 +0100 Subject: [PATCH] test: meta corner cases and re-registration --- test/entt/meta/meta_data.cpp | 11 ++++++++ test/entt/meta/meta_dtor.cpp | 15 +++++++++-- test/entt/meta/meta_func.cpp | 51 +++++++++++++++++++++++++++--------- test/entt/meta/meta_prop.cpp | 2 +- test/entt/meta/meta_type.cpp | 11 +++++++- 5 files changed, 73 insertions(+), 17 deletions(-) diff --git a/test/entt/meta/meta_data.cpp b/test/entt/meta/meta_data.cpp index 3313423cf..38b3d3781 100644 --- a/test/entt/meta/meta_data.cpp +++ b/test/entt/meta/meta_data.cpp @@ -547,10 +547,21 @@ TEST_F(MetaData, FromBase) { } TEST_F(MetaData, ReRegistration) { + using namespace entt::literals; + MetaData::StaticSetUp(); auto *node = entt::internal::meta_info::resolve(); + auto type = entt::resolve(); ASSERT_NE(node->data, nullptr); ASSERT_EQ(node->data->next, nullptr); + ASSERT_TRUE(type.data("value"_hs)); + + entt::meta().data<&base_t::value>("field"_hs); + + ASSERT_NE(node->data, nullptr); + ASSERT_EQ(node->data->next, nullptr); + ASSERT_FALSE(type.data("value"_hs)); + ASSERT_TRUE(type.data("field"_hs)); } diff --git a/test/entt/meta/meta_dtor.cpp b/test/entt/meta/meta_dtor.cpp index c4a1235cc..26907ac47 100644 --- a/test/entt/meta/meta_dtor.cpp +++ b/test/entt/meta/meta_dtor.cpp @@ -9,10 +9,14 @@ struct clazz_t { ++counter; } - static void destroy(clazz_t &) { + static void destroy_decr(clazz_t &) { --counter; } + static void destroy_incr(clazz_t &) { + ++counter; + } + inline static int counter = 0; }; @@ -22,7 +26,9 @@ struct MetaDtor: ::testing::Test { entt::meta() .type("clazz"_hs) - .dtor<&clazz_t::destroy>(); + .dtor<&clazz_t::destroy_decr>(); + + clazz_t::counter = 0; } void SetUp() override { @@ -54,4 +60,9 @@ TEST_F(MetaDtor, ReRegistration) { auto *node = entt::internal::meta_info::resolve(); ASSERT_NE(node->dtor, nullptr); + + entt::meta().dtor<&clazz_t::destroy_incr>(); + entt::resolve().construct().reset(); + + ASSERT_EQ(clazz_t::counter, 2); } diff --git a/test/entt/meta/meta_func.cpp b/test/entt/meta/meta_func.cpp index 8ad1c5a94..a0c1a651d 100644 --- a/test/entt/meta/meta_func.cpp +++ b/test/entt/meta/meta_func.cpp @@ -60,7 +60,7 @@ struct func_t { }; struct MetaFunc: ::testing::Test { - void StaticSetUp() { + static void StaticSetUp() { using namespace entt::literals; entt::meta() @@ -442,22 +442,47 @@ TEST_F(MetaFunc, ExternalMemberFunction) { } TEST_F(MetaFunc, ReRegistration) { - int count = 0; + using namespace entt::literals; - for([[maybe_unnused]] auto func: entt::resolve().func()) { - ++count; - } + auto reset_and_check = []() { + int count = 0; - MetaFunc::StaticSetUp(); + for([[maybe_unnused]] auto func: entt::resolve().func()) { + ++count; + } - for([[maybe_unnused]] auto func: entt::resolve().func()) { - --count; - } + MetaFunc::StaticSetUp(); - ASSERT_EQ(count, 0); + for([[maybe_unnused]] auto func: entt::resolve().func()) { + --count; + } - auto *node = entt::internal::meta_info::resolve(); + ASSERT_EQ(count, 0); + }; - ASSERT_NE(node->func, nullptr); - ASSERT_EQ(node->func->next, nullptr); + reset_and_check(); + + func_t instance{}; + auto type = entt::resolve(); + + ASSERT_TRUE(type.func("f2"_hs)); + ASSERT_FALSE(type.invoke("f2"_hs, instance, 0)); + ASSERT_TRUE(type.invoke("f2"_hs, instance, 0, 0)); + + ASSERT_TRUE(type.func("f1"_hs)); + ASSERT_TRUE(type.invoke("f1"_hs, instance, 0)); + ASSERT_FALSE(type.invoke("f1"_hs, instance, 0, 0)); + + entt::meta() + .func(&func_t::f)>("f"_hs) + .func(&func_t::f)>("f"_hs); + + ASSERT_FALSE(type.func("f1"_hs)); + ASSERT_FALSE(type.func("f2"_hs)); + ASSERT_TRUE(type.func("f"_hs)); + + ASSERT_TRUE(type.invoke("f"_hs, instance, 0)); + ASSERT_TRUE(type.invoke("f"_hs, instance, 0, 0)); + + reset_and_check(); } diff --git a/test/entt/meta/meta_prop.cpp b/test/entt/meta/meta_prop.cpp index 790c130c0..299728a68 100644 --- a/test/entt/meta/meta_prop.cpp +++ b/test/entt/meta/meta_prop.cpp @@ -9,7 +9,7 @@ struct base_2_t {}; struct derived_t: base_1_t, base_2_t {}; struct MetaProp: ::testing::Test { - void StaticSetUp() { + static void StaticSetUp() { using namespace entt::literals; entt::meta() diff --git a/test/entt/meta/meta_type.cpp b/test/entt/meta/meta_type.cpp index b4d703dc3..1e93403f6 100644 --- a/test/entt/meta/meta_type.cpp +++ b/test/entt/meta/meta_type.cpp @@ -92,7 +92,7 @@ union union_t { }; struct MetaType: ::testing::Test { - void StaticSetUp() { + static void StaticSetUp() { using namespace entt::literals; entt::meta() @@ -672,6 +672,8 @@ TEST_F(MetaType, ClassTemplate) { } TEST_F(MetaType, ReRegistration) { + using namespace entt::literals; + int count = 0; for([[maybe_unnused]] auto type: entt::resolve()) { @@ -685,4 +687,11 @@ TEST_F(MetaType, ReRegistration) { } ASSERT_EQ(count, 0); + ASSERT_TRUE(entt::resolve("double"_hs)); + + entt::meta().type("real"_hs); + + ASSERT_FALSE(entt::resolve("double"_hs)); + ASSERT_TRUE(entt::resolve("real"_hs)); + ASSERT_TRUE(entt::resolve("real"_hs).data("var"_hs)); }