Browse Source

test: meta_factory::base

Michele Caini 1 year ago
parent
commit
84543d98c5
1 changed files with 30 additions and 0 deletions
  1. 30 0
      test/entt/meta/meta_factory.cpp

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

@@ -1,11 +1,20 @@
+#include <iterator>
+#include <utility>
 #include <gtest/gtest.h>
 #include <entt/core/type_info.hpp>
 #include <entt/meta/context.hpp>
 #include <entt/meta/factory.hpp>
 #include <entt/meta/meta.hpp>
+#include <entt/meta/range.hpp>
 #include <entt/meta/resolve.hpp>
 #include "../../common/config.h"
 
+struct base {
+};
+
+struct derived: base {
+};
+
 struct MetaFactory: ::testing::Test {
     void TearDown() override {
         entt::meta_reset();
@@ -63,3 +72,24 @@ ENTT_DEBUG_TEST_F(MetaFactoryDeathTest, Type) {
 
     ASSERT_DEATH(other.type("foo"_hs);, "");
 }
+
+TEST_F(MetaFactory, Base) {
+    entt::meta_factory<derived> factory{};
+    decltype(std::declval<entt::meta_type>().base()) range{};
+
+    ASSERT_NE(entt::resolve(entt::type_id<derived>()), entt::meta_type{});
+    ASSERT_EQ(entt::resolve(entt::type_id<base>()), entt::meta_type{});
+
+    range = entt::resolve<derived>().base();
+
+    ASSERT_EQ(range.begin(), range.end());
+
+    factory.base<base>();
+    range = entt::resolve<derived>().base();
+
+    ASSERT_EQ(entt::resolve(entt::type_id<base>()), entt::meta_type{});
+    ASSERT_NE(range.begin(), range.end());
+    ASSERT_EQ(std::distance(range.begin(), range.end()), 1);
+    ASSERT_EQ(range.begin()->first, entt::type_id<base>().hash());
+    ASSERT_EQ(range.begin()->second.info(), entt::type_id<base>());
+}