UserInterfaceTests.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. using UnityEngine;
  2. using UnityEngine.TestTools;
  3. using NUnit.Framework;
  4. using System.Collections;
  5. using UnityEngine.UI;
  6. using UnityEngine.SceneManagement;
  7. using UnityEditor;
  8. using UnityEditor.SceneManagement;
  9. public class UserInterfaceTests
  10. {
  11. GameObject gameManagerPrefab;
  12. GameObject inGameMenuPrefab;
  13. string asteroidsScenePath;
  14. LoadSceneParameters loadSceneParameters;
  15. [SetUp]
  16. public void Setup()
  17. {
  18. GameManager.InitializeTestingEnvironment(true, false, false, false, false);
  19. loadSceneParameters = new LoadSceneParameters(LoadSceneMode.Single, LocalPhysicsMode.None);
  20. Object asteroidsScene = ((GameObject)Resources.Load("TestsReferences")).GetComponent<TestsReferences>().asteroidsScene;
  21. asteroidsScenePath = AssetDatabase.GetAssetPath(asteroidsScene);
  22. gameManagerPrefab = ((GameObject)Resources.Load("TestsReferences", typeof(GameObject))).GetComponent<TestsReferences>().gameManagerPrefab;
  23. inGameMenuPrefab = ((GameObject)Resources.Load("TestsReferences", typeof(GameObject))).GetComponent<TestsReferences>().inGameMenuPrefab;
  24. }
  25. void ClearScene()
  26. {
  27. Transform[] objects = Object.FindObjectsOfType<RectTransform>();
  28. foreach (Transform obj in objects)
  29. {
  30. if (obj != null)
  31. Object.DestroyImmediate(obj.gameObject);
  32. }
  33. }
  34. [UnityTest]
  35. public IEnumerator _01_InGameMenuExistsInScene()
  36. {
  37. EditorSceneManager.LoadSceneInPlayMode(asteroidsScenePath, loadSceneParameters);
  38. yield return null;
  39. Assert.NotNull(Object.FindObjectOfType<InGameMenuController>());
  40. }
  41. [UnityTest]
  42. public IEnumerator _02_InGameMenuHasCorrectUIElements()
  43. {
  44. ClearScene();
  45. GameObject inGameMenu = Object.Instantiate(inGameMenuPrefab, Vector3.zero, Quaternion.identity);
  46. yield return null;
  47. Assert.NotNull(inGameMenu);
  48. Canvas canvas = inGameMenu.GetComponent<Canvas>();
  49. Assert.NotNull(canvas);
  50. Assert.NotNull(canvas.GetComponent<InGameMenuController>());
  51. Assert.NotNull(canvas.transform.GetChild(0));
  52. Assert.IsFalse(canvas.transform.GetChild(0).gameObject.activeInHierarchy);
  53. Assert.NotNull(canvas.transform.GetChild(1));
  54. Assert.IsTrue(canvas.transform.GetChild(1).gameObject.activeInHierarchy);
  55. Assert.NotNull(canvas.transform.GetChild(2));
  56. Assert.IsTrue(canvas.transform.GetChild(2).gameObject.activeInHierarchy);
  57. }
  58. [UnityTest]
  59. public IEnumerator _03_InGameMenuContainsButtons()
  60. {
  61. ClearScene();
  62. GameObject inGameMenu = Object.Instantiate(inGameMenuPrefab, Vector3.zero, Quaternion.identity);
  63. yield return null;
  64. Transform container = inGameMenu.transform.GetChild(0);
  65. Assert.NotNull(container.GetComponent<VerticalLayoutGroup>());
  66. // InGameMenu has the game title
  67. Assert.NotNull(container.GetChild(1).GetComponent<Image>());
  68. Assert.IsTrue(container.GetChild(1).GetComponent<Image>().sprite != null);
  69. // Pause menu has a resume button
  70. Assert.NotNull(container.GetChild(1).GetComponent<Button>());
  71. Assert.IsTrue(container.GetChild(1).name == "ResumeButton");
  72. Assert.IsTrue(container.GetChild(1).GetComponent<Button>().onClick.GetPersistentMethodName(0) == "ChangeMenuState");
  73. }
  74. [UnityTest]
  75. public IEnumerator _04_PauseMenuCanBeEnabledAndDisabled()
  76. {
  77. ClearScene();
  78. GameObject inGameMenu = Object.Instantiate(inGameMenuPrefab, Vector3.zero, Quaternion.identity);
  79. yield return null;
  80. InGameMenuController menuController = inGameMenu.GetComponent<InGameMenuController>();
  81. Assert.IsTrue(menuController.transform.GetChild(0).name == "PauseMenu");
  82. menuController.ChangeMenuState(true);
  83. Assert.IsTrue(menuController.transform.GetChild(0).gameObject.activeInHierarchy);
  84. Assert.IsTrue(menuController.transform.GetChild(1).gameObject.activeInHierarchy);
  85. menuController.ChangeMenuState(false);
  86. Assert.IsFalse(menuController.transform.GetChild(0).gameObject.activeInHierarchy);
  87. Assert.IsTrue(menuController.transform.GetChild(1).gameObject.activeInHierarchy);
  88. }
  89. [UnityTest]
  90. public IEnumerator _05_PauseMenuChangesGameManagerGameState()
  91. {
  92. EditorSceneManager.LoadSceneInPlayMode(asteroidsScenePath, loadSceneParameters);
  93. yield return null;
  94. InGameMenuController menuController = GameObject.Find("InGameMenu").GetComponent<InGameMenuController>();
  95. menuController.ChangeMenuState(true);
  96. Assert.IsTrue(GameManager.IsPaused);
  97. Assert.IsTrue(Time.timeScale == 0.0f);
  98. menuController.ChangeMenuState(false);
  99. Assert.IsFalse(GameManager.IsPaused);
  100. Assert.IsTrue(Time.timeScale == 1.0f);
  101. }
  102. [UnityTest]
  103. public IEnumerator _06_InGameScoreCounterChangesWhenScoreChanges()
  104. {
  105. EditorSceneManager.LoadSceneInPlayMode(asteroidsScenePath, loadSceneParameters);
  106. yield return null;
  107. Assert.NotNull(GameObject.Find("InGameMenu"));
  108. Canvas canvas = GameObject.Find("InGameMenu").GetComponent<Canvas>();
  109. Assert.NotNull(canvas.transform.GetChild(1));
  110. Text[] numbers = canvas.transform.GetChild(1).GetComponentsInChildren<Text>();
  111. Assert.IsTrue(numbers.Length == 7);
  112. GameManager.AddToScore(0);
  113. yield return new WaitForSeconds(0.5f);
  114. Assert.IsTrue(numbers[0].text == "0" && numbers[1].text == "0" && numbers[2].text == "0" && numbers[3].text == "1" && numbers[4].text == "0" && numbers[5].text == "0" && numbers[6].text == "0");
  115. }
  116. [UnityTest]
  117. public IEnumerator _07_InGameMenuLivesControllerPlaysAnimationsWhenLifeCountIsChanged()
  118. {
  119. ClearScene();
  120. GameObject inGameMenu = Object.Instantiate(inGameMenuPrefab, Vector3.zero, Quaternion.identity);
  121. Transform livesTransform = inGameMenu.transform.GetChild(2);
  122. Animator[] lives = livesTransform.GetComponentsInChildren<Animator>();
  123. Assert.IsTrue(lives.Length == 3);
  124. yield return null;
  125. livesTransform.GetComponent<LifeCounter>().SetLives(2);
  126. yield return null;
  127. int i;
  128. // Going from 3 to 2 lives, therefore 1 "remove" animation should play
  129. for (i = 0; i < lives.Length; i++)
  130. {
  131. if (i >= 2)
  132. {
  133. Assert.IsTrue(lives[i].enabled == true);
  134. Assert.IsTrue(lives[i].GetCurrentAnimatorStateInfo(0).IsName("RemoveLife"));
  135. }
  136. else
  137. {
  138. Assert.IsTrue(lives[i].enabled == false);
  139. }
  140. }
  141. yield return new WaitForSeconds(0.5f);
  142. for (i = 0; i < lives.Length; i++)
  143. Assert.IsTrue(lives[i].enabled == false);
  144. livesTransform.GetComponent<LifeCounter>().SetLives(0);
  145. yield return null;
  146. // Going from 2 to 0 lives, therefore 2 "remove" animations should play
  147. for (i = 0; i < lives.Length; i++)
  148. {
  149. if (i < 2)
  150. {
  151. Assert.IsTrue(lives[i].enabled == true);
  152. Assert.IsTrue(lives[i].GetCurrentAnimatorStateInfo(0).IsName("RemoveLife"));
  153. }
  154. else
  155. {
  156. Assert.IsTrue(lives[i].enabled == false);
  157. }
  158. }
  159. yield return new WaitForSeconds(0.5f);
  160. for (i = 0; i < lives.Length; i++)
  161. Assert.IsTrue(lives[i].enabled == false);
  162. livesTransform.GetComponent<LifeCounter>().SetLives(3);
  163. yield return null;
  164. // Going from 0 to 3 lives, therefore 3 "recover" animations should play
  165. for (i = 0; i < lives.Length; i++)
  166. {
  167. Assert.IsTrue(lives[i].enabled == true);
  168. Assert.IsTrue(lives[i].GetCurrentAnimatorStateInfo(0).IsName("RecoverLife"));
  169. }
  170. }
  171. }