Browse Source

test: more on meta_func

Michele Caini 5 years ago
parent
commit
04b0c9f2cf
2 changed files with 19 additions and 28 deletions
  1. 0 27
      test/entt/meta/meta.cpp
  2. 19 1
      test/entt/meta/meta_func.cpp

+ 0 - 27
test/entt/meta/meta.cpp

@@ -9,33 +9,6 @@
 #include <entt/meta/resolve.hpp>
 #include <entt/meta/resolve.hpp>
 #include "fixture.h"
 #include "fixture.h"
 
 
-TEST_F(Meta, MetaFuncFromBase) {
-    auto type = entt::resolve<concrete_type>();
-    auto base = entt::resolve<an_abstract_type>();
-    concrete_type instance;
-
-    ASSERT_TRUE(type.func("f"_hs));
-    ASSERT_TRUE(type.func("g"_hs));
-    ASSERT_TRUE(type.func("h"_hs));
-
-    ASSERT_EQ(type.func("f"_hs).parent(), entt::resolve<concrete_type>());
-    ASSERT_EQ(type.func("g"_hs).parent(), entt::resolve<an_abstract_type>());
-    ASSERT_EQ(type.func("h"_hs).parent(), entt::resolve<another_abstract_type>());
-
-    ASSERT_EQ(instance.i, 0);
-    ASSERT_EQ(instance.j, char{});
-
-    type.func("f"_hs).invoke(instance, 3);
-    type.func("h"_hs).invoke(instance, 'c');
-
-    ASSERT_EQ(instance.i, 9);
-    ASSERT_EQ(instance.j, 'c');
-
-    base.func("g"_hs).invoke(instance, 3);
-
-    ASSERT_EQ(instance.i, -3);
-}
-
 TEST_F(Meta, AbstractClass) {
 TEST_F(Meta, AbstractClass) {
     auto type = entt::resolve<an_abstract_type>();
     auto type = entt::resolve<an_abstract_type>();
     concrete_type instance;
     concrete_type instance;

+ 19 - 1
test/entt/meta/meta_func.cpp

@@ -11,7 +11,12 @@ struct base_t {
         ++counter;
         ++counter;
     }
     }
 
 
+    void func(int v) {
+        value = v;
+    }
+
     inline static int counter = 0;
     inline static int counter = 0;
+    int value{3};
 };
 };
 
 
 struct derived_t: base_t {};
 struct derived_t: base_t {};
@@ -56,7 +61,7 @@ struct func_t {
 struct Meta: ::testing::Test {
 struct Meta: ::testing::Test {
     static void SetUpTestCase() {
     static void SetUpTestCase() {
         entt::meta<double>().conv<int>();
         entt::meta<double>().conv<int>();
-        entt::meta<base_t>().dtor<&base_t::destroy>();
+        entt::meta<base_t>().dtor<&base_t::destroy>().func<&base_t::func>("func"_hs);
         entt::meta<derived_t>().base<base_t>().dtor<&derived_t::destroy>();
         entt::meta<derived_t>().base<base_t>().dtor<&derived_t::destroy>();
 
 
         entt::meta<func_t>().type("func"_hs)
         entt::meta<func_t>().type("func"_hs)
@@ -310,3 +315,16 @@ TEST_F(Meta, MetaFuncByReference) {
     ASSERT_EQ(any.cast<int>(), 6);
     ASSERT_EQ(any.cast<int>(), 6);
     ASSERT_EQ(value, 8);
     ASSERT_EQ(value, 8);
 }
 }
+
+TEST_F(Meta, MetaFuncFromBase) {
+    auto type = entt::resolve<derived_t>();
+    derived_t instance;
+
+    ASSERT_TRUE(type.func("func"_hs));
+    ASSERT_EQ(type.func("func"_hs).parent(), entt::resolve<base_t>());
+    ASSERT_EQ(instance.value, 3);
+
+    type.func("func"_hs).invoke(instance, 42);
+
+    ASSERT_EQ(instance.value, 42);
+}