Browse Source

test: user defined meta traits

skypjack 1 year ago
parent
commit
5a2c092cde

+ 18 - 0
test/common/meta_traits.h

@@ -0,0 +1,18 @@
+#ifndef ENTT_COMMON_META_TRAITS_H
+#define ENTT_COMMON_META_TRAITS_H
+
+#include <entt/core/enum.hpp>
+
+namespace test {
+
+enum class meta_traits {
+    none = 0x0000,
+    one = 0x0001,
+    two = 0x0002,
+    three = 0x0100,
+    _entt_enum_as_bitmask
+};
+
+} // namespace test
+
+#endif

+ 17 - 0
test/entt/meta/meta_data.cpp

@@ -13,6 +13,7 @@
 #include <entt/meta/range.hpp>
 #include <entt/meta/resolve.hpp>
 #include "../../common/config.h"
+#include "../../common/meta_traits.h"
 
 struct base {
     virtual ~base() noexcept = default;
@@ -109,13 +110,17 @@ struct MetaData: ::testing::Test {
         entt::meta<clazz>()
             .type("clazz"_hs)
             .data<&clazz::i, entt::as_ref_t>("i"_hs)
+            .traits(test::meta_traits::one | test::meta_traits::two | test::meta_traits::three)
             .prop(3u, 0)
             .data<&clazz::i, entt::as_cref_t>("ci"_hs)
             .data<&clazz::j>("j"_hs)
+            .traits(test::meta_traits::one)
             .prop("true"_hs, 1)
             .data<&clazz::h>("h"_hs)
+            .traits(test::meta_traits::two)
             .prop(static_cast<entt::id_type>(property_type::random), 2)
             .data<&clazz::k>("k"_hs)
+            .traits(test::meta_traits::three)
             .prop(static_cast<entt::id_type>(property_type::value), 3)
             .data<&clazz::instance>("base"_hs)
             .data<&clazz::i, entt::as_void_t>("void"_hs)
@@ -185,6 +190,18 @@ TEST_F(MetaData, Functionalities) {
     ASSERT_EQ(prop.value(), 0);
 }
 
+TEST_F(MetaData, UserTraits) {
+    using namespace entt::literals;
+
+    ASSERT_EQ(entt::resolve<clazz>().data("ci"_hs).traits<test::meta_traits>(), test::meta_traits::none);
+    ASSERT_EQ(entt::resolve<clazz>().data("base"_hs).traits<test::meta_traits>(), test::meta_traits::none);
+
+    ASSERT_EQ(entt::resolve<clazz>().data("i"_hs).traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::two | test::meta_traits::three);
+    ASSERT_EQ(entt::resolve<clazz>().data("j"_hs).traits<test::meta_traits>(), test::meta_traits::one);
+    ASSERT_EQ(entt::resolve<clazz>().data("h"_hs).traits<test::meta_traits>(), test::meta_traits::two);
+    ASSERT_EQ(entt::resolve<clazz>().data("k"_hs).traits<test::meta_traits>(), test::meta_traits::three);
+}
+
 TEST_F(MetaData, Const) {
     using namespace entt::literals;
 

+ 17 - 0
test/entt/meta/meta_func.cpp

@@ -10,6 +10,7 @@
 #include <entt/meta/range.hpp>
 #include <entt/meta/resolve.hpp>
 #include "../../common/config.h"
+#include "../../common/meta_traits.h"
 
 struct base {
     base() = default;
@@ -112,10 +113,14 @@ struct MetaFunc: ::testing::Test {
         entt::meta<function>()
             .type("func"_hs)
             .func<&entt::registry::emplace_or_replace<function>>("emplace"_hs)
+            .traits(test::meta_traits::one | test::meta_traits::two | test::meta_traits::three)
             .func<entt::overload<int(const base &, int, int)>(&function::f)>("f3"_hs)
+            .traits(test::meta_traits::three)
             .func<entt::overload<int(int, int)>(&function::f)>("f2"_hs)
+            .traits(test::meta_traits::two)
             .prop("true"_hs, false)
             .func<entt::overload<int(int) const>(&function::f)>("f1"_hs)
+            .traits(test::meta_traits::one)
             .prop("true"_hs, false)
             .func<&function::g>("g"_hs)
             .prop("true"_hs, false)
@@ -200,6 +205,18 @@ TEST_F(MetaFunc, Functionalities) {
     ASSERT_FALSE(prop.value().cast<bool>());
 }
 
+TEST_F(MetaFunc, UserTraits) {
+    using namespace entt::literals;
+
+    ASSERT_EQ(entt::resolve<function>().func("h"_hs).traits<test::meta_traits>(), test::meta_traits::none);
+    ASSERT_EQ(entt::resolve<function>().func("k"_hs).traits<test::meta_traits>(), test::meta_traits::none);
+
+    ASSERT_EQ(entt::resolve<function>().func("emplace"_hs).traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::two | test::meta_traits::three);
+    ASSERT_EQ(entt::resolve<function>().func("f1"_hs).traits<test::meta_traits>(), test::meta_traits::one);
+    ASSERT_EQ(entt::resolve<function>().func("f2"_hs).traits<test::meta_traits>(), test::meta_traits::two);
+    ASSERT_EQ(entt::resolve<function>().func("f3"_hs).traits<test::meta_traits>(), test::meta_traits::three);
+}
+
 TEST_F(MetaFunc, Const) {
     using namespace entt::literals;
 

+ 15 - 0
test/entt/meta/meta_type.cpp

@@ -17,6 +17,7 @@
 #include <entt/meta/resolve.hpp>
 #include <entt/meta/template.hpp>
 #include "../../common/config.h"
+#include "../../common/meta_traits.h"
 
 template<typename Type>
 void set(Type &prop, Type value) {
@@ -116,10 +117,12 @@ struct MetaType: ::testing::Test {
 
         entt::meta<double>()
             .type("double"_hs)
+            .traits(test::meta_traits::one)
             .data<set<double>, get<double>>("var"_hs);
 
         entt::meta<unsigned int>()
             .type("unsigned int"_hs)
+            .traits(test::meta_traits::two)
             .data<0u>("min"_hs)
             .data<128u>("max"_hs);
 
@@ -129,6 +132,7 @@ struct MetaType: ::testing::Test {
 
         entt::meta<derived>()
             .type("derived"_hs)
+            .traits(test::meta_traits::one | test::meta_traits::three)
             .base<base>();
 
         entt::meta<abstract>()
@@ -153,6 +157,7 @@ struct MetaType: ::testing::Test {
 
         entt::meta<property_type>()
             .type("property"_hs)
+            .traits(test::meta_traits::two | test::meta_traits::three)
             .data<property_type::random>("random"_hs)
             .prop(static_cast<entt::id_type>(property_type::random), 0)
             .prop(static_cast<entt::id_type>(property_type::value), 3)
@@ -283,6 +288,16 @@ TEST_F(MetaType, Traits) {
     ASSERT_FALSE(entt::resolve<std::vector<int>>().is_associative_container());
 }
 
+TEST_F(MetaType, UserTraits) {
+    ASSERT_EQ(entt::resolve<bool>().traits<test::meta_traits>(), test::meta_traits::none);
+    ASSERT_EQ(entt::resolve<clazz>().traits<test::meta_traits>(), test::meta_traits::none);
+
+    ASSERT_EQ(entt::resolve<double>().traits<test::meta_traits>(), test::meta_traits::one);
+    ASSERT_EQ(entt::resolve<unsigned int>().traits<test::meta_traits>(), test::meta_traits::two);
+    ASSERT_EQ(entt::resolve<derived>().traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::three);
+    ASSERT_EQ(entt::resolve<property_type>().traits<test::meta_traits>(), test::meta_traits::two | test::meta_traits::three);
+}
+
 TEST_F(MetaType, RemovePointer) {
     ASSERT_EQ(entt::resolve<void *>().remove_pointer(), entt::resolve<void>());
     ASSERT_EQ(entt::resolve<char **>().remove_pointer(), entt::resolve<char *>());