Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. // add a custom sorting layer before test. It doesn't seem to be serialized so no need to remove it after test
  39. SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
  40. SerializedProperty sortingLayers = tagManager.FindProperty("m_SortingLayers");
  41. sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
  42. var arrayElement = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
  43. foreach (SerializedProperty a in arrayElement)
  44. {
  45. switch (a.name)
  46. {
  47. case "name":
  48. a.stringValue = "test layer";
  49. break;
  50. case "uniqueID":
  51. a.intValue = 314159265;
  52. break;
  53. case "locked":
  54. a.boolValue = false;
  55. break;
  56. }
  57. }
  58. tagManager.ApplyModifiedProperties();
  59. #endif
  60. }
  61. [SetUp]
  62. public void TestSetup()
  63. {
  64. m_PrefabRoot = Object.Instantiate(Resources.Load("DropdownPrefab")) as GameObject;
  65. m_CameraGO = new GameObject("Camera", typeof(Camera));
  66. }
  67. // test for case 958281 - [UI] Dropdown list does not copy the parent canvas layer when the panel is opened
  68. [UnityTest]
  69. public IEnumerator Dropdown_Canvas()
  70. {
  71. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  72. var rootCanvas = m_PrefabRoot.GetComponentInChildren<Canvas>();
  73. rootCanvas.sortingLayerName = "test layer";
  74. dropdown.Show();
  75. yield return null;
  76. var dropdownList = dropdown.transform.Find("Dropdown List");
  77. var dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
  78. Assert.AreEqual(rootCanvas.sortingLayerID, dropdownListCanvas.sortingLayerID, "Sorting layers should match");
  79. }
  80. // test for case 1343542 - [UI] Child Canvas' Sorting Layer is changed to the same value as the parent
  81. [UnityTest]
  82. public IEnumerator Dropdown_Canvas_Already_Exists()
  83. {
  84. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  85. var rootCanvas = m_PrefabRoot.GetComponentInChildren<Canvas>();
  86. var templateCanvas = dropdown.transform.Find("Template").gameObject.AddComponent<Canvas>();
  87. templateCanvas.overrideSorting = true;
  88. templateCanvas.sortingLayerName = "test layer";
  89. dropdown.Show();
  90. yield return null;
  91. var dropdownList = dropdown.transform.Find("Dropdown List");
  92. var dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
  93. Assert.AreNotEqual(rootCanvas.sortingLayerName, dropdownListCanvas.sortingLayerName, "Sorting layers should not match");
  94. }
  95. // test for case 935649 - open dropdown menus become unresponsive when disabled and reenabled
  96. [UnityTest]
  97. public IEnumerator Dropdown_Disable()
  98. {
  99. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  100. dropdown.Show();
  101. dropdown.gameObject.SetActive(false);
  102. yield return null;
  103. var dropdownList = dropdown.transform.Find("Dropdown List");
  104. Assert.IsNull(dropdownList);
  105. }
  106. [UnityTest]
  107. public IEnumerator Dropdown_ResetAndClear()
  108. {
  109. var options = new List<string> { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
  110. var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
  111. // generate a first dropdown
  112. dropdown.ClearOptions();
  113. dropdown.AddOptions(options);
  114. dropdown.value = 3;
  115. yield return null;
  116. // clear it and generate a new one
  117. dropdown.ClearOptions();
  118. yield return null;
  119. // check is the value is 0
  120. Assert.IsTrue(dropdown.value == 0);
  121. }
  122. [TearDown]
  123. public void TearDown()
  124. {
  125. Object.DestroyImmediate(m_PrefabRoot);
  126. GameObject.DestroyImmediate(m_CameraGO);
  127. }
  128. [OneTimeTearDown]
  129. public void OneTimeTearDown()
  130. {
  131. #if UNITY_EDITOR
  132. AssetDatabase.DeleteAsset(kPrefabPath);
  133. SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
  134. SerializedProperty sortingLayers = tagManager.FindProperty("m_SortingLayers");
  135. sortingLayers.DeleteArrayElementAtIndex(sortingLayers.arraySize);
  136. tagManager.ApplyModifiedProperties();
  137. #endif
  138. }
  139. }