|
|
@@ -56,8 +56,8 @@ struct MetaCtor: ::testing::Test {
|
|
|
.type("clazz"_hs)
|
|
|
.ctor<&entt::registry::emplace_or_replace<clazz_t, const int &, const char &>, entt::as_ref_t>()
|
|
|
.ctor<const base_t &, int>()
|
|
|
- .ctor<const int &, char>().prop(3, false)
|
|
|
- .ctor<entt::overload<clazz_t(int)>(clazz_t::factory)>().prop('c', 42)
|
|
|
+ .ctor<const int &, char>()
|
|
|
+ .ctor<entt::overload<clazz_t(int)>(clazz_t::factory)>()
|
|
|
.ctor<entt::overload<clazz_t(base_t, int, int)>(clazz_t::factory)>()
|
|
|
.conv<int>();
|
|
|
}
|
|
|
@@ -68,74 +68,23 @@ struct MetaCtor: ::testing::Test {
|
|
|
};
|
|
|
|
|
|
TEST_F(MetaCtor, Functionalities) {
|
|
|
- using namespace entt::literals;
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(42, 'c');
|
|
|
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<const int &, char>();
|
|
|
-
|
|
|
- ASSERT_TRUE(ctor);
|
|
|
- ASSERT_EQ(ctor.arity(), 2u);
|
|
|
- ASSERT_EQ(ctor.arg(0u), entt::resolve<int>());
|
|
|
- ASSERT_EQ(ctor.arg(1u), entt::resolve<char>());
|
|
|
- ASSERT_FALSE(ctor.arg(2u));
|
|
|
-
|
|
|
- auto any = ctor.invoke(42, 'c');
|
|
|
- auto empty = ctor.invoke();
|
|
|
-
|
|
|
- ASSERT_FALSE(empty);
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().c, 'c');
|
|
|
-
|
|
|
- for(auto curr: ctor.prop()) {
|
|
|
- ASSERT_EQ(curr.key(), 3);
|
|
|
- ASSERT_FALSE(curr.value().template cast<bool>());
|
|
|
- }
|
|
|
-
|
|
|
- ASSERT_FALSE(ctor.prop(2));
|
|
|
- ASSERT_FALSE(ctor.prop('c'));
|
|
|
-
|
|
|
- auto prop = ctor.prop(3);
|
|
|
-
|
|
|
- ASSERT_TRUE(prop);
|
|
|
- ASSERT_EQ(prop.key(), 3);
|
|
|
- ASSERT_FALSE(prop.value().template cast<bool>());
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, Func) {
|
|
|
- using namespace entt::literals;
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(42);
|
|
|
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<int>();
|
|
|
-
|
|
|
- ASSERT_TRUE(ctor);
|
|
|
- ASSERT_EQ(ctor.arity(), 1u);
|
|
|
- ASSERT_EQ(ctor.arg(0u), entt::resolve<int>());
|
|
|
- ASSERT_FALSE(ctor.arg(1u));
|
|
|
-
|
|
|
- auto any = ctor.invoke(42);
|
|
|
- auto empty = ctor.invoke(3, 'c');
|
|
|
-
|
|
|
- ASSERT_FALSE(empty);
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().c, 'c');
|
|
|
-
|
|
|
- for(auto curr: ctor.prop()) {
|
|
|
- ASSERT_EQ(curr.key(), 'c');
|
|
|
- ASSERT_EQ(curr.value(), 42);
|
|
|
- }
|
|
|
-
|
|
|
- ASSERT_FALSE(ctor.prop('d'));
|
|
|
- ASSERT_FALSE(ctor.prop(3));
|
|
|
-
|
|
|
- auto prop = ctor.prop('c');
|
|
|
-
|
|
|
- ASSERT_TRUE(prop);
|
|
|
- ASSERT_EQ(prop.key(), 'c');
|
|
|
- ASSERT_EQ(prop.value(), 42);
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, MetaAnyArgs) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<int, char>().invoke(entt::meta_any{42}, entt::meta_any{'c'});
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(entt::meta_any{42}, entt::meta_any{'c'});
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
@@ -143,12 +92,11 @@ TEST_F(MetaCtor, MetaAnyArgs) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, InvalidArgs) {
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<int, char>();
|
|
|
- ASSERT_FALSE(ctor.invoke(entt::meta_any{}, derived_t{}));
|
|
|
+ ASSERT_FALSE(entt::resolve<clazz_t>().construct(entt::meta_any{}, derived_t{}));
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, CastAndConvert) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<const base_t &, int>().invoke(derived_t{}, clazz_t{42, 'd'});
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(derived_t{}, clazz_t{42, 'd'});
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
@@ -156,7 +104,7 @@ TEST_F(MetaCtor, CastAndConvert) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, ArithmeticConversion) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<int, char>().invoke(true, 4.2);
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(true, 4.2);
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 1);
|
|
|
@@ -167,7 +115,7 @@ TEST_F(MetaCtor, ConstNonConstRefArgs) {
|
|
|
int ivalue = 42;
|
|
|
const char cvalue = 'c';
|
|
|
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<int, char>().invoke(entt::forward_as_meta(ivalue), entt::forward_as_meta(cvalue));
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(entt::forward_as_meta(ivalue), entt::forward_as_meta(cvalue));
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
@@ -175,20 +123,15 @@ TEST_F(MetaCtor, ConstNonConstRefArgs) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, FuncMetaAnyArgs) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<int>().invoke(entt::meta_any{42});
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(entt::meta_any{42});
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 42);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().c, 'c');
|
|
|
}
|
|
|
|
|
|
-TEST_F(MetaCtor, FuncInvalidArgs) {
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<int>();
|
|
|
- ASSERT_FALSE(ctor.invoke(derived_t{}));
|
|
|
-}
|
|
|
-
|
|
|
TEST_F(MetaCtor, FuncCastAndConvert) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<base_t, int, int>().invoke(derived_t{}, 3., clazz_t{3, 'd'});
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(derived_t{}, 3., clazz_t{3, 'd'});
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 9);
|
|
|
@@ -196,7 +139,7 @@ TEST_F(MetaCtor, FuncCastAndConvert) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, FuncArithmeticConversion) {
|
|
|
- auto any = entt::resolve<clazz_t>().ctor<int>().invoke(4.2);
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(4.2);
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.cast<clazz_t>().i, 4);
|
|
|
@@ -205,10 +148,8 @@ TEST_F(MetaCtor, FuncArithmeticConversion) {
|
|
|
|
|
|
TEST_F(MetaCtor, FuncConstNonConstRefArgs) {
|
|
|
int ivalue = 42;
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<int>();
|
|
|
-
|
|
|
- auto any = ctor.invoke(entt::forward_as_meta(ivalue));
|
|
|
- auto other = ctor.invoke(entt::make_meta<const int &>(ivalue));
|
|
|
+ auto any = entt::resolve<clazz_t>().construct(entt::forward_as_meta(ivalue));
|
|
|
+ auto other = entt::resolve<clazz_t>().construct(entt::make_meta<const int &>(ivalue));
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_TRUE(other);
|
|
|
@@ -217,24 +158,12 @@ TEST_F(MetaCtor, FuncConstNonConstRefArgs) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MetaCtor, ExternalMemberFunction) {
|
|
|
- using namespace entt::literals;
|
|
|
-
|
|
|
- auto ctor = entt::resolve<clazz_t>().ctor<entt::registry &, entt::entity, const int &, const char &>();
|
|
|
-
|
|
|
- ASSERT_TRUE(ctor);
|
|
|
- ASSERT_EQ(ctor.arity(), 4u);
|
|
|
- ASSERT_EQ(ctor.arg(0u), entt::resolve<entt::registry>());
|
|
|
- ASSERT_EQ(ctor.arg(1u), entt::resolve<entt::entity>());
|
|
|
- ASSERT_EQ(ctor.arg(2u), entt::resolve<int>());
|
|
|
- ASSERT_EQ(ctor.arg(3u), entt::resolve<char>());
|
|
|
- ASSERT_FALSE(ctor.arg(4u));
|
|
|
-
|
|
|
entt::registry registry;
|
|
|
const auto entity = registry.create();
|
|
|
|
|
|
ASSERT_FALSE(registry.all_of<clazz_t>(entity));
|
|
|
|
|
|
- const auto any = ctor.invoke(entt::forward_as_meta(registry), entity, 3, 'c');
|
|
|
+ const auto any = entt::resolve<clazz_t>().construct(entt::forward_as_meta(registry), entity, 3, 'c');
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_TRUE(registry.all_of<clazz_t>(entity));
|
|
|
@@ -242,30 +171,9 @@ TEST_F(MetaCtor, ExternalMemberFunction) {
|
|
|
ASSERT_EQ(registry.get<clazz_t>(entity).c, 'c');
|
|
|
}
|
|
|
|
|
|
-TEST_F(MetaCtor, ImplicitlyGeneratedDefaultConstructor) {
|
|
|
- auto type = entt::resolve<int>();
|
|
|
-
|
|
|
- // implicitly generated default constructor is not listed among registered
|
|
|
- ASSERT_EQ(type.ctor().begin(), type.ctor().end());
|
|
|
- ASSERT_FALSE(type.ctor<>());
|
|
|
-
|
|
|
- auto any = type.construct();
|
|
|
-
|
|
|
- ASSERT_TRUE(any);
|
|
|
- ASSERT_EQ(any.type(), entt::resolve<int>());
|
|
|
- ASSERT_EQ(any.cast<int>(), 0);
|
|
|
-}
|
|
|
-
|
|
|
TEST_F(MetaCtor, OverrideImplicitlyGeneratedDefaultConstructor) {
|
|
|
auto type = entt::resolve<double>();
|
|
|
-
|
|
|
- // implicitly generated default constructor is not listed among registered
|
|
|
- ASSERT_EQ(++type.ctor().begin(), type.ctor().end());
|
|
|
- ASSERT_TRUE(type.ctor<>());
|
|
|
- ASSERT_EQ(type.ctor<>().arity(), 0u);
|
|
|
- ASSERT_EQ(type.ctor<>().arg(0), entt::meta_type{});
|
|
|
-
|
|
|
- auto any = type.ctor<>().invoke();
|
|
|
+ auto any = type.construct();
|
|
|
|
|
|
ASSERT_TRUE(any);
|
|
|
ASSERT_EQ(any.type(), entt::resolve<double>());
|