Browse Source

test: meta_factory::func

Michele Caini 1 year ago
parent
commit
388b39dfac
1 changed files with 39 additions and 7 deletions
  1. 39 7
      test/entt/meta/meta_factory.cpp

+ 39 - 7
test/entt/meta/meta_factory.cpp

@@ -144,7 +144,7 @@ TEST_F(MetaFactory, Base) {
 }
 }
 
 
 TEST_F(MetaFactory, Conv) {
 TEST_F(MetaFactory, Conv) {
-    clazz instance{3};
+    const clazz instance{3};
     auto factory = entt::meta<clazz>();
     auto factory = entt::meta<clazz>();
     const entt::meta_any any = entt::forward_as_meta(instance);
     const entt::meta_any any = entt::forward_as_meta(instance);
 
 
@@ -310,7 +310,6 @@ TEST_F(MetaFactory, DataMultiSetterGetter) {
 TEST_F(MetaFactory, DataOverwrite) {
 TEST_F(MetaFactory, DataOverwrite) {
     using namespace entt::literals;
     using namespace entt::literals;
 
 
-    clazz instance{1};
     auto factory = entt::meta<clazz>();
     auto factory = entt::meta<clazz>();
     entt::meta_type type = entt::resolve<clazz>();
     entt::meta_type type = entt::resolve<clazz>();
 
 
@@ -330,15 +329,48 @@ TEST_F(MetaFactory, DataOverwrite) {
 }
 }
 
 
 TEST_F(MetaFactory, Func) {
 TEST_F(MetaFactory, Func) {
-    // TODO
-}
+    using namespace entt::literals;
 
 
-TEST_F(MetaFactory, FuncOverwrite) {
-    // TODO
+    const clazz instance{1};
+    auto factory = entt::meta<clazz>();
+    entt::meta_type type = entt::resolve<clazz>();
+
+    ASSERT_FALSE(type.func("func"_hs));
+
+    factory.func<&clazz::get_int>("func"_hs);
+    type = entt::resolve<clazz>();
+
+    ASSERT_TRUE(type.func("func"_hs));
+    ASSERT_TRUE(type.invoke("func"_hs, instance));
+    ASSERT_EQ(type.invoke("func"_hs, instance).cast<int>(), instance.get_int());
+    ASSERT_FALSE(type.invoke("func"_hs, {}));
 }
 }
 
 
 TEST_F(MetaFactory, FuncOverload) {
 TEST_F(MetaFactory, FuncOverload) {
-    // TODO
+    using namespace entt::literals;
+
+    clazz instance{1};
+    auto factory = entt::meta<clazz>();
+    entt::meta_type type = entt::resolve<clazz>();
+
+    ASSERT_FALSE(type.func("func"_hs));
+
+    factory.func<&clazz::set_int>("func"_hs);
+
+    ASSERT_TRUE(type.func("func"_hs));
+    ASSERT_FALSE(type.func("func"_hs).next());
+
+    factory.func<&clazz::set_boxed_int>("func"_hs);
+
+    ASSERT_TRUE(type.func("func"_hs));
+    ASSERT_TRUE(type.func("func"_hs).next());
+    ASSERT_FALSE(type.func("func"_hs).next().next());
+
+    ASSERT_TRUE(type.invoke("func"_hs, instance, 2));
+    ASSERT_EQ(instance.get_int(), 2);
+
+    ASSERT_TRUE(type.invoke("func"_hs, instance, test::boxed_int{3}));
+    ASSERT_EQ(instance.get_int(), 3);
 }
 }
 
 
 TEST_F(MetaFactory, Traits) {
 TEST_F(MetaFactory, Traits) {