From 4bdda6c0cfe482fc0f2b7f63cba587aea151ed29 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 27 Nov 2024 17:01:03 +0100 Subject: [PATCH] test: meta_factory::traits --- TODO | 2 +- test/entt/meta/meta_factory.cpp | 31 ++++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index a88cdc02c..68faf8fa9 100644 --- a/TODO +++ b/TODO @@ -39,7 +39,7 @@ TODO: * refine the storage fallback mechanism for views (ie alloc?) * don't pass reactive storage by default to callback * runtime types support for meta for types that aren't backed by C++ types -* dtor, traits and custom should be part of meta descriptor maybe (?) +* dtor, traits and custom should be part of meta descriptor (update meta_factory tests then) * allow attaching const values of non-Type type to meta types * built-in no-pagination storage - no_pagination page size as limits::max * meta_any ownership construction and from_void diff --git a/test/entt/meta/meta_factory.cpp b/test/entt/meta/meta_factory.cpp index b85e192f5..244ff1751 100644 --- a/test/entt/meta/meta_factory.cpp +++ b/test/entt/meta/meta_factory.cpp @@ -374,7 +374,36 @@ TEST_F(MetaFactory, FuncOverload) { } TEST_F(MetaFactory, Traits) { - // TODO + using namespace entt::literals; + + entt::meta() + .data<&base::member>("member"_hs) + .func<&clazz::set_int>("func"_hs) + .func<&clazz::set_boxed_int>("func"_hs); + + entt::meta_type type = entt::resolve(); + + ASSERT_EQ(type.traits(), test::meta_traits::none); + ASSERT_EQ(type.data("member"_hs).traits(), test::meta_traits::none); + ASSERT_EQ(type.func("func"_hs).traits(), test::meta_traits::none); + ASSERT_EQ(type.func("func"_hs).next().traits(), test::meta_traits::none); + + entt::meta() + .traits(test::meta_traits::one | test::meta_traits::three) + .data<&base::member>("member"_hs) + .traits(test::meta_traits::one) + .func<&clazz::set_int>("func"_hs) + .traits(test::meta_traits::two) + .func<&clazz::set_boxed_int>("func"_hs) + .traits(test::meta_traits::three); + + // traits are copied and never refreshed (yet) + type = entt::resolve(); + + ASSERT_EQ(type.traits(), test::meta_traits::one | test::meta_traits::three); + ASSERT_EQ(type.data("member"_hs).traits(), test::meta_traits::one); + ASSERT_EQ(type.func("func"_hs).traits(), test::meta_traits::two); + ASSERT_EQ(type.func("func"_hs).next().traits(), test::meta_traits::three); } TEST_F(MetaFactory, Custom) {