GraphDataBehaviorTests.cpp 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/Component/ComponentApplication.h>
  9. #include <AzCore/Math/MathReflection.h>
  10. #include <AzCore/Name/NameDictionary.h>
  11. #include <AzCore/RTTI/BehaviorContext.h>
  12. #include <AzCore/RTTI/ReflectionManager.h>
  13. #include <AzCore/Serialization/Json/RegistrationContext.h>
  14. #include <AzCore/std/smart_ptr/make_shared.h>
  15. #include <AzCore/std/smart_ptr/shared_ptr.h>
  16. #include <AzCore/std/optional.h>
  17. #include <AzCore/UnitTest/TestTypes.h>
  18. #include <AzTest/AzTest.h>
  19. #include <SceneAPI/SceneCore/DataTypes/IGraphObject.h>
  20. #include <SceneAPI/SceneCore/DataTypes/GraphData/IMeshData.h>
  21. #include <SceneAPI/SceneData/ReflectionRegistrar.h>
  22. #include <SceneAPI/SceneData/GraphData/CustomPropertyData.h>
  23. #include <SceneAPI/SceneData/GraphData/MeshData.h>
  24. #include <SceneAPI/SceneData/GraphData/MeshVertexBitangentData.h>
  25. #include <SceneAPI/SceneData/GraphData/MeshVertexColorData.h>
  26. #include <SceneAPI/SceneData/GraphData/MeshVertexTangentData.h>
  27. #include <SceneAPI/SceneData/GraphData/MeshVertexUVData.h>
  28. #include <SceneAPI/SceneData/GraphData/AnimationData.h>
  29. #include <SceneAPI/SceneData/GraphData/BlendShapeData.h>
  30. #include <SceneAPI/SceneData/GraphData/MaterialData.h>
  31. #include <SceneAPI/SceneData/GraphData/BoneData.h>
  32. #include <SceneAPI/SceneData/GraphData/RootBoneData.h>
  33. #include <SceneAPI/SceneData/GraphData/TransformData.h>
  34. extern "C" AZ_DLL_EXPORT void CleanUpSceneDataGenericClassInfo();
  35. namespace AZ
  36. {
  37. namespace SceneAPI
  38. {
  39. namespace Containers
  40. {
  41. struct MockGraphData final
  42. {
  43. AZ_TYPE_INFO(MockGraphData, "{06996B36-E204-4ECC-9F3C-3D644B8CAE07}");
  44. MockGraphData() = default;
  45. ~MockGraphData() = default;
  46. static bool FillData(AZStd::any& data)
  47. {
  48. if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshData>())
  49. {
  50. auto* meshData = AZStd::any_cast<AZ::SceneData::GraphData::MeshData>(&data);
  51. meshData->AddPosition(Vector3{1.0f, 1.1f, 2.2f});
  52. meshData->AddPosition(Vector3{2.0f, 2.1f, 3.2f});
  53. meshData->AddPosition(Vector3{3.0f, 3.1f, 4.2f});
  54. meshData->AddPosition(Vector3{4.0f, 4.1f, 5.2f});
  55. meshData->AddNormal(Vector3{0.1f, 0.2f, 0.3f});
  56. meshData->AddNormal(Vector3{0.4f, 0.5f, 0.6f});
  57. meshData->SetOriginalUnitSizeInMeters(10.0f);
  58. meshData->SetUnitSizeInMeters(0.5f);
  59. meshData->SetVertexIndexToControlPointIndexMap(0, 10);
  60. meshData->SetVertexIndexToControlPointIndexMap(1, 11);
  61. meshData->SetVertexIndexToControlPointIndexMap(2, 12);
  62. meshData->SetVertexIndexToControlPointIndexMap(3, 13);
  63. meshData->AddFace({0, 1, 2}, 1);
  64. meshData->AddFace({3, 4, 5}, 2);
  65. meshData->AddFace({6, 7, 8}, 3);
  66. return true;
  67. }
  68. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexColorData>())
  69. {
  70. auto* colorData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexColorData>(&data);
  71. colorData->SetCustomName("mesh_vertex_color_data");
  72. colorData->AppendColor(AZ::SceneAPI::DataTypes::Color{0.1f, 0.2f, 0.3f, 0.4f});
  73. colorData->AppendColor(AZ::SceneAPI::DataTypes::Color{0.5f, 0.6f, 0.7f, 0.8f});
  74. return true;
  75. }
  76. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexUVData>())
  77. {
  78. auto* uvData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexUVData>(&data);
  79. uvData->SetCustomName("mesh_vertex_uv_data");
  80. uvData->AppendUV(AZ::Vector2{0.1f, 0.2f});
  81. uvData->AppendUV(AZ::Vector2{0.3f, 0.4f});
  82. return true;
  83. }
  84. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexBitangentData>())
  85. {
  86. auto* bitangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexBitangentData>(&data);
  87. bitangentData->AppendBitangent(AZ::Vector3{0.12f, 0.34f, 0.56f});
  88. bitangentData->AppendBitangent(AZ::Vector3{0.77f, 0.88f, 0.99f});
  89. bitangentData->SetGenerationMethod(AZ::SceneAPI::DataTypes::TangentGenerationMethod::FromSourceScene);
  90. bitangentData->SetBitangentSetIndex(1);
  91. return true;
  92. }
  93. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexTangentData>())
  94. {
  95. auto* tangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexTangentData>(&data);
  96. tangentData->AppendTangent(AZ::Vector4{0.12f, 0.34f, 0.56f, 0.78f});
  97. tangentData->AppendTangent(AZ::Vector4{0.18f, 0.28f, 0.19f, 0.29f});
  98. tangentData->AppendTangent(AZ::Vector4{0.21f, 0.43f, 0.65f, 0.87f});
  99. tangentData->SetGenerationMethod(AZ::SceneAPI::DataTypes::TangentGenerationMethod::MikkT);
  100. tangentData->SetTangentSetIndex(2);
  101. return true;
  102. }
  103. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::AnimationData>())
  104. {
  105. auto* animationData = AZStd::any_cast<AZ::SceneData::GraphData::AnimationData>(&data);
  106. animationData->ReserveKeyFrames(3);
  107. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(1.0));
  108. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(2.0));
  109. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(3.0));
  110. animationData->SetTimeStepBetweenFrames(4.0);
  111. return true;
  112. }
  113. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::BlendShapeAnimationData>())
  114. {
  115. auto* blendShapeAnimationData = AZStd::any_cast<AZ::SceneData::GraphData::BlendShapeAnimationData>(&data);
  116. blendShapeAnimationData->SetBlendShapeName("mockBlendShapeName");
  117. blendShapeAnimationData->ReserveKeyFrames(3);
  118. blendShapeAnimationData->AddKeyFrame(1.0);
  119. blendShapeAnimationData->AddKeyFrame(2.0);
  120. blendShapeAnimationData->AddKeyFrame(3.0);
  121. blendShapeAnimationData->SetTimeStepBetweenFrames(4.0);
  122. return true;
  123. }
  124. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::BlendShapeData>())
  125. {
  126. auto* blendShapeData = AZStd::any_cast<AZ::SceneData::GraphData::BlendShapeData>(&data);
  127. blendShapeData->AddPosition({ 1.0, 2.0, 3.0 });
  128. blendShapeData->AddPosition({ 2.0, 3.0, 4.0 });
  129. blendShapeData->AddPosition({ 3.0, 4.0, 5.0 });
  130. blendShapeData->AddNormal({ 0.1, 0.2, 0.3 });
  131. blendShapeData->AddNormal({ 0.2, 0.3, 0.4 });
  132. blendShapeData->AddNormal({ 0.3, 0.4, 0.5 });
  133. blendShapeData->AddTangentAndBitangent(Vector4{ 0.1f, 0.2f, 0.3f, 0.4f }, { 0.0, 0.1, 0.2 });
  134. blendShapeData->AddTangentAndBitangent(Vector4{ 0.2f, 0.3f, 0.4f, 0.5f }, { 0.1, 0.2, 0.3 });
  135. blendShapeData->AddTangentAndBitangent(Vector4{ 0.3f, 0.4f, 0.5f, 0.6f }, { 0.2, 0.3, 0.4 });
  136. blendShapeData->AddUV(Vector2{ 0.9, 0.8 }, 0);
  137. blendShapeData->AddUV(Vector2{ 0.7, 0.7 }, 1);
  138. blendShapeData->AddUV(Vector2{ 0.6, 0.6 }, 2);
  139. blendShapeData->AddColor(DataTypes::Color{ 0.1, 0.2, 0.3, 0.4 }, 0);
  140. blendShapeData->AddColor(DataTypes::Color{ 0.2, 0.3, 0.4, 0.5 }, 1);
  141. blendShapeData->AddColor(DataTypes::Color{ 0.3, 0.4, 0.5, 0.6 }, 2);
  142. blendShapeData->AddFace({ 0, 1, 2 });
  143. blendShapeData->AddFace({ 1, 2, 0 });
  144. blendShapeData->AddFace({ 2, 0, 1 });
  145. blendShapeData->SetVertexIndexToControlPointIndexMap(0, 1);
  146. blendShapeData->SetVertexIndexToControlPointIndexMap(1, 2);
  147. blendShapeData->SetVertexIndexToControlPointIndexMap(2, 0);
  148. return true;
  149. }
  150. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MaterialData>())
  151. {
  152. auto* materialDataData = AZStd::any_cast<AZ::SceneData::GraphData::MaterialData>(&data);
  153. materialDataData->SetBaseColor(AZStd::make_optional(AZ::Vector3(0.1, 0.2, 0.3)));
  154. materialDataData->SetDiffuseColor({ 0.3, 0.4, 0.5 });
  155. materialDataData->SetEmissiveColor({ 0.4, 0.5, 0.6 });
  156. materialDataData->SetEmissiveIntensity(AZStd::make_optional(0.789f));
  157. materialDataData->SetMaterialName("TestMaterialName");
  158. materialDataData->SetMetallicFactor(AZStd::make_optional(0.123f));
  159. materialDataData->SetNoDraw(true);
  160. materialDataData->SetOpacity(0.7);
  161. materialDataData->SetRoughnessFactor(AZStd::make_optional(0.456f));
  162. materialDataData->SetShininess(1.23);
  163. materialDataData->SetSpecularColor({ 0.8, 0.9, 1.0 });
  164. materialDataData->SetUseAOMap(AZStd::make_optional(true));
  165. materialDataData->SetUseColorMap(AZStd::make_optional(true));
  166. materialDataData->SetUseMetallicMap(AZStd::make_optional(true));
  167. materialDataData->SetUseRoughnessMap(AZStd::make_optional(true));
  168. materialDataData->SetUseEmissiveMap(AZStd::make_optional(true));
  169. materialDataData->SetUniqueId(102938);
  170. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::AmbientOcclusion, "ambientocclusion");
  171. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::BaseColor, "basecolor");
  172. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Bump, "bump");
  173. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Diffuse, "diffuse");
  174. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Emissive, "emissive");
  175. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Metallic, "metallic");
  176. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Normal, "normal");
  177. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Roughness, "roughness");
  178. materialDataData->SetTexture(AZ::SceneAPI::DataTypes::IMaterialData::TextureMapType::Specular, "specular");
  179. return true;
  180. }
  181. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::BoneData>())
  182. {
  183. auto* boneData = AZStd::any_cast<AZ::SceneData::GraphData::BoneData>(&data);
  184. boneData->SetWorldTransform(SceneAPI::DataTypes::MatrixType::CreateDiagonal({1.0, 2.0, 3.0}));
  185. return true;
  186. }
  187. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::CustomPropertyData>())
  188. {
  189. AZ::SceneData::GraphData::CustomPropertyData::PropertyMap propertyMap;
  190. propertyMap["a_string"] = AZStd::make_any<AZStd::string>("the string");
  191. propertyMap["a_bool"] = AZStd::make_any<bool>(true);
  192. propertyMap["a_int32"] = AZStd::make_any<int32_t>(aznumeric_cast<int32_t>(-32));
  193. propertyMap["a_uint64"] = AZStd::make_any<AZ::u64>(aznumeric_cast<AZ::u64>(64));
  194. propertyMap["a_float"] = AZStd::make_any<float>(aznumeric_cast<float>(12.34));
  195. propertyMap["a_double"] = AZStd::make_any<double>(aznumeric_cast<double>(0.1234));
  196. AZStd::any_cast<AZ::SceneData::GraphData::CustomPropertyData>(&data)->SetPropertyMap(propertyMap);
  197. return true;
  198. }
  199. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::RootBoneData>())
  200. {
  201. auto* boneData = AZStd::any_cast<AZ::SceneData::GraphData::RootBoneData>(&data);
  202. boneData->SetWorldTransform(SceneAPI::DataTypes::MatrixType::CreateDiagonal({2.0, 3.0, 4.0}));
  203. return true;
  204. }
  205. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::TransformData>())
  206. {
  207. auto* transformData = AZStd::any_cast<AZ::SceneData::GraphData::TransformData>(&data);
  208. transformData->SetMatrix(AZ::Matrix3x4::CreateDiagonal({1.0, 2.0, 3.0}));
  209. return true;
  210. }
  211. return false;
  212. }
  213. static void Reflect(ReflectContext* context)
  214. {
  215. BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
  216. if (behaviorContext)
  217. {
  218. behaviorContext->Class<MockGraphData>()
  219. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  220. ->Attribute(AZ::Script::Attributes::Module, "scene")
  221. ->Method("FillData", &MockGraphData::FillData);
  222. }
  223. }
  224. };
  225. class GraphDataBehaviorScriptTest
  226. : public UnitTest::LeakDetectionFixture
  227. {
  228. public:
  229. AZStd::unique_ptr<AZ::ScriptContext> m_scriptContext;
  230. AZStd::unique_ptr<AZ::BehaviorContext> m_behaviorContext;
  231. AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext;
  232. static void TestExpectTrue(bool value)
  233. {
  234. EXPECT_TRUE(value);
  235. }
  236. static void TestExpectIntegerEquals(AZ::s64 lhs, AZ::s64 rhs)
  237. {
  238. EXPECT_EQ(lhs, rhs);
  239. }
  240. static void TestExpectFloatEquals(float lhs, float rhs)
  241. {
  242. EXPECT_EQ(lhs, rhs);
  243. }
  244. void SetUp() override
  245. {
  246. UnitTest::LeakDetectionFixture::SetUp();
  247. AZ::NameDictionary::Create();
  248. m_serializeContext = AZStd::make_unique<AZ::SerializeContext>();
  249. AZ::SceneAPI::RegisterDataTypeReflection(m_serializeContext.get());
  250. m_behaviorContext = AZStd::make_unique<AZ::BehaviorContext>();
  251. m_behaviorContext->Method("TestExpectTrue", &TestExpectTrue);
  252. m_behaviorContext->Method("TestExpectIntegerEquals", &TestExpectIntegerEquals);
  253. m_behaviorContext->Method("TestExpectFloatEquals", &TestExpectFloatEquals);
  254. MockGraphData::Reflect(m_behaviorContext.get());
  255. AZ::MathReflect(m_behaviorContext.get());
  256. AZ::SceneAPI::RegisterDataTypeBehaviorReflection(m_behaviorContext.get());
  257. m_scriptContext = AZStd::make_unique<AZ::ScriptContext>();
  258. m_scriptContext->BindTo(m_behaviorContext.get());
  259. }
  260. void TearDown() override
  261. {
  262. m_scriptContext.reset();
  263. m_serializeContext.reset();
  264. m_behaviorContext.reset();
  265. CleanUpSceneDataGenericClassInfo();
  266. AZ::NameDictionary::Destroy();
  267. UnitTest::LeakDetectionFixture::TearDown();
  268. }
  269. void ExpectExecute(AZStd::string_view script)
  270. {
  271. EXPECT_TRUE(m_scriptContext->Execute(script.data()));
  272. }
  273. };
  274. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MeshData_AccessWorks)
  275. {
  276. ExpectExecute("meshData = MeshData()");
  277. ExpectExecute("TestExpectTrue(meshData ~= nil)");
  278. ExpectExecute("MockGraphData.FillData(meshData)");
  279. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexCount(), 4)");
  280. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).x, 1.0)");
  281. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).y, 1.1)");
  282. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).z, 2.2)");
  283. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).x, 2.0)");
  284. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).y, 2.1)");
  285. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).z, 3.2)");
  286. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).x, 3.0)");
  287. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).y, 3.1)");
  288. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).z, 4.2)");
  289. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).x, 4.0)");
  290. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).y, 4.1)");
  291. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).z, 5.2)");
  292. ExpectExecute("TestExpectTrue(meshData:HasNormalData())");
  293. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).x, 0.1)");
  294. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).y, 0.2)");
  295. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).z, 0.3)");
  296. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).x, 0.4)");
  297. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).y, 0.5)");
  298. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).z, 0.6)");
  299. ExpectExecute("TestExpectFloatEquals(meshData:GetOriginalUnitSizeInMeters(), 10.0)");
  300. ExpectExecute("TestExpectFloatEquals(meshData:GetUnitSizeInMeters(), 0.5)");
  301. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedControlPointCount(), 4)");
  302. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(0), 10)");
  303. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(1), 11)");
  304. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(2), 12)");
  305. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(3), 13)");
  306. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(10), 0)");
  307. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(11), 1)");
  308. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(12), 2)");
  309. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(13), 3)");
  310. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(0), -1)");
  311. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceCount(), 3)");
  312. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 0), 0)");
  313. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 1), 1)");
  314. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 2), 2)");
  315. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 0), 6)");
  316. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 1), 7)");
  317. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 2), 8)");
  318. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(2), 3)");
  319. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(1), 2)");
  320. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(0), 1)");
  321. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(0), 0)");
  322. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(1), 1)");
  323. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(2), 2)");
  324. }
  325. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MeshVertexColorData_AccessWorks)
  326. {
  327. ExpectExecute("meshVertexColorData = MeshVertexColorData()");
  328. ExpectExecute("TestExpectTrue(meshVertexColorData ~= nil)");
  329. ExpectExecute("MockGraphData.FillData(meshVertexColorData)");
  330. ExpectExecute("TestExpectTrue(meshVertexColorData:GetCustomName() == 'mesh_vertex_color_data')");
  331. ExpectExecute("TestExpectIntegerEquals(meshVertexColorData:GetCount(), 2)");
  332. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).red, 0.1)");
  333. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).green, 0.2)");
  334. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).blue, 0.3)");
  335. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).alpha, 0.4)");
  336. ExpectExecute("colorOne = meshVertexColorData:GetColor(1)");
  337. ExpectExecute("TestExpectFloatEquals(colorOne.red, 0.5)");
  338. ExpectExecute("TestExpectFloatEquals(colorOne.green, 0.6)");
  339. ExpectExecute("TestExpectFloatEquals(colorOne.blue, 0.7)");
  340. ExpectExecute("TestExpectFloatEquals(colorOne.alpha, 0.8)");
  341. }
  342. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MeshVertexUVData_AccessWorks)
  343. {
  344. ExpectExecute("meshVertexUVData = MeshVertexUVData()");
  345. ExpectExecute("TestExpectTrue(meshVertexUVData ~= nil)");
  346. ExpectExecute("MockGraphData.FillData(meshVertexUVData)");
  347. ExpectExecute("TestExpectTrue(meshVertexUVData:GetCustomName() == 'mesh_vertex_uv_data')");
  348. ExpectExecute("TestExpectIntegerEquals(meshVertexUVData:GetCount(), 2)");
  349. ExpectExecute("TestExpectFloatEquals(meshVertexUVData:GetUV(0).x, 0.1)");
  350. ExpectExecute("TestExpectFloatEquals(meshVertexUVData:GetUV(0).y, 0.2)");
  351. ExpectExecute("uvOne = meshVertexUVData:GetUV(1)");
  352. ExpectExecute("TestExpectFloatEquals(uvOne.x, 0.3)");
  353. ExpectExecute("TestExpectFloatEquals(uvOne.y, 0.4)");
  354. }
  355. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MeshVertexBitangentData_AccessWorks)
  356. {
  357. ExpectExecute("meshVertexBitangentData = MeshVertexBitangentData()");
  358. ExpectExecute("TestExpectTrue(meshVertexBitangentData ~= nil)");
  359. ExpectExecute("MockGraphData.FillData(meshVertexBitangentData)");
  360. ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetCount(), 2)");
  361. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).x, 0.12)");
  362. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).y, 0.34)");
  363. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).z, 0.56)");
  364. ExpectExecute("bitangentData = meshVertexBitangentData:GetBitangent(1)");
  365. ExpectExecute("TestExpectFloatEquals(bitangentData.x, 0.77)");
  366. ExpectExecute("TestExpectFloatEquals(bitangentData.y, 0.88)");
  367. ExpectExecute("TestExpectFloatEquals(bitangentData.z, 0.99)");
  368. ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetBitangentSetIndex(), 1)");
  369. ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetGenerationMethod(), MeshVertexBitangentData.FromSourceScene)");
  370. }
  371. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MeshVertexTangentData_AccessWorks)
  372. {
  373. ExpectExecute("meshVertexTangentData = MeshVertexTangentData()");
  374. ExpectExecute("TestExpectTrue(meshVertexTangentData ~= nil)");
  375. ExpectExecute("MockGraphData.FillData(meshVertexTangentData)");
  376. ExpectExecute("TestExpectIntegerEquals(meshVertexTangentData:GetCount(), 3)");
  377. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).x, 0.12)");
  378. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).y, 0.34)");
  379. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).z, 0.56)");
  380. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).w, 0.78)");
  381. ExpectExecute("tangentData = meshVertexTangentData:GetTangent(1)");
  382. ExpectExecute("TestExpectFloatEquals(tangentData.x, 0.18)");
  383. ExpectExecute("TestExpectFloatEquals(tangentData.y, 0.28)");
  384. ExpectExecute("TestExpectFloatEquals(tangentData.z, 0.19)");
  385. ExpectExecute("TestExpectFloatEquals(tangentData.w, 0.29)");
  386. ExpectExecute("TestExpectIntegerEquals(meshVertexTangentData:GetTangentSetIndex(), 2)");
  387. ExpectExecute("TestExpectTrue(meshVertexTangentData:GetGenerationMethod(), MeshVertexTangentData.MikkT)");
  388. }
  389. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_AnimationData_AccessWorks)
  390. {
  391. ExpectExecute("animationData = AnimationData()");
  392. ExpectExecute("TestExpectTrue(animationData ~= nil)");
  393. ExpectExecute("MockGraphData.FillData(animationData)");
  394. ExpectExecute("TestExpectIntegerEquals(animationData:GetKeyFrameCount(), 3)");
  395. ExpectExecute("TestExpectFloatEquals(animationData:GetTimeStepBetweenFrames(), 4.0)");
  396. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(0).basisX.x, 1.0)");
  397. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(1).basisX.y, 2.0)");
  398. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(2).basisX.z, 3.0)");
  399. }
  400. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_BlendShapeAnimationData_AccessWorks)
  401. {
  402. ExpectExecute("blendShapeAnimationData = BlendShapeAnimationData()");
  403. ExpectExecute("TestExpectTrue(blendShapeAnimationData ~= nil)");
  404. ExpectExecute("MockGraphData.FillData(blendShapeAnimationData)");
  405. ExpectExecute("TestExpectTrue(blendShapeAnimationData:GetBlendShapeName() == 'mockBlendShapeName')");
  406. ExpectExecute("TestExpectIntegerEquals(blendShapeAnimationData:GetKeyFrameCount(), 3)");
  407. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(0), 1.0)");
  408. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(1), 2.0)");
  409. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(2), 3.0)");
  410. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetTimeStepBetweenFrames(), 4.0)");
  411. }
  412. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_BlendShapeData_AccessWorks)
  413. {
  414. ExpectExecute("blendShapeData = BlendShapeData()");
  415. ExpectExecute("TestExpectTrue(blendShapeData ~= nil)");
  416. ExpectExecute("MockGraphData.FillData(blendShapeData)");
  417. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedControlPointCount(), 3)");
  418. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetVertexCount(), 3)");
  419. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceCount(), 3)");
  420. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(0, 2), 2)");
  421. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(1, 0), 1)");
  422. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(2, 1), 0)");
  423. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(0), 1)");
  424. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(1), 2)");
  425. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(2), 0)");
  426. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(0), 2)");
  427. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(1), 0)");
  428. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(2), 1)");
  429. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).x, 1.0)");
  430. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).y, 2.0)");
  431. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).z, 3.0)");
  432. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).x, 2.0)");
  433. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).y, 3.0)");
  434. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).z, 4.0)");
  435. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).x, 3.0)");
  436. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).y, 4.0)");
  437. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).z, 5.0)");
  438. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).x, 0.1)");
  439. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).y, 0.2)");
  440. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).z, 0.3)");
  441. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).x, 0.2)");
  442. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).y, 0.3)");
  443. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).z, 0.4)");
  444. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).x, 0.3)");
  445. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).y, 0.4)");
  446. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).z, 0.5)");
  447. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(0), 0)");
  448. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(1), 1)");
  449. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(2), 2)");
  450. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(0), 1)");
  451. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(1), 2)");
  452. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(2), 0)");
  453. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(0), 2)");
  454. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(1), 0)");
  455. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(2), 1)");
  456. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 0).x, 0.9)");
  457. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 0).y, 0.8)");
  458. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 1).x, 0.7)");
  459. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 1).y, 0.7)");
  460. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 2).x, 0.6)");
  461. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 2).y, 0.6)");
  462. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).red, 0.1)");
  463. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).green, 0.2)");
  464. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).blue, 0.3)");
  465. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).alpha, 0.4)");
  466. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).red, 0.2)");
  467. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).green, 0.3)");
  468. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).blue, 0.4)");
  469. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).alpha, 0.5)");
  470. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).red, 0.3)");
  471. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).green, 0.4)");
  472. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).blue, 0.5)");
  473. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).alpha, 0.6)");
  474. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).x, 0.1)");
  475. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).y, 0.2)");
  476. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).z, 0.3)");
  477. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).w, 0.4)");
  478. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).x, 0.2)");
  479. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).y, 0.3)");
  480. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).z, 0.4)");
  481. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).w, 0.5)");
  482. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).x, 0.3)");
  483. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).y, 0.4)");
  484. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).z, 0.5)");
  485. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).w, 0.6)");
  486. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).x, 0.0)");
  487. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).y, 0.1)");
  488. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).z, 0.2)");
  489. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).x, 0.1)");
  490. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).y, 0.2)");
  491. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).z, 0.3)");
  492. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).x, 0.2)");
  493. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).y, 0.3)");
  494. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).z, 0.4)");
  495. }
  496. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_MaterialData_AccessWorks)
  497. {
  498. ExpectExecute("materialData = MaterialData()");
  499. ExpectExecute("TestExpectTrue(materialData ~= nil)");
  500. ExpectExecute("TestExpectTrue(materialData:IsNoDraw() == false)");
  501. ExpectExecute("TestExpectTrue(materialData:GetUseColorMap() == false)");
  502. ExpectExecute("TestExpectTrue(materialData:GetUseMetallicMap() == false)");
  503. ExpectExecute("TestExpectTrue(materialData:GetUseRoughnessMap() == false)");
  504. ExpectExecute("TestExpectTrue(materialData:GetUseEmissiveMap() == false)");
  505. ExpectExecute("TestExpectTrue(materialData:GetUseAOMap() == false)");
  506. ExpectExecute("MockGraphData.FillData(materialData)");
  507. ExpectExecute("TestExpectTrue(materialData:IsNoDraw())");
  508. ExpectExecute("TestExpectTrue(materialData:GetUseColorMap())");
  509. ExpectExecute("TestExpectTrue(materialData:GetUseMetallicMap())");
  510. ExpectExecute("TestExpectTrue(materialData:GetUseRoughnessMap())");
  511. ExpectExecute("TestExpectTrue(materialData:GetUseEmissiveMap())");
  512. ExpectExecute("TestExpectTrue(materialData:GetUseAOMap())");
  513. ExpectExecute("TestExpectFloatEquals(materialData:GetMetallicFactor(), 0.123)");
  514. ExpectExecute("TestExpectFloatEquals(materialData:GetRoughnessFactor(), 0.456)");
  515. ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveIntensity(), 0.789)");
  516. ExpectExecute("TestExpectFloatEquals(materialData:GetOpacity(), 0.7)");
  517. ExpectExecute("TestExpectFloatEquals(materialData:GetShininess(), 1.23)");
  518. ExpectExecute("TestExpectTrue(materialData:GetMaterialName() == 'TestMaterialName')");
  519. ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().x, 0.1)");
  520. ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().y, 0.2)");
  521. ExpectExecute("TestExpectFloatEquals(materialData:GetBaseColor().z, 0.3)");
  522. ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().x, 0.3)");
  523. ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().y, 0.4)");
  524. ExpectExecute("TestExpectFloatEquals(materialData:GetDiffuseColor().z, 0.5)");
  525. ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().x, 0.4)");
  526. ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().y, 0.5)");
  527. ExpectExecute("TestExpectFloatEquals(materialData:GetEmissiveColor().z, 0.6)");
  528. ExpectExecute("TestExpectIntegerEquals(materialData:GetUniqueId(), 102938)");
  529. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.AmbientOcclusion) == 'ambientocclusion')");
  530. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Bump) == 'bump')");
  531. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Diffuse) == 'diffuse')");
  532. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Emissive) == 'emissive')");
  533. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Metallic) == 'metallic')");
  534. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Normal) == 'normal')");
  535. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Roughness) == 'roughness')");
  536. ExpectExecute("TestExpectTrue(materialData:GetTexture(MaterialData.Specular) == 'specular')");
  537. }
  538. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_BoneData_AccessWorks)
  539. {
  540. ExpectExecute("boneData = BoneData()");
  541. ExpectExecute("TestExpectTrue(boneData ~= nil)");
  542. ExpectExecute("MockGraphData.FillData(boneData)");
  543. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(0).x, 1.0)");
  544. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(0).y, 0.0)");
  545. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(0).z, 0.0)");
  546. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(0).w, 0.0)");
  547. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(1).x, 0.0)");
  548. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(1).y, 2.0)");
  549. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(1).z, 0.0)");
  550. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(1).w, 0.0)");
  551. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(2).x, 0.0)");
  552. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(2).y, 0.0)");
  553. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(2).z, 3.0)");
  554. ExpectExecute("TestExpectFloatEquals(boneData:GetWorldTransform():GetRow(2).w, 0.0)");
  555. }
  556. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_CustomPropertyData_AccessWorks)
  557. {
  558. ExpectExecute("customPropertyData = CustomPropertyData()");
  559. ExpectExecute("TestExpectTrue(customPropertyData ~= nil)");
  560. ExpectExecute("MockGraphData.FillData(customPropertyData)");
  561. ExpectExecute("TestExpectTrue(customPropertyData:GetPropertyMap():At('a_string') == 'the string')");
  562. ExpectExecute("TestExpectTrue(customPropertyData:GetPropertyMap():At('a_bool') == true)");
  563. ExpectExecute("TestExpectIntegerEquals(customPropertyData:GetPropertyMap():At('a_int32'), -32)");
  564. ExpectExecute("TestExpectIntegerEquals(customPropertyData:GetPropertyMap():At('a_uint64'), 64)");
  565. ExpectExecute("TestExpectFloatEquals(customPropertyData:GetPropertyMap():At('a_float'), 12.34)");
  566. ExpectExecute("TestExpectFloatEquals(customPropertyData:GetPropertyMap():At('a_double'), 0.1234)");
  567. }
  568. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_RootBoneData_AccessWorks)
  569. {
  570. ExpectExecute("rootBoneData = RootBoneData()");
  571. ExpectExecute("TestExpectTrue(rootBoneData ~= nil)");
  572. ExpectExecute("MockGraphData.FillData(rootBoneData)");
  573. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(0).x, 2.0)");
  574. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(0).y, 0.0)");
  575. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(0).z, 0.0)");
  576. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(0).w, 0.0)");
  577. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(1).x, 0.0)");
  578. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(1).y, 3.0)");
  579. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(1).z, 0.0)");
  580. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(1).w, 0.0)");
  581. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(2).x, 0.0)");
  582. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(2).y, 0.0)");
  583. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(2).z, 4.0)");
  584. ExpectExecute("TestExpectFloatEquals(rootBoneData:GetWorldTransform():GetRow(2).w, 0.0)");
  585. }
  586. TEST_F(GraphDataBehaviorScriptTest, SceneGraph_TransformData_AccessWorks)
  587. {
  588. ExpectExecute("transformData = TransformData()");
  589. ExpectExecute("TestExpectTrue(transformData ~= nil)");
  590. ExpectExecute("MockGraphData.FillData(transformData)");
  591. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(0).x, 1.0)");
  592. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(0).y, 0.0)");
  593. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(0).z, 0.0)");
  594. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(0).w, 0.0)");
  595. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(1).x, 0.0)");
  596. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(1).y, 2.0)");
  597. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(1).z, 0.0)");
  598. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(1).w, 0.0)");
  599. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(2).x, 0.0)");
  600. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(2).y, 0.0)");
  601. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(2).z, 3.0)");
  602. ExpectExecute("TestExpectFloatEquals(transformData.transform:GetRow(2).w, 0.0)");
  603. }
  604. }
  605. }
  606. }