Просмотр исходного кода

test: more about meta_factory<void>

skypjack 1 день назад
Родитель
Сommit
fc36d69207
2 измененных файлов с 36 добавлено и 1 удалено
  1. 0 1
      TODO
  2. 36 0
      test/entt/meta/meta_factory.cpp

+ 0 - 1
TODO

@@ -41,4 +41,3 @@ TODO:
 * check coverage on new meta context features
 * fast lookup on meta reset
 * check for duplicates in basic_meta_factory constructor (with tests)
-* meta <void> support free functions on data and func (with tests - meta_factory.cpp)

+ 36 - 0
test/entt/meta/meta_factory.cpp

@@ -340,6 +340,24 @@ TEST_F(MetaFactory, Func) {
     ASSERT_FALSE(type.invoke("func"_hs, {}));
 }
 
+TEST_F(MetaFactory, FuncFreeFunction) {
+    using namespace entt::literals;
+
+    const clazz instance{1};
+    entt::meta_factory<clazz> factory{};
+    entt::meta_type type = entt::resolve<clazz>();
+
+    ASSERT_FALSE(type.func("func"_hs));
+
+    factory.func<&clazz::get_double>("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<double>(), clazz::get_double(instance));
+    ASSERT_FALSE(type.invoke("func"_hs, {}));
+}
+
 TEST_F(MetaFactory, FuncOverload) {
     using namespace entt::literals;
 
@@ -710,6 +728,24 @@ TEST_F(MetaVoidFactory, Func) {
     ASSERT_FALSE(type.invoke("func"_hs, {}));
 }
 
+TEST_F(MetaVoidFactory, FuncFreeFunction) {
+    using namespace entt::literals;
+
+    const clazz instance{1};
+    entt::meta_factory<void> factory{"type"};
+    entt::meta_type type = entt::resolve("type"_hs);
+
+    ASSERT_FALSE(type.func("func"_hs));
+
+    factory.func<&clazz::get_double>("func"_hs);
+    type = entt::resolve("type"_hs);
+
+    ASSERT_TRUE(type.func("func"_hs));
+    ASSERT_TRUE(type.invoke("func"_hs, instance));
+    ASSERT_EQ(type.invoke("func"_hs, instance).cast<double>(), clazz::get_double(instance));
+    ASSERT_FALSE(type.invoke("func"_hs, {}));
+}
+
 TEST_F(MetaVoidFactory, FuncOverload) {
     using namespace entt::literals;