#include #include using namespace XCEngine::Resources; using namespace XCEngine::Math; namespace { TEST(Model, DefaultConstructor) { Model model; EXPECT_EQ(model.GetType(), ResourceType::Model); EXPECT_FALSE(model.HasRootNode()); EXPECT_EQ(model.GetRootNodeIndex(), kInvalidModelNodeIndex); EXPECT_TRUE(model.GetNodes().Empty()); EXPECT_TRUE(model.GetMeshBindings().Empty()); EXPECT_TRUE(model.GetMaterialBindings().Empty()); EXPECT_EQ(model.GetMemorySize(), 0u); } TEST(Model, AddGraphDataUpdatesState) { Model model; IResource::ConstructParams params; params.name = "robot.fbx"; params.path = "Library/Artifacts/aa/main.xcmodel"; params.guid = ResourceGUID::Generate(params.path); model.Initialize(params); model.SetRootNodeIndex(0u); ModelNode rootNode; rootNode.name = "Root"; rootNode.parentIndex = -1; rootNode.meshBindingStart = 0u; rootNode.meshBindingCount = 1u; rootNode.localPosition = Vector3(1.0f, 2.0f, 3.0f); rootNode.localScale = Vector3(1.0f, 1.5f, 2.0f); model.AddNode(rootNode); ModelMeshBinding meshBinding; meshBinding.meshLocalID = 11u; meshBinding.materialBindingStart = 0u; meshBinding.materialBindingCount = 2u; model.AddMeshBinding(meshBinding); ModelMaterialBinding materialBinding0; materialBinding0.slotIndex = 0u; materialBinding0.materialLocalID = 21u; model.AddMaterialBinding(materialBinding0); ModelMaterialBinding materialBinding1; materialBinding1.slotIndex = 1u; materialBinding1.materialLocalID = 22u; model.AddMaterialBinding(materialBinding1); ASSERT_TRUE(model.HasRootNode()); EXPECT_EQ(model.GetRootNodeIndex(), 0u); ASSERT_EQ(model.GetNodes().Size(), 1u); EXPECT_EQ(model.GetNodes()[0].name, "Root"); EXPECT_EQ(model.GetNodes()[0].localPosition, Vector3(1.0f, 2.0f, 3.0f)); EXPECT_EQ(model.GetNodes()[0].localScale, Vector3(1.0f, 1.5f, 2.0f)); ASSERT_EQ(model.GetMeshBindings().Size(), 1u); EXPECT_EQ(model.GetMeshBindings()[0].meshLocalID, 11u); ASSERT_EQ(model.GetMaterialBindings().Size(), 2u); EXPECT_EQ(model.GetMaterialBindings()[1].materialLocalID, 22u); EXPECT_GT(model.GetMemorySize(), 0u); } TEST(Model, ReleaseClearsGraphData) { Model model; IResource::ConstructParams params; params.name = "robot.fbx"; params.path = "Library/Artifacts/aa/main.xcmodel"; params.guid = ResourceGUID::Generate(params.path); model.Initialize(params); model.SetRootNodeIndex(0u); ModelNode node; node.name = "Root"; model.AddNode(node); model.AddMeshBinding(ModelMeshBinding{ 3u, 0u, 0u }); model.AddMaterialBinding(ModelMaterialBinding{ 0u, 7u }); model.Release(); EXPECT_FALSE(model.IsValid()); EXPECT_FALSE(model.HasRootNode()); EXPECT_TRUE(model.GetNodes().Empty()); EXPECT_TRUE(model.GetMeshBindings().Empty()); EXPECT_TRUE(model.GetMaterialBindings().Empty()); EXPECT_EQ(model.GetMemorySize(), 0u); } } // namespace