Skip to content

Commit 5a2c092

Browse files
committed
test: user defined meta traits
1 parent 56ef214 commit 5a2c092

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

test/common/meta_traits.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef ENTT_COMMON_META_TRAITS_H
2+
#define ENTT_COMMON_META_TRAITS_H
3+
4+
#include <entt/core/enum.hpp>
5+
6+
namespace test {
7+
8+
enum class meta_traits {
9+
none = 0x0000,
10+
one = 0x0001,
11+
two = 0x0002,
12+
three = 0x0100,
13+
_entt_enum_as_bitmask
14+
};
15+
16+
} // namespace test
17+
18+
#endif

test/entt/meta/meta_data.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <entt/meta/range.hpp>
1414
#include <entt/meta/resolve.hpp>
1515
#include "../../common/config.h"
16+
#include "../../common/meta_traits.h"
1617

1718
struct base {
1819
virtual ~base() noexcept = default;
@@ -109,13 +110,17 @@ struct MetaData: ::testing::Test {
109110
entt::meta<clazz>()
110111
.type("clazz"_hs)
111112
.data<&clazz::i, entt::as_ref_t>("i"_hs)
113+
.traits(test::meta_traits::one | test::meta_traits::two | test::meta_traits::three)
112114
.prop(3u, 0)
113115
.data<&clazz::i, entt::as_cref_t>("ci"_hs)
114116
.data<&clazz::j>("j"_hs)
117+
.traits(test::meta_traits::one)
115118
.prop("true"_hs, 1)
116119
.data<&clazz::h>("h"_hs)
120+
.traits(test::meta_traits::two)
117121
.prop(static_cast<entt::id_type>(property_type::random), 2)
118122
.data<&clazz::k>("k"_hs)
123+
.traits(test::meta_traits::three)
119124
.prop(static_cast<entt::id_type>(property_type::value), 3)
120125
.data<&clazz::instance>("base"_hs)
121126
.data<&clazz::i, entt::as_void_t>("void"_hs)
@@ -185,6 +190,18 @@ TEST_F(MetaData, Functionalities) {
185190
ASSERT_EQ(prop.value(), 0);
186191
}
187192

193+
TEST_F(MetaData, UserTraits) {
194+
using namespace entt::literals;
195+
196+
ASSERT_EQ(entt::resolve<clazz>().data("ci"_hs).traits<test::meta_traits>(), test::meta_traits::none);
197+
ASSERT_EQ(entt::resolve<clazz>().data("base"_hs).traits<test::meta_traits>(), test::meta_traits::none);
198+
199+
ASSERT_EQ(entt::resolve<clazz>().data("i"_hs).traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::two | test::meta_traits::three);
200+
ASSERT_EQ(entt::resolve<clazz>().data("j"_hs).traits<test::meta_traits>(), test::meta_traits::one);
201+
ASSERT_EQ(entt::resolve<clazz>().data("h"_hs).traits<test::meta_traits>(), test::meta_traits::two);
202+
ASSERT_EQ(entt::resolve<clazz>().data("k"_hs).traits<test::meta_traits>(), test::meta_traits::three);
203+
}
204+
188205
TEST_F(MetaData, Const) {
189206
using namespace entt::literals;
190207

test/entt/meta/meta_func.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <entt/meta/range.hpp>
1111
#include <entt/meta/resolve.hpp>
1212
#include "../../common/config.h"
13+
#include "../../common/meta_traits.h"
1314

1415
struct base {
1516
base() = default;
@@ -112,10 +113,14 @@ struct MetaFunc: ::testing::Test {
112113
entt::meta<function>()
113114
.type("func"_hs)
114115
.func<&entt::registry::emplace_or_replace<function>>("emplace"_hs)
116+
.traits(test::meta_traits::one | test::meta_traits::two | test::meta_traits::three)
115117
.func<entt::overload<int(const base &, int, int)>(&function::f)>("f3"_hs)
118+
.traits(test::meta_traits::three)
116119
.func<entt::overload<int(int, int)>(&function::f)>("f2"_hs)
120+
.traits(test::meta_traits::two)
117121
.prop("true"_hs, false)
118122
.func<entt::overload<int(int) const>(&function::f)>("f1"_hs)
123+
.traits(test::meta_traits::one)
119124
.prop("true"_hs, false)
120125
.func<&function::g>("g"_hs)
121126
.prop("true"_hs, false)
@@ -200,6 +205,18 @@ TEST_F(MetaFunc, Functionalities) {
200205
ASSERT_FALSE(prop.value().cast<bool>());
201206
}
202207

208+
TEST_F(MetaFunc, UserTraits) {
209+
using namespace entt::literals;
210+
211+
ASSERT_EQ(entt::resolve<function>().func("h"_hs).traits<test::meta_traits>(), test::meta_traits::none);
212+
ASSERT_EQ(entt::resolve<function>().func("k"_hs).traits<test::meta_traits>(), test::meta_traits::none);
213+
214+
ASSERT_EQ(entt::resolve<function>().func("emplace"_hs).traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::two | test::meta_traits::three);
215+
ASSERT_EQ(entt::resolve<function>().func("f1"_hs).traits<test::meta_traits>(), test::meta_traits::one);
216+
ASSERT_EQ(entt::resolve<function>().func("f2"_hs).traits<test::meta_traits>(), test::meta_traits::two);
217+
ASSERT_EQ(entt::resolve<function>().func("f3"_hs).traits<test::meta_traits>(), test::meta_traits::three);
218+
}
219+
203220
TEST_F(MetaFunc, Const) {
204221
using namespace entt::literals;
205222

test/entt/meta/meta_type.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <entt/meta/resolve.hpp>
1818
#include <entt/meta/template.hpp>
1919
#include "../../common/config.h"
20+
#include "../../common/meta_traits.h"
2021

2122
template<typename Type>
2223
void set(Type &prop, Type value) {
@@ -116,10 +117,12 @@ struct MetaType: ::testing::Test {
116117

117118
entt::meta<double>()
118119
.type("double"_hs)
120+
.traits(test::meta_traits::one)
119121
.data<set<double>, get<double>>("var"_hs);
120122

121123
entt::meta<unsigned int>()
122124
.type("unsigned int"_hs)
125+
.traits(test::meta_traits::two)
123126
.data<0u>("min"_hs)
124127
.data<128u>("max"_hs);
125128

@@ -129,6 +132,7 @@ struct MetaType: ::testing::Test {
129132

130133
entt::meta<derived>()
131134
.type("derived"_hs)
135+
.traits(test::meta_traits::one | test::meta_traits::three)
132136
.base<base>();
133137

134138
entt::meta<abstract>()
@@ -153,6 +157,7 @@ struct MetaType: ::testing::Test {
153157

154158
entt::meta<property_type>()
155159
.type("property"_hs)
160+
.traits(test::meta_traits::two | test::meta_traits::three)
156161
.data<property_type::random>("random"_hs)
157162
.prop(static_cast<entt::id_type>(property_type::random), 0)
158163
.prop(static_cast<entt::id_type>(property_type::value), 3)
@@ -283,6 +288,16 @@ TEST_F(MetaType, Traits) {
283288
ASSERT_FALSE(entt::resolve<std::vector<int>>().is_associative_container());
284289
}
285290

291+
TEST_F(MetaType, UserTraits) {
292+
ASSERT_EQ(entt::resolve<bool>().traits<test::meta_traits>(), test::meta_traits::none);
293+
ASSERT_EQ(entt::resolve<clazz>().traits<test::meta_traits>(), test::meta_traits::none);
294+
295+
ASSERT_EQ(entt::resolve<double>().traits<test::meta_traits>(), test::meta_traits::one);
296+
ASSERT_EQ(entt::resolve<unsigned int>().traits<test::meta_traits>(), test::meta_traits::two);
297+
ASSERT_EQ(entt::resolve<derived>().traits<test::meta_traits>(), test::meta_traits::one | test::meta_traits::three);
298+
ASSERT_EQ(entt::resolve<property_type>().traits<test::meta_traits>(), test::meta_traits::two | test::meta_traits::three);
299+
}
300+
286301
TEST_F(MetaType, RemovePointer) {
287302
ASSERT_EQ(entt::resolve<void *>().remove_pointer(), entt::resolve<void>());
288303
ASSERT_EQ(entt::resolve<char **>().remove_pointer(), entt::resolve<char *>());

0 commit comments

Comments
 (0)