SceneGraphTests.cpp 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903
  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 <AzTest/AzTest.h>
  9. #include <AzCore/std/smart_ptr/shared_ptr.h>
  10. #include <AzCore/std/smart_ptr/make_shared.h>
  11. #include <AzCore/Debug/TraceMessageBus.h>
  12. #include <SceneAPI/SceneCore/Containers/SceneGraph.h>
  13. #include <SceneAPI/SceneCore/DataTypes/IGraphObject.h>
  14. #include <SceneAPI/SceneCore/Mocks/DataTypes/MockIGraphObject.h>
  15. namespace AZ
  16. {
  17. namespace SceneAPI
  18. {
  19. namespace Containers
  20. {
  21. //
  22. // Name
  23. //
  24. TEST(SceneGraphNameTest, ConstructorAndGetPath_MovedNameIsPath_PathIsEqualToGivenName)
  25. {
  26. const char* name = "test";
  27. SceneGraph::Name test(AZStd::string(name), 0);
  28. EXPECT_STREQ(name, test.GetPath());
  29. }
  30. TEST(SceneGraphNameTest, GetName_ValidOffset_ReturnsB)
  31. {
  32. const char* name = "A.B";
  33. SceneGraph::Name test(AZStd::string(name), 2);
  34. EXPECT_STREQ("B", test.GetName());
  35. }
  36. TEST(SceneGraphNameTest, ConstructorAndGetName_InvalidOffset_ReturnsEmptyStringAndDoesNotAssert)
  37. {
  38. const char* name = "A.B";
  39. SceneGraph::Name test(AZStd::string(name), 42);
  40. EXPECT_STREQ("", test.GetName());
  41. }
  42. TEST(SceneGraphNameTest, Constructor_BlankPath_GetPathAndGetNameReturnValidEmptyStrings)
  43. {
  44. SceneGraph::Name test(AZStd::string(""), 0);
  45. EXPECT_STREQ("", test.GetPath());
  46. EXPECT_STREQ("", test.GetName());
  47. }
  48. TEST(SceneGraphNameTest, Equality_IdenticalNames_NamesAreEqual)
  49. {
  50. const char* name = "A.B";
  51. SceneGraph::Name test1(AZStd::string(name), 2);
  52. SceneGraph::Name test2(AZStd::string(name), 2);
  53. EXPECT_TRUE(test1 == test2);
  54. EXPECT_FALSE(test1 != test2);
  55. }
  56. TEST(SceneGraphNameTest, Equality_DifferentOffsets_NamesAreNotEqual)
  57. {
  58. const char* name = "A.B.C";
  59. SceneGraph::Name test1(AZStd::string(name), 2);
  60. SceneGraph::Name test2(AZStd::string(name), 4);
  61. EXPECT_FALSE(test1 == test2);
  62. EXPECT_TRUE(test1 != test2);
  63. }
  64. TEST(SceneGraphNameTest, Equality_DifferentPaths_NamesAreNotEqual)
  65. {
  66. const char* name1 = "A.B";
  67. const char* name2 = "C.D";
  68. SceneGraph::Name test1(AZStd::string(name1), 2);
  69. SceneGraph::Name test2(AZStd::string(name2), 2);
  70. EXPECT_FALSE(test1 == test2);
  71. EXPECT_TRUE(test1 != test2);
  72. }
  73. TEST(SceneGraphNameTest, Equality_CompletelyDifferent_NamesAreNotEqual)
  74. {
  75. const char* name1 = "A.B";
  76. const char* name2 = "C.D.E";
  77. SceneGraph::Name test1(AZStd::string(name1), 2);
  78. SceneGraph::Name test2(AZStd::string(name2), 4);
  79. EXPECT_FALSE(test1 == test2);
  80. EXPECT_TRUE(test1 != test2);
  81. }
  82. //
  83. // SceneGraph
  84. //
  85. class SceneGraphTest
  86. : public ::testing::Test
  87. , public AZ::Debug::TraceMessageBus::Handler
  88. {
  89. public:
  90. void SetUp() override
  91. {
  92. BusConnect();
  93. }
  94. void TearDown() override
  95. {
  96. BusDisconnect();
  97. }
  98. bool OnPreAssert(const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override
  99. {
  100. m_assertTriggered = true;
  101. return true;
  102. }
  103. bool m_assertTriggered = false;
  104. };
  105. TEST_F(SceneGraphTest, Constructor_Default_HasRoot)
  106. {
  107. SceneGraph testSceneGraph;
  108. EXPECT_TRUE(testSceneGraph.GetRoot().IsValid());
  109. }
  110. TEST_F(SceneGraphTest, Find_NonExistantNode_IsNotValid)
  111. {
  112. SceneGraph testSceneGraph;
  113. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.Find("NonExistantNodeName");
  114. EXPECT_FALSE(testNodeIndex.IsValid());
  115. }
  116. // GetNodeCount
  117. TEST_F(SceneGraphTest, GetNodeCount_CountForEmptyGraph_Returns1)
  118. {
  119. SceneGraph testSceneGraph;
  120. size_t count = testSceneGraph.GetNodeCount();
  121. EXPECT_EQ(1, count);
  122. }
  123. //AddSibling
  124. TEST_F(SceneGraphTest, AddSibling_NodeValid_NodeIndexValid)
  125. {
  126. SceneGraph testSceneGraph;
  127. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  128. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  129. EXPECT_TRUE(testNodeIndex.IsValid());
  130. }
  131. TEST_F(SceneGraphTest, AddSibling_NodeHasSiblingAlready_NodeIndexValidAndNotFirstNode)
  132. {
  133. SceneGraph testSceneGraph;
  134. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  135. SceneGraph::NodeIndex firstNode = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  136. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  137. SceneGraph::NodeIndex secondNode = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject1", AZStd::move(testDataObject));
  138. EXPECT_TRUE(secondNode.IsValid());
  139. EXPECT_NE(firstNode, secondNode);
  140. }
  141. TEST_F(SceneGraphTest, AddSibling_NodeInvalid_NodeIndexIsNotValid)
  142. {
  143. SceneGraph testSceneGraph;
  144. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  145. SceneGraph::NodeIndex invalidNodeIndex = testSceneGraph.Find("NonExistantNodeName");
  146. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(invalidNodeIndex, "testObject", AZStd::move(testDataObject));
  147. EXPECT_FALSE(testNodeIndex.IsValid());
  148. }
  149. TEST_F(SceneGraphTest, AddSibling_RootNoData_NodeIndexValid)
  150. {
  151. SceneGraph testSceneGraph;
  152. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  153. EXPECT_TRUE(testNodeIndex.IsValid());
  154. }
  155. //AddChild (implementation depends on AddSibling)
  156. TEST_F(SceneGraphTest, AddChild_ParentValid_NodeIndexValid)
  157. {
  158. SceneGraph testSceneGraph;
  159. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  160. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  161. EXPECT_TRUE(testNodeIndex.IsValid());
  162. }
  163. TEST_F(SceneGraphTest, AddChild_ParentValidNoData_NodeIndexValid)
  164. {
  165. SceneGraph testSceneGraph;
  166. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject");
  167. EXPECT_TRUE(testNodeIndex.IsValid());
  168. }
  169. TEST_F(SceneGraphTest, AddChild_ParentHasChildAlready_NodeIndexValidNotEqualFirst)
  170. {
  171. SceneGraph testSceneGraph;
  172. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  173. SceneGraph::NodeIndex firstIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  174. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  175. SceneGraph::NodeIndex secondIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject1", AZStd::move(testDataObject));
  176. EXPECT_TRUE(secondIndex.IsValid());
  177. EXPECT_NE(firstIndex, secondIndex);
  178. }
  179. TEST_F(SceneGraphTest, AddChild_InvalidNameUsed_AssertTriggered)
  180. {
  181. SceneGraph testSceneGraph;
  182. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "Invalid.Name");
  183. EXPECT_TRUE(m_assertTriggered);
  184. }
  185. TEST_F(SceneGraphTest, AddChild_DuplicateNameUsed_AssertTriggered)
  186. {
  187. SceneGraph testSceneGraph;
  188. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject");
  189. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject");
  190. EXPECT_TRUE(m_assertTriggered);
  191. }
  192. TEST_F(SceneGraphTest, AddChild_EmptyNameUsed_AssertTriggered)
  193. {
  194. SceneGraph testSceneGraph;
  195. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "");
  196. EXPECT_TRUE(m_assertTriggered);
  197. }
  198. TEST_F(SceneGraphTest, AddChild_ParentIsEndPoint_AssertTriggered)
  199. {
  200. SceneGraph testSceneGraph;
  201. testSceneGraph.MakeEndPoint(testSceneGraph.GetRoot());
  202. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  203. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  204. EXPECT_TRUE(m_assertTriggered);
  205. }
  206. TEST_F(SceneGraphTest, AddChild_ParentInvalid_NodeIndexIsNotValid)
  207. {
  208. SceneGraph testSceneGraph;
  209. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  210. SceneGraph::NodeIndex invalidNodeIndex = testSceneGraph.Find("NonExistantNodeName");
  211. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(invalidNodeIndex, "testObject", AZStd::move(testDataObject));
  212. EXPECT_FALSE(testNodeIndex.IsValid());
  213. }
  214. //HasNodeContent
  215. TEST_F(SceneGraphTest, HasNodeContent_AddChildCalledwithData_NodeHasData)
  216. {
  217. SceneGraph testSceneGraph;
  218. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  219. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  220. EXPECT_TRUE(testSceneGraph.HasNodeContent(testNodeIndex));
  221. }
  222. TEST_F(SceneGraphTest, HasNodeContent_AddChildCalledwithNoData_NodeHasNoData)
  223. {
  224. SceneGraph testSceneGraph;
  225. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject");
  226. EXPECT_FALSE(testSceneGraph.HasNodeContent(testNodeIndex));
  227. }
  228. TEST_F(SceneGraphTest, HasNodeContent_AddSiblingCalledwithData_NodeHasData)
  229. {
  230. SceneGraph testSceneGraph;
  231. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  232. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  233. EXPECT_TRUE(testSceneGraph.HasNodeContent(testNodeIndex));
  234. }
  235. TEST_F(SceneGraphTest, HasNodeContent_AddSiblingCalledwithNoData_NodeHasNoData)
  236. {
  237. SceneGraph testSceneGraph;
  238. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  239. EXPECT_FALSE(testSceneGraph.HasNodeContent(testNodeIndex));
  240. }
  241. // IsNodeEndPoint
  242. TEST_F(SceneGraphTest, IsNodeEndPoint_NewNodesAreNotEndPoints_NodeIsNotAnEndPoint)
  243. {
  244. SceneGraph testSceneGraph;
  245. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  246. EXPECT_FALSE(testSceneGraph.IsNodeEndPoint(testNodeIndex));
  247. }
  248. //GetNodeContent
  249. TEST_F(SceneGraphTest, GetNodeContent_IntDataChildAddedToRoot_CanGetNodeData)
  250. {
  251. SceneGraph testSceneGraph;
  252. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>(1);
  253. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject", AZStd::move(testDataObject));
  254. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(testNodeIndex));
  255. ASSERT_NE(nullptr, storedValue);
  256. EXPECT_EQ(1, storedValue->m_id);
  257. }
  258. TEST_F(SceneGraphTest, GetNodeContent_NoData_NodeDataIsNullPtr)
  259. {
  260. SceneGraph testSceneGraph;
  261. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testObject");
  262. AZStd::shared_ptr<DataTypes::IGraphObject> storedValue = testSceneGraph.GetNodeContent(testNodeIndex);
  263. EXPECT_EQ(nullptr, storedValue);
  264. }
  265. //Find
  266. TEST_F(SceneGraphTest, Find_OnRootwithChild_NodeIndexIsCorrect)
  267. {
  268. SceneGraph testSceneGraph;
  269. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  270. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "TestObject", AZStd::move(testDataObject));
  271. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("TestObject");
  272. EXPECT_TRUE(foundIndex.IsValid());
  273. EXPECT_EQ(foundIndex, testNodeIndex);
  274. }
  275. TEST_F(SceneGraphTest, Find_OnRootwithChildwithChild_NodeIndexIsCorrect)
  276. {
  277. SceneGraph testSceneGraph;
  278. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  279. SceneGraph::NodeIndex firstChildNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "FirstChild", AZStd::move(testDataObject));
  280. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  281. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(firstChildNodeIndex, "FirstChildofFirstChild", AZStd::move(testDataObject));
  282. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("FirstChild.FirstChildofFirstChild");
  283. EXPECT_TRUE(foundIndex.IsValid());
  284. EXPECT_EQ(foundIndex, testNodeIndex);
  285. }
  286. TEST_F(SceneGraphTest, Find_OnRootwithSecondChild_NodeIndexIsCorrect)
  287. {
  288. SceneGraph testSceneGraph;
  289. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  290. testSceneGraph.AddChild(testSceneGraph.GetRoot(), "FirstChild", AZStd::move(testDataObject));
  291. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  292. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "SecondChild", AZStd::move(testDataObject));
  293. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("SecondChild");
  294. EXPECT_TRUE(foundIndex.IsValid());
  295. EXPECT_EQ(foundIndex, testNodeIndex);
  296. }
  297. TEST_F(SceneGraphTest, Find_OnNodewithSecondChildLookingForSecondChild_NodeIndexIsCorrect)
  298. {
  299. SceneGraph testSceneGraph;
  300. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  301. SceneGraph::NodeIndex testRootNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testRoot", AZStd::move(testDataObject));
  302. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  303. testSceneGraph.AddChild(testRootNodeIndex, "FirstChild", AZStd::move(testDataObject));
  304. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  305. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testRootNodeIndex, "SecondChild", AZStd::move(testDataObject));
  306. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find(testRootNodeIndex, "SecondChild");
  307. EXPECT_TRUE(foundIndex.IsValid());
  308. EXPECT_EQ(foundIndex, testNodeIndex);
  309. }
  310. TEST_F(SceneGraphTest, Find_ParentDoesNotHaveThisChild_NodeIndexIsNotValid)
  311. {
  312. SceneGraph testSceneGraph;
  313. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  314. SceneGraph::NodeIndex testRootNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testRoot", AZStd::move(testDataObject));
  315. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  316. SceneGraph::NodeIndex testRootNodeSiblingIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testRootSibling", AZStd::move(testDataObject));
  317. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  318. testSceneGraph.AddChild(testRootNodeIndex, "FirstChild", AZStd::move(testDataObject));
  319. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>();
  320. testSceneGraph.AddChild(testRootNodeIndex, "SecondChild", AZStd::move(testDataObject));
  321. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find(testRootNodeSiblingIndex, "SecondChild");
  322. EXPECT_FALSE(foundIndex.IsValid());
  323. }
  324. //SetContent
  325. TEST_F(SceneGraphTest, SetContent_EmptyNodeByReference_NewValueConfirmed)
  326. {
  327. SceneGraph testSceneGraph;
  328. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testNode");
  329. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>(1);
  330. bool result = testSceneGraph.SetContent(testNodeIndex, testDataObject);
  331. EXPECT_TRUE(result);
  332. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(testNodeIndex));
  333. ASSERT_NE(nullptr, storedValue);
  334. EXPECT_EQ(1, storedValue->m_id);
  335. }
  336. TEST_F(SceneGraphTest, SetContent_EmptyNodeByMove_NewValueConfirmed)
  337. {
  338. SceneGraph testSceneGraph;
  339. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testNode");
  340. bool result = testSceneGraph.SetContent(testNodeIndex, AZStd::make_shared<DataTypes::MockIGraphObject>(1));
  341. EXPECT_TRUE(result);
  342. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(testNodeIndex));
  343. ASSERT_NE(nullptr, storedValue);
  344. EXPECT_EQ(1, storedValue->m_id);
  345. }
  346. TEST_F(SceneGraphTest, SetContent_ExistingNodeByReference_NewFloatConfirmed)
  347. {
  348. SceneGraph testSceneGraph;
  349. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>(1);
  350. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testNode", AZStd::move(testDataObject));
  351. testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>(2);
  352. bool result = testSceneGraph.SetContent(testNodeIndex, testDataObject);
  353. EXPECT_TRUE(result);
  354. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(testNodeIndex));
  355. ASSERT_NE(nullptr, storedValue);
  356. EXPECT_EQ(2, storedValue->m_id);
  357. }
  358. TEST_F(SceneGraphTest, SetContent_ExistingNodeByMove_NewFloatConfirmed)
  359. {
  360. SceneGraph testSceneGraph;
  361. AZStd::shared_ptr<DataTypes::MockIGraphObject> testDataObject = AZStd::make_shared<DataTypes::MockIGraphObject>(1);
  362. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "testNode", AZStd::move(testDataObject));
  363. bool result = testSceneGraph.SetContent(testNodeIndex, AZStd::make_shared<DataTypes::MockIGraphObject>(2));
  364. EXPECT_TRUE(result);
  365. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(testNodeIndex));
  366. ASSERT_NE(nullptr, storedValue);
  367. EXPECT_EQ(2, storedValue->m_id);
  368. }
  369. // MakeEndPoint
  370. TEST_F(SceneGraphTest, MakeEndPoint_MarkNodeAsEndPoint_NodeIsAnEndPoint)
  371. {
  372. SceneGraph testSceneGraph;
  373. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  374. testSceneGraph.MakeEndPoint(testNodeIndex);
  375. EXPECT_TRUE(testSceneGraph.IsNodeEndPoint(testNodeIndex));
  376. }
  377. TEST_F(SceneGraphTest, MakeEndPoint_AddChildToEndPointNode_FailsToAddChild)
  378. {
  379. SceneGraph testSceneGraph;
  380. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  381. testSceneGraph.MakeEndPoint(testNodeIndex);
  382. testSceneGraph.AddChild(testNodeIndex, "testObject2");
  383. EXPECT_TRUE(m_assertTriggered);
  384. }
  385. TEST_F(SceneGraphTest, MakeEndPoint_AddSiblingToEndPointNode_SiblingAdded)
  386. {
  387. SceneGraph testSceneGraph;
  388. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddSibling(testSceneGraph.GetRoot(), "testObject");
  389. testSceneGraph.MakeEndPoint(testNodeIndex);
  390. SceneGraph::NodeIndex result = testSceneGraph.AddSibling(testNodeIndex, "testObject2");
  391. EXPECT_TRUE(result.IsValid());
  392. }
  393. //GetNodeName/Data These are testing use cases that haven't been covered
  394. TEST_F(SceneGraphTest, GetNodeName_NodeExists_ReturnsCorrectName)
  395. {
  396. SceneGraph testSceneGraph;
  397. AZStd::string expectedNodeName("TestNode");
  398. testSceneGraph.AddChild(testSceneGraph.GetRoot(), expectedNodeName.c_str());
  399. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find(expectedNodeName);
  400. ASSERT_TRUE(foundIndex.IsValid());
  401. const SceneGraph::Name& nodeName = testSceneGraph.GetNodeName(foundIndex);
  402. EXPECT_STREQ(expectedNodeName.c_str(), nodeName.GetPath());
  403. EXPECT_STREQ(expectedNodeName.c_str(), nodeName.GetName());
  404. }
  405. TEST_F(SceneGraphTest, GetNodeName_InvalidNode_Invalid)
  406. {
  407. SceneGraph testSceneGraph;
  408. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.Find("NonExistantNodeName");
  409. const SceneGraph::Name& nodeName = testSceneGraph.GetNodeName(testNodeIndex);
  410. EXPECT_STREQ("<Invalid>", nodeName.GetPath());
  411. EXPECT_STREQ("<Invalid>", nodeName.GetName());
  412. }
  413. // Clear
  414. TEST_F(SceneGraphTest, Clear_ClearningEmptyGraph_NoChangeToTheNodeCount)
  415. {
  416. SceneGraph testSceneGraph;
  417. testSceneGraph.Clear();
  418. EXPECT_EQ(1, testSceneGraph.GetNodeCount());
  419. }
  420. // IsValidName
  421. TEST_F(SceneGraphTest, IsValidName_NullPtrPassed_ReturnsFalse)
  422. {
  423. EXPECT_FALSE(SceneGraph::IsValidName(nullptr));
  424. }
  425. TEST_F(SceneGraphTest, IsValidName_EmptyStringGiven_ReturnsFalse)
  426. {
  427. AZStd::string emptyString;
  428. EXPECT_FALSE(SceneGraph::IsValidName(emptyString));
  429. EXPECT_FALSE(SceneGraph::IsValidName(emptyString.c_str()));
  430. }
  431. TEST_F(SceneGraphTest, IsValidName_ValidStringGiven_ReturnsTrue)
  432. {
  433. AZStd::string validString = "valid";
  434. EXPECT_TRUE(SceneGraph::IsValidName(validString));
  435. EXPECT_TRUE(SceneGraph::IsValidName(validString.c_str()));
  436. }
  437. TEST_F(SceneGraphTest, IsValidName_StringContainsInvalidCharacter_ReturnsFalse)
  438. {
  439. AZStd::string invalidString = "inva.lid";
  440. EXPECT_FALSE(SceneGraph::IsValidName(invalidString));
  441. EXPECT_FALSE(SceneGraph::IsValidName(invalidString.c_str()));
  442. }
  443. // tests run on a prearranged, more complex configuration
  444. class SceneGraphTests
  445. : public ::testing::Test
  446. {
  447. public:
  448. SceneGraphTests()
  449. {
  450. }
  451. protected:
  452. void SetUp()
  453. {
  454. /*---------------------------------------\
  455. | Root |
  456. | | | |
  457. | A B |
  458. | | /|\ |
  459. | C I J K |
  460. | / | \ \ |
  461. | D E F L |
  462. | / \ |
  463. | G H |
  464. \---------------------------------------*/
  465. //Build up the graph
  466. SceneGraph::NodeIndex testNodeIndex = testSceneGraph.AddChild(testSceneGraph.GetRoot(), "A", AZStd::make_shared<DataTypes::MockIGraphObject>(1));
  467. SceneGraph::NodeIndex indexA = testNodeIndex;
  468. SceneGraph::NodeIndex indexB = testSceneGraph.AddSibling(indexA, "B", AZStd::make_shared<DataTypes::MockIGraphObject>(2));
  469. testNodeIndex = testSceneGraph.AddChild(testNodeIndex, "C", AZStd::make_shared<DataTypes::MockIGraphObject>(3));
  470. testNodeIndex = testSceneGraph.AddChild(testNodeIndex, "D", AZStd::make_shared<DataTypes::MockIGraphObject>(4));
  471. SceneGraph::NodeIndex EIndex = testSceneGraph.AddSibling(testNodeIndex, "E", AZStd::make_shared<DataTypes::MockIGraphObject>(5));
  472. testNodeIndex = testSceneGraph.AddSibling(testNodeIndex, "F", AZStd::make_shared<DataTypes::MockIGraphObject>(6));
  473. testNodeIndex = testSceneGraph.AddChild(EIndex, "G", AZStd::make_shared<DataTypes::MockIGraphObject>(7));
  474. testNodeIndex = testSceneGraph.AddSibling(testNodeIndex, "H", AZStd::make_shared<DataTypes::MockIGraphObject>(8));
  475. testNodeIndex = testSceneGraph.AddChild(indexB, "I", AZStd::make_shared<DataTypes::MockIGraphObject>(9));
  476. testNodeIndex = testSceneGraph.AddChild(indexB, "J", AZStd::make_shared<DataTypes::MockIGraphObject>(10));
  477. testNodeIndex = testSceneGraph.AddChild(indexB, "K", AZStd::make_shared<DataTypes::MockIGraphObject>(11));
  478. testNodeIndex = testSceneGraph.AddChild(testNodeIndex, "L", AZStd::make_shared<DataTypes::MockIGraphObject>(12));
  479. }
  480. void TearDown()
  481. {
  482. }
  483. SceneGraph testSceneGraph;
  484. enum Constants : int
  485. {
  486. nodeValueA = 1,
  487. nodeValueB = 2,
  488. nodeValueC = 3,
  489. nodeValueD = 4,
  490. nodeValueE = 5,
  491. nodeValueF = 6,
  492. nodeValueG = 7,
  493. nodeValueH = 8,
  494. nodeValueI = 9,
  495. nodeValueJ = 10,
  496. nodeValueK = 11,
  497. nodeValueL = 12,
  498. totalNodeCount = 12 + 1 // +1 for the root node.
  499. };
  500. };
  501. //Find's
  502. TEST_F(SceneGraphTests, FindCharPointer_E_IsValid)
  503. {
  504. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E");
  505. EXPECT_TRUE(foundIndex.IsValid());
  506. }
  507. TEST_F(SceneGraphTests, FindString_E_IsValid)
  508. {
  509. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find(AZStd::string("A.C.E"));
  510. EXPECT_TRUE(foundIndex.IsValid());
  511. }
  512. TEST_F(SceneGraphTests, FindRootCharPointer_G_IsValid)
  513. {
  514. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E");
  515. foundIndex = testSceneGraph.Find(foundIndex, "G");
  516. EXPECT_TRUE(foundIndex.IsValid());
  517. }
  518. TEST_F(SceneGraphTests, FindRootString_G_IsValid)
  519. {
  520. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find(AZStd::string("A.C.E"));
  521. foundIndex = testSceneGraph.Find(foundIndex, AZStd::string("G"));
  522. EXPECT_TRUE(foundIndex.IsValid());
  523. }
  524. TEST_F(SceneGraphTests, FindRootCharPointer_Z_NotValid)
  525. {
  526. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E");
  527. foundIndex = testSceneGraph.Find(foundIndex, "Z");
  528. EXPECT_FALSE(foundIndex.IsValid());
  529. }
  530. //Node Find/GetNodeData integrity
  531. TEST_F(SceneGraphTests, GetNodeData_A_ValidValue)
  532. {
  533. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A");
  534. EXPECT_TRUE(foundIndex.IsValid());
  535. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  536. ASSERT_NE(nullptr, storedValue);
  537. EXPECT_EQ(nodeValueA, storedValue->m_id);
  538. }
  539. TEST_F(SceneGraphTests, GetNodeData_B_ValidValue)
  540. {
  541. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B");
  542. EXPECT_TRUE(foundIndex.IsValid());
  543. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  544. ASSERT_NE(nullptr, storedValue);
  545. EXPECT_EQ(nodeValueB, storedValue->m_id);
  546. }
  547. TEST_F(SceneGraphTests, GetNodeData_C_ValidValue)
  548. {
  549. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C");
  550. EXPECT_TRUE(foundIndex.IsValid());
  551. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  552. ASSERT_NE(nullptr, storedValue);
  553. EXPECT_EQ(nodeValueC, storedValue->m_id);
  554. }
  555. TEST_F(SceneGraphTests, GetNodeData_D_ValidValue)
  556. {
  557. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.D");
  558. EXPECT_TRUE(foundIndex.IsValid());
  559. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  560. ASSERT_NE(nullptr, storedValue);
  561. EXPECT_EQ(nodeValueD, storedValue->m_id);
  562. }
  563. TEST_F(SceneGraphTests, GetNodeData_E_ValidValue)
  564. {
  565. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E");
  566. EXPECT_TRUE(foundIndex.IsValid());
  567. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  568. ASSERT_NE(nullptr, storedValue);
  569. EXPECT_EQ(nodeValueE, storedValue->m_id);
  570. }
  571. TEST_F(SceneGraphTests, GetNodeData_F_ValidValue)
  572. {
  573. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.F");
  574. EXPECT_TRUE(foundIndex.IsValid());
  575. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  576. ASSERT_NE(nullptr, storedValue);
  577. EXPECT_EQ(nodeValueF, storedValue->m_id);
  578. }
  579. TEST_F(SceneGraphTests, GetNodeData_G_ValidValue)
  580. {
  581. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.G");
  582. EXPECT_TRUE(foundIndex.IsValid());
  583. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  584. ASSERT_NE(nullptr, storedValue);
  585. EXPECT_EQ(nodeValueG, storedValue->m_id);
  586. }
  587. TEST_F(SceneGraphTests, GetNodeData_H_ValidValue)
  588. {
  589. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.H");
  590. EXPECT_TRUE(foundIndex.IsValid());
  591. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  592. ASSERT_NE(nullptr, storedValue);
  593. EXPECT_EQ(nodeValueH, storedValue->m_id);
  594. }
  595. TEST_F(SceneGraphTests, GetNodeData_I_ValidValue)
  596. {
  597. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B.I");
  598. EXPECT_TRUE(foundIndex.IsValid());
  599. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  600. ASSERT_NE(nullptr, storedValue);
  601. EXPECT_EQ(nodeValueI, storedValue->m_id);
  602. }
  603. TEST_F(SceneGraphTests, GetNodeData_J_ValidValue)
  604. {
  605. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B.J");
  606. EXPECT_TRUE(foundIndex.IsValid());
  607. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  608. ASSERT_NE(nullptr, storedValue);
  609. EXPECT_EQ(nodeValueJ, storedValue->m_id);
  610. }
  611. TEST_F(SceneGraphTests, GetNodeData_K_ValidValue)
  612. {
  613. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B.K");
  614. EXPECT_TRUE(foundIndex.IsValid());
  615. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  616. ASSERT_NE(nullptr, storedValue);
  617. EXPECT_EQ(nodeValueK, storedValue->m_id);
  618. }
  619. TEST_F(SceneGraphTests, GetNodeData_L_ValidValue)
  620. {
  621. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B.K.L");
  622. EXPECT_TRUE(foundIndex.IsValid());
  623. AZStd::shared_ptr<DataTypes::MockIGraphObject> storedValue = azrtti_cast<DataTypes::MockIGraphObject*>(testSceneGraph.GetNodeContent(foundIndex));
  624. ASSERT_NE(nullptr, storedValue);
  625. EXPECT_EQ(nodeValueL, storedValue->m_id);
  626. }
  627. //Has Relations
  628. TEST_F(SceneGraphTests, HasNodeSibling_GHasSibling_True)
  629. {
  630. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.G");
  631. EXPECT_TRUE(testSceneGraph.HasNodeSibling(foundIndex));
  632. }
  633. TEST_F(SceneGraphTests, HasNodeSibling_HHasNoSibling_False)
  634. {
  635. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.H");
  636. EXPECT_FALSE(testSceneGraph.HasNodeSibling(foundIndex));
  637. }
  638. TEST_F(SceneGraphTests, HasNodeSibling_LHasNoSibling_False)
  639. {
  640. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("B.K.L");
  641. EXPECT_FALSE(testSceneGraph.HasNodeSibling(foundIndex));
  642. }
  643. TEST_F(SceneGraphTests, HasNodeChild_EHasChild_True)
  644. {
  645. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E");
  646. EXPECT_TRUE(testSceneGraph.HasNodeChild(foundIndex));
  647. }
  648. TEST_F(SceneGraphTests, HasNodeChild_GHasNoChild_False)
  649. {
  650. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.G");
  651. EXPECT_FALSE(testSceneGraph.HasNodeChild(foundIndex));
  652. }
  653. TEST_F(SceneGraphTests, HasNodeParent_GHasParent_True)
  654. {
  655. SceneGraph::NodeIndex foundIndex = testSceneGraph.Find("A.C.E.G");
  656. EXPECT_TRUE(testSceneGraph.HasNodeParent(foundIndex));
  657. }
  658. TEST_F(SceneGraphTests, HasNodeParent_RootHasNoParent_False)
  659. {
  660. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetRoot();
  661. EXPECT_FALSE(testSceneGraph.HasNodeParent(foundIndex));
  662. }
  663. //GetNodeRelations
  664. TEST_F(SceneGraphTests, GetNodeParent_G_ReturnsE)
  665. {
  666. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A.C.E.G");
  667. SceneGraph::NodeIndex targetIndex = testSceneGraph.Find("A.C.E");
  668. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeParent(sourceIndex);
  669. EXPECT_EQ(targetIndex, foundIndex);
  670. }
  671. TEST_F(SceneGraphTests, GetNodeParent_RootNoParent_NotValid)
  672. {
  673. SceneGraph::NodeIndex sourceIndex = testSceneGraph.GetRoot();
  674. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeParent(sourceIndex);
  675. EXPECT_FALSE(foundIndex.IsValid());
  676. }
  677. TEST_F(SceneGraphTests, GetNodeSibling_GHasSibling_ReturnsH)
  678. {
  679. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A.C.E.G");
  680. SceneGraph::NodeIndex targetIndex = testSceneGraph.Find("A.C.E.H");
  681. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeSibling(sourceIndex);
  682. EXPECT_EQ(targetIndex, foundIndex);
  683. }
  684. TEST_F(SceneGraphTests, GetNodeSibling_HEndOfList_NotValid)
  685. {
  686. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A.C.E.H");
  687. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeSibling(sourceIndex);
  688. EXPECT_FALSE(foundIndex.IsValid());
  689. }
  690. TEST_F(SceneGraphTests, GetNodeSibling_LNoSiblings_NotValid)
  691. {
  692. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("B.K.L");
  693. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeSibling(sourceIndex);
  694. EXPECT_FALSE(foundIndex.IsValid());
  695. }
  696. TEST_F(SceneGraphTests, GetNodeChild_EHasChild_ReturnsG)
  697. {
  698. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A.C.E");
  699. SceneGraph::NodeIndex targetIndex = testSceneGraph.Find("A.C.E.G");
  700. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeChild(sourceIndex);
  701. EXPECT_TRUE(foundIndex.IsValid());
  702. EXPECT_EQ(targetIndex, foundIndex);
  703. }
  704. TEST_F(SceneGraphTests, GetNodeChild_GNoChildren_NotValid)
  705. {
  706. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A.C.E.G");
  707. SceneGraph::NodeIndex foundIndex = testSceneGraph.GetNodeChild(sourceIndex);
  708. EXPECT_FALSE(foundIndex.IsValid());
  709. }
  710. TEST_F(SceneGraphTests, GetNodeChild_ConvertToHierarchConvertToNodeIndex_ProducedIterator)
  711. {
  712. SceneGraph::NodeIndex sourceIndex = testSceneGraph.Find("A");
  713. SceneGraph::HierarchyStorageConstData::iterator storageIterator = testSceneGraph.ConvertToHierarchyIterator(sourceIndex);
  714. SceneGraph::NodeIndex nodeIndex = testSceneGraph.ConvertToNodeIndex(storageIterator);
  715. SceneGraph::NodeIndex testIndex = sourceIndex;
  716. EXPECT_EQ(nodeIndex, testIndex);
  717. }
  718. // GetNodeCount - continued
  719. TEST_F(SceneGraphTests, GetNodeCount_GetCountOfFilledTree_ReturnsNumberOfNodes)
  720. {
  721. EXPECT_EQ(totalNodeCount, testSceneGraph.GetNodeCount());
  722. }
  723. // Clear - continued
  724. TEST_F(SceneGraphTests, Clear_ClearFilledTree_ClearedWithDefaultAdded)
  725. {
  726. testSceneGraph.Clear();
  727. EXPECT_EQ(1, testSceneGraph.GetNodeCount());
  728. EXPECT_TRUE(testSceneGraph.GetRoot().IsValid());
  729. EXPECT_STREQ("", testSceneGraph.GetNodeName(testSceneGraph.GetRoot()).GetPath());
  730. EXPECT_EQ(nullptr, testSceneGraph.GetNodeContent(testSceneGraph.GetRoot()));
  731. }
  732. /*
  733. The following APIs are not covered in this test implementation
  734. inline NodeIndex ConvertToNodeIndex(HierarchyStorageConstData::iterator iterator) const;
  735. inline NodeIndex ConvertToNodeIndex(NameStorageConstData::iterator iterator) const;
  736. inline NodeIndex ConvertToNodeIndex(ContentStorageData::iterator iterator) const;
  737. inline NodeIndex ConvertToNodeIndex(ContentStorageConstData::iterator iterator) const;
  738. inline HierarchyStorageConstData GetHierarchyStorage() const;
  739. inline NameStorageConstData GetNameStorage() const;
  740. inline ContentStorageData GetContentStorage();
  741. inline ContentStorageConstData GetContentStorage() const;
  742. */
  743. }
  744. }
  745. }