feat(Resources): 添加资源系统基础框架
- ResourceTypes: 资源类型枚举、ResourceGUID生成 - IResource: 资源基类接口 - ResourceHandle: 资源句柄智能指针 - IResourceLoader: 加载器接口 - ResourceManager: 资源管理器(单例模式) - ResourceCache: LRU缓存实现 - AsyncLoader: 异步加载器 - 测试框架: test_resource_types, test_resource_guid Note: 当前与现有容器API存在编译差异,需要后续修复
This commit is contained in:
30
tests/Resources/CMakeLists.txt
Normal file
30
tests/Resources/CMakeLists.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
# ============================================================
|
||||
# Resources Library Tests
|
||||
# ============================================================
|
||||
|
||||
set(RESOURCES_TEST_SOURCES
|
||||
test_resource_types.cpp
|
||||
test_resource_guid.cpp
|
||||
)
|
||||
|
||||
add_executable(xcengine_resources_tests ${RESOURCES_TEST_SOURCES})
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(xcengine_resources_tests PROPERTIES
|
||||
LINK_FLAGS "/NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:libcmt.lib"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(xcengine_resources_tests
|
||||
PRIVATE
|
||||
XCEngine
|
||||
GTest::gtest
|
||||
GTest::gtest_main
|
||||
)
|
||||
|
||||
target_include_directories(xcengine_resources_tests PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/engine/include
|
||||
${CMAKE_SOURCE_DIR}/tests/fixtures
|
||||
)
|
||||
|
||||
add_test(NAME ResourcesTests COMMAND xcengine_resources_tests)
|
||||
62
tests/Resources/test_resource_guid.cpp
Normal file
62
tests/Resources/test_resource_guid.cpp
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <XCEngine/Resources/ResourceTypes.h>
|
||||
|
||||
using namespace XCEngine::Resources;
|
||||
|
||||
namespace {
|
||||
|
||||
TEST(Resources_GUID, DefaultConstructor) {
|
||||
ResourceGUID guid;
|
||||
EXPECT_FALSE(guid.IsValid());
|
||||
EXPECT_EQ(guid.value, 0);
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, ValueConstructor) {
|
||||
ResourceGUID guid(12345);
|
||||
EXPECT_TRUE(guid.IsValid());
|
||||
EXPECT_EQ(guid.value, 12345);
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, Generate_FromCString) {
|
||||
ResourceGUID guid1 = ResourceGUID::Generate("textures/player.png");
|
||||
ResourceGUID guid2 = ResourceGUID::Generate("textures/player.png");
|
||||
|
||||
EXPECT_EQ(guid1, guid2);
|
||||
EXPECT_TRUE(guid1.IsValid());
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, Generate_FromString) {
|
||||
Containers::String path = "models/player.fbx";
|
||||
ResourceGUID guid = ResourceGUID::Generate(path);
|
||||
EXPECT_TRUE(guid.IsValid());
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, Generate_DifferentPaths) {
|
||||
ResourceGUID guid1 = ResourceGUID::Generate("textures/a.png");
|
||||
ResourceGUID guid2 = ResourceGUID::Generate("textures/b.png");
|
||||
|
||||
EXPECT_NE(guid1, guid2);
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, ToString) {
|
||||
ResourceGUID guid(0x1234567890ABCDEF);
|
||||
Containers::String str = guid.ToString();
|
||||
|
||||
EXPECT_EQ(str.Size(), 16u);
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, MakeResourceGUID_Helper) {
|
||||
ResourceGUID guid = MakeResourceGUID("test/path");
|
||||
EXPECT_TRUE(guid.IsValid());
|
||||
}
|
||||
|
||||
TEST(Resources_GUID, EqualityOperators) {
|
||||
ResourceGUID guid1(100);
|
||||
ResourceGUID guid2(100);
|
||||
ResourceGUID guid3(200);
|
||||
|
||||
EXPECT_TRUE(guid1 == guid2);
|
||||
EXPECT_TRUE(guid1 != guid3);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
34
tests/Resources/test_resource_types.cpp
Normal file
34
tests/Resources/test_resource_types.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <XCEngine/Resources/ResourceTypes.h>
|
||||
|
||||
using namespace XCEngine::Resources;
|
||||
|
||||
namespace {
|
||||
|
||||
TEST(Resources_Types, ResourceType_EnumValues) {
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Unknown), 0);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Texture), 1);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Mesh), 2);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Material), 3);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Shader), 4);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::AudioClip), 5);
|
||||
EXPECT_EQ(static_cast<Core::uint8>(ResourceType::Binary), 6);
|
||||
}
|
||||
|
||||
TEST(Resources_Types, GetResourceTypeName) {
|
||||
EXPECT_STREQ(GetResourceTypeName(ResourceType::Texture), "Texture");
|
||||
EXPECT_STREQ(GetResourceTypeName(ResourceType::Mesh), "Mesh");
|
||||
EXPECT_STREQ(GetResourceTypeName(ResourceType::Material), "Material");
|
||||
EXPECT_STREQ(GetResourceTypeName(ResourceType::Unknown), "Unknown");
|
||||
}
|
||||
|
||||
TEST(Resources_Types, GetResourceType_TemplateSpecializations) {
|
||||
EXPECT_EQ(GetResourceType<Texture>(), ResourceType::Texture);
|
||||
EXPECT_EQ(GetResourceType<Mesh>(), ResourceType::Mesh);
|
||||
EXPECT_EQ(GetResourceType<Material>(), ResourceType::Material);
|
||||
EXPECT_EQ(GetResourceType<Shader>(), ResourceType::Shader);
|
||||
EXPECT_EQ(GetResourceType<AudioClip>(), ResourceType::AudioClip);
|
||||
EXPECT_EQ(GetResourceType<BinaryResource>(), ResourceType::Binary);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user