DropdownTests.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System.Collections;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. using UnityEngine.TestTools;
  5. using NUnit.Framework;
  6. using System.IO;
  7. using UnityEditor;
  8. using System.Collections.Generic;
  9. public class DropdownTests : IPrebuildSetup
  10. {
  11. GameObject m_PrefabRoot;
  12. GameObject m_CameraGO;
  13. const string kPrefabPath = "Assets/Resources/DropdownPrefab.prefab";
  14. public void Setup()
  15. {
  16. #if UNITY_EDITOR
  17. var rootGO = new GameObject("rootGo");
  18. var canvasGO = new GameObject("Canvas", typeof(Canvas));
  19. var canvas = canvasGO.GetComponent<Canvas>();
  20. canvas.renderMode = RenderMode.WorldSpace;
  21. canvasGO.transform.SetParent(rootGO.transform);
  22. var dropdownGO = new GameObject("Dropdown", typeof(RectTransform), typeof(Dropdown));
  23. var dropdownTransform = dropdownGO.GetComponent<RectTransform>();
  24. dropdownTransform.SetParent(canvas.transform);
  25. dropdownTransform.anchoredPosition = Vector2.zero;
  26. var dropdown = dropdownGO.GetComponent<Dropdown>();
  27. var templateGO = new GameObject("Template", typeof(RectTransform));
  28. templateGO.SetActive(false);
  29. var templateTransform = templateGO.GetComponent<RectTransform>();
  30. templateTransform.SetParent(dropdownTransform);
  31. var itemGo = new GameObject("Item", typeof(RectTransform), typeof(Toggle));
  32. itemGo.transform.SetParent(templateTransform);
  33. dropdown.template = templateTransform;
  34. if (!Directory.Exists("Assets/Resources/"))
  35. Directory.CreateDirectory("Assets/Resources/");
  36. PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
  37. GameObject.DestroyImmediate(rootGO);
  38. #endif
  39. }
  40. [SetUp]
  41. public void TestSetup()
  42. {
  43. m_PrefabRoot = Object.Instantiate(Resources.Load("DropdownPrefab")) as GameObject;
  44. m_CameraGO = new GameObject("Camera", typeof(Camera));
  45. #if UNITY_EDITOR
  46. // add a custom sorting layer before test. It doesn't seem to be serialized so no need to remove it after test
  47. SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
  48. SerializedProperty sortingLayers = tagManager.FindProperty("m_SortingLayers");
  49. sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
  50. var arrayElement = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
  51. foreach (SerializedProperty a in arrayElement)
  52. {
  53. switch (a.name)
  54. {
  55. case "name":
  56. a.stringValue = "test layer";
  57. break;
  58. case "uniqueID":
  59. a.intValue = 314159265;
  60. break;
  61. case "locked":
  62. a.boolValue = false;
  63. break;
  64. }
  65. }
  66. tagManager.ApplyModifiedProperties();
  67. #endif
  68. }
  69. // test for case 958281 - [UI] Dropdown list does not copy the parent canvas layer when the panel is opened
  70. [UnityTest]
  71. public IEnumerator Dropdown_Canvas()
  72. {
  73. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  74. var rootCanvas = m_PrefabRoot.GetComponentInChildren<Canvas>();
  75. dropdown.Show();
  76. yield return null;
  77. var dropdownList = dropdown.transform.Find("Dropdown List");
  78. var dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
  79. Assert.AreEqual(rootCanvas.sortingLayerID, dropdownListCanvas.sortingLayerID);
  80. dropdown.Hide();
  81. yield return new WaitForSeconds(1f); // hide is not instantaneous
  82. rootCanvas.sortingLayerName = "test layer";
  83. dropdown.Show();
  84. yield return null;
  85. dropdownList = dropdown.transform.Find("Dropdown List");
  86. dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
  87. Assert.AreEqual(rootCanvas.sortingLayerID, dropdownListCanvas.sortingLayerID);
  88. }
  89. // test for case 935649 - open dropdown menus become unresponsive when disabled and reenabled
  90. [UnityTest]
  91. public IEnumerator Dropdown_Disable()
  92. {
  93. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  94. dropdown.Show();
  95. dropdown.gameObject.SetActive(false);
  96. yield return null;
  97. var dropdownList = dropdown.transform.Find("Dropdown List");
  98. Assert.IsNull(dropdownList);
  99. }
  100. [UnityTest]
  101. public IEnumerator Dropdown_ResetAndClear()
  102. {
  103. var options = new List<string> { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
  104. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  105. // generate a first dropdown
  106. dropdown.ClearOptions();
  107. dropdown.AddOptions(options);
  108. dropdown.value = 3;
  109. yield return null;
  110. // clear it and generate a new one
  111. dropdown.ClearOptions();
  112. yield return null;
  113. // check is the value is 0
  114. Assert.IsTrue(dropdown.value == 0);
  115. }
  116. [TearDown]
  117. public void TearDown()
  118. {
  119. Object.DestroyImmediate(m_PrefabRoot);
  120. GameObject.DestroyImmediate(m_CameraGO);
  121. }
  122. [OneTimeTearDown]
  123. public void OneTimeTearDown()
  124. {
  125. #if UNITY_EDITOR
  126. AssetDatabase.DeleteAsset(kPrefabPath);
  127. #endif
  128. }
  129. }