Files
XCEngine/tests/Resources/test_resource_dependency.cpp
ssdfasd 0345ce50cf refactor(tests): update Resources include paths to new directory structure
- Updated 23 test files in tests/Resources/ to use new include paths:
  - Core/Asset: IResource, ResourceTypes, ResourceHandle, ResourceManager, ResourceCache, AsyncLoader, ResourceDependencyGraph
  - Core/IO: IResourceLoader, ResourceFileSystem, ResourcePackage, ResourcePath, FileArchive
  - Resources subdirs: Texture/*, Shader/*, Mesh/*, Material/*, AudioClip/*
2026-03-24 15:02:59 +08:00

132 lines
4.2 KiB
C++

#include <gtest/gtest.h>
#include <XCEngine/Core/Asset/ResourceDependencyGraph.h>
#include <XCEngine/Core/Asset/ResourceTypes.h>
using namespace XCEngine::Resources;
using namespace XCEngine::Containers;
namespace {
TEST(ResourceDependencyGraph, DefaultConstructor) {
ResourceDependencyGraph graph;
}
TEST(ResourceDependencyGraph, AddNode) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
EXPECT_TRUE(graph.HasNode(ResourceGUID(1)));
}
TEST(ResourceDependencyGraph, AddMultipleNodes) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
graph.AddNode(ResourceGUID(2), ResourceType::Mesh);
graph.AddNode(ResourceGUID(3), ResourceType::Material);
EXPECT_TRUE(graph.HasNode(ResourceGUID(1)));
EXPECT_TRUE(graph.HasNode(ResourceGUID(2)));
EXPECT_TRUE(graph.HasNode(ResourceGUID(3)));
}
TEST(ResourceDependencyGraph, RemoveNode) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
EXPECT_TRUE(graph.HasNode(ResourceGUID(1)));
graph.RemoveNode(ResourceGUID(1));
EXPECT_FALSE(graph.HasNode(ResourceGUID(1)));
}
TEST(ResourceDependencyGraph, AddDependency) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Material);
graph.AddNode(ResourceGUID(2), ResourceType::Texture);
graph.AddDependency(ResourceGUID(1), ResourceGUID(2));
auto deps = graph.GetDependencies(ResourceGUID(1));
EXPECT_EQ(deps.Size(), 1u);
EXPECT_EQ(deps[0], ResourceGUID(2));
}
TEST(ResourceDependencyGraph, GetDependents) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Material);
graph.AddNode(ResourceGUID(2), ResourceType::Texture);
graph.AddDependency(ResourceGUID(1), ResourceGUID(2));
auto dependents = graph.GetDependents(ResourceGUID(2));
EXPECT_EQ(dependents.Size(), 1u);
EXPECT_EQ(dependents[0], ResourceGUID(1));
}
TEST(ResourceDependencyGraph, GetAllDependencies) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Material);
graph.AddNode(ResourceGUID(2), ResourceType::Texture);
graph.AddNode(ResourceGUID(3), ResourceType::Shader);
graph.AddDependency(ResourceGUID(1), ResourceGUID(2));
graph.AddDependency(ResourceGUID(1), ResourceGUID(3));
auto allDeps = graph.GetAllDependencies(ResourceGUID(1));
EXPECT_EQ(allDeps.Size(), 2u);
}
TEST(ResourceDependencyGraph, RefCount) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 0u);
graph.IncrementRefCount(ResourceGUID(1));
EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 1u);
graph.IncrementRefCount(ResourceGUID(1));
EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 2u);
graph.DecrementRefCount(ResourceGUID(1));
EXPECT_EQ(graph.GetRefCount(ResourceGUID(1)), 1u);
}
TEST(ResourceDependencyGraph, Unload) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
EXPECT_TRUE(graph.Unload(ResourceGUID(1)));
graph.IncrementRefCount(ResourceGUID(1));
EXPECT_FALSE(graph.Unload(ResourceGUID(1)));
}
TEST(ResourceDependencyGraph, Clear) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Texture);
graph.AddNode(ResourceGUID(2), ResourceType::Mesh);
EXPECT_TRUE(graph.HasNode(ResourceGUID(1)));
EXPECT_TRUE(graph.HasNode(ResourceGUID(2)));
graph.Clear();
EXPECT_FALSE(graph.HasNode(ResourceGUID(1)));
EXPECT_FALSE(graph.HasNode(ResourceGUID(2)));
}
TEST(ResourceDependencyGraph, RemoveDependency) {
ResourceDependencyGraph graph;
graph.AddNode(ResourceGUID(1), ResourceType::Material);
graph.AddNode(ResourceGUID(2), ResourceType::Texture);
graph.AddDependency(ResourceGUID(1), ResourceGUID(2));
auto deps = graph.GetDependencies(ResourceGUID(1));
EXPECT_EQ(deps.Size(), 1u);
graph.RemoveDependency(ResourceGUID(1), ResourceGUID(2));
deps = graph.GetDependencies(ResourceGUID(1));
EXPECT_EQ(deps.Size(), 0u);
}
} // namespace