LocalUserTest.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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 <LocalUserSystemComponent.h>
  9. #include <AzTest/AzTest.h>
  10. #include <AzCore/Memory/OSAllocator.h>
  11. #include <AzCore/Memory/SystemAllocator.h>
  12. #include <AzCore/std/smart_ptr/unique_ptr.h>
  13. #include <AzCore/UnitTest/TestTypes.h>
  14. class LocalUserTest
  15. : public UnitTest::LeakDetectionFixture
  16. {
  17. protected:
  18. void SetUp() override
  19. {
  20. LeakDetectionFixture::SetUp();
  21. m_localUserSystemComponent = AZStd::make_unique<LocalUser::LocalUserSystemComponent>();
  22. m_localUserSystemComponent->LocalUser::LocalUserRequestBus::Handler::BusConnect();
  23. }
  24. void TearDown() override
  25. {
  26. m_localUserSystemComponent->LocalUser::LocalUserRequestBus::Handler::BusDisconnect();
  27. m_localUserSystemComponent.reset();
  28. LeakDetectionFixture::TearDown();
  29. }
  30. private:
  31. AZStd::unique_ptr<LocalUser::LocalUserSystemComponent> m_localUserSystemComponent;
  32. };
  33. AzFramework::LocalUserId testUserIds[5] = {9, 99, 12345, 98765, 99999999};
  34. TEST_F(LocalUserTest, GetPrimaryLocalUserIdBeforeSet)
  35. {
  36. // No local user assigned to a local player slot yet
  37. ASSERT_TRUE(LocalUser::LocalUserRequests::GetPrimaryLocalUserId() == AzFramework::LocalUserIdNone);
  38. }
  39. TEST_F(LocalUserTest, SetThenGetPrimaryLocalUserId)
  40. {
  41. // Assign a local user id to local player slot 0
  42. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  43. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  44. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  45. testUserIds[0],
  46. LocalUser::LocalPlayerSlotPrimary);
  47. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary);
  48. ASSERT_TRUE(LocalUser::LocalUserRequests::GetPrimaryLocalUserId() == testUserIds[0]);
  49. }
  50. TEST_F(LocalUserTest, AssignLocalUserIdToLocalPlayerSlotAny)
  51. {
  52. // Assign a local user id to local player slot 0
  53. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  54. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  55. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  56. testUserIds[0],
  57. LocalUser::LocalPlayerSlotAny);
  58. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary);
  59. // Assign a local user id to local player slot 1
  60. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  61. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  62. testUserIds[1],
  63. LocalUser::LocalPlayerSlotAny);
  64. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 1);
  65. // Assign a local user id to local player slot 2
  66. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  67. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  68. testUserIds[2],
  69. LocalUser::LocalPlayerSlotAny);
  70. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 2);
  71. }
  72. TEST_F(LocalUserTest, AssignLocalUserIdToSpecificLocalPlayerSlot)
  73. {
  74. // Assign a local user id to local player slot 0
  75. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  76. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  77. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  78. testUserIds[0],
  79. LocalUser::LocalPlayerSlotPrimary);
  80. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary);
  81. // Assign a local user id to local player slot 1
  82. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  83. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  84. testUserIds[1],
  85. 1);
  86. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 1);
  87. // Assign a local user id to local player slot 3
  88. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  89. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  90. testUserIds[2],
  91. 3);
  92. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 3);
  93. // Try to assign another local user id to local player slot 1 which is occupied
  94. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  95. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  96. testUserIds[4],
  97. 1);
  98. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  99. // Try to assign a local user id to local player slot max
  100. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  101. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  102. testUserIds[4],
  103. LocalUser::LocalPlayerSlotMax);
  104. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  105. // Try to assign a local user id to local player slot none
  106. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  107. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  108. testUserIds[4],
  109. LocalUser::LocalPlayerSlotNone);
  110. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  111. // Assign a local user id to local player slot 2 which is still empty
  112. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  113. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  114. testUserIds[4],
  115. 2);
  116. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 2);
  117. }
  118. TEST_F(LocalUserTest, AssignMoreLocalUserIdsThanLocalPlayerSlots)
  119. {
  120. // Assign local user ids to local player slots 0 - 3
  121. for (int i = 0; i < LocalUser::LocalPlayerSlotMax; ++i)
  122. {
  123. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  124. testUserIds[i],
  125. LocalUser::LocalPlayerSlotAny);
  126. }
  127. // Try and assign another local user id now that all the slots are occupied
  128. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  129. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  130. &LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  131. testUserIds[4],
  132. LocalUser::LocalPlayerSlotAny);
  133. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  134. }
  135. TEST_F(LocalUserTest, RemoveLocalUserIdFromLocalPlayerSlot)
  136. {
  137. // Assign local user ids to local player slots 0 - 3
  138. for (int i = 0; i < LocalUser::LocalPlayerSlotMax; ++i)
  139. {
  140. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  141. testUserIds[i],
  142. LocalUser::LocalPlayerSlotAny);
  143. }
  144. // Remove the local user id that was assigned to local player slot 0
  145. AZ::u32 removedFromSlot = LocalUser::LocalPlayerSlotNone;
  146. LocalUser::LocalUserRequestBus::BroadcastResult(removedFromSlot,
  147. &LocalUser::LocalUserRequests::RemoveLocalUserIdFromLocalPlayerSlot,
  148. testUserIds[0]);
  149. ASSERT_TRUE(removedFromSlot == LocalUser::LocalPlayerSlotPrimary);
  150. // Remove a local user id that was not assigned to any local player slot
  151. LocalUser::LocalUserRequestBus::BroadcastResult(removedFromSlot,
  152. &LocalUser::LocalUserRequests::RemoveLocalUserIdFromLocalPlayerSlot,
  153. testUserIds[4]);
  154. ASSERT_TRUE(removedFromSlot == LocalUser::LocalPlayerSlotNone);
  155. // Remove the local user id that was assigned to local player slot 3
  156. LocalUser::LocalUserRequestBus::BroadcastResult(removedFromSlot,
  157. &LocalUser::LocalUserRequests::RemoveLocalUserIdFromLocalPlayerSlot,
  158. testUserIds[3]);
  159. ASSERT_TRUE(removedFromSlot == LocalUser::LocalPlayerSlotPrimary + 3);
  160. }
  161. TEST_F(LocalUserTest, GetLocalUserIdAssignedToLocalPlayerSlot)
  162. {
  163. // Assign local user ids to local player slots 0 - 3
  164. for (int i = 0; i < LocalUser::LocalPlayerSlotMax; ++i)
  165. {
  166. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  167. testUserIds[i],
  168. LocalUser::LocalPlayerSlotAny);
  169. }
  170. // Get the local user id that was assigned to local player slot 0
  171. AzFramework::LocalUserId localUserId = AzFramework::LocalUserIdNone;
  172. LocalUser::LocalUserRequestBus::BroadcastResult(localUserId,
  173. &LocalUser::LocalUserRequests::GetLocalUserIdAssignedToLocalPlayerSlot,
  174. LocalUser::LocalPlayerSlotPrimary);
  175. ASSERT_TRUE(localUserId == testUserIds[0]);
  176. // Get the local user id that was assigned to local player slot max
  177. LocalUser::LocalUserRequestBus::BroadcastResult(localUserId,
  178. &LocalUser::LocalUserRequests::RemoveLocalUserIdFromLocalPlayerSlot,
  179. LocalUser::LocalPlayerSlotMax);
  180. ASSERT_TRUE(localUserId == AzFramework::LocalUserIdNone);
  181. // Get the local user id that was assigned to local player slot none
  182. LocalUser::LocalUserRequestBus::BroadcastResult(localUserId,
  183. &LocalUser::LocalUserRequests::RemoveLocalUserIdFromLocalPlayerSlot,
  184. LocalUser::LocalPlayerSlotNone);
  185. ASSERT_TRUE(localUserId == AzFramework::LocalUserIdNone);
  186. // Get the local user id that was assigned to local player slot 3
  187. LocalUser::LocalUserRequestBus::BroadcastResult(localUserId,
  188. &LocalUser::LocalUserRequests::GetLocalUserIdAssignedToLocalPlayerSlot,
  189. 3);
  190. ASSERT_TRUE(localUserId == testUserIds[3]);
  191. }
  192. TEST_F(LocalUserTest, GetLocalPlayerSlotOccupiedByLocalUserId)
  193. {
  194. // Assign local user ids to local player slots 0 - 3
  195. for (int i = 0; i < LocalUser::LocalPlayerSlotMax; ++i)
  196. {
  197. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  198. testUserIds[i],
  199. LocalUser::LocalPlayerSlotAny);
  200. }
  201. // Get the local player slot occupied by the user id assigned first above
  202. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  203. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  204. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  205. testUserIds[0]);
  206. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary);
  207. // Get the local player slot occupied by LocalUserIdNone
  208. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  209. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  210. AzFramework::LocalUserIdNone);
  211. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  212. // Get the local player slot occupied by the user id assigned last above
  213. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  214. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  215. testUserIds[3]);
  216. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotPrimary + 3);
  217. }
  218. TEST_F(LocalUserTest, ClearAllLocalUserIdToLocalPlayerSlotAssignments)
  219. {
  220. // Assign local user ids to local player slots 0 - 3
  221. for (int i = 0; i < LocalUser::LocalPlayerSlotMax; ++i)
  222. {
  223. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::AssignLocalUserIdToLocalPlayerSlot,
  224. testUserIds[i],
  225. LocalUser::LocalPlayerSlotAny);
  226. }
  227. // Clear all local player slot assignments
  228. LocalUser::LocalUserRequestBus::Broadcast(&LocalUser::LocalUserRequests::ClearAllLocalUserIdToLocalPlayerSlotAssignments);
  229. // Get the local player slot occupied by the user id assigned first above
  230. AZ::u32 assignedSlot = LocalUser::LocalPlayerSlotNone;
  231. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  232. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  233. testUserIds[0]);
  234. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  235. // Get the local player slot occupied a local user id that was not assigned above
  236. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  237. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  238. testUserIds[4]);
  239. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  240. // Get the local player slot occupied by the user id assigned last above
  241. LocalUser::LocalUserRequestBus::BroadcastResult(assignedSlot,
  242. &LocalUser::LocalUserRequests::GetLocalPlayerSlotOccupiedByLocalUserId,
  243. testUserIds[3]);
  244. ASSERT_TRUE(assignedSlot == LocalUser::LocalPlayerSlotNone);
  245. }
  246. AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);