123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- using System.Collections;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.IO;
- using UnityEditor;
- using System.Collections.Generic;
-
- public class DropdownTests : IPrebuildSetup
- {
- GameObject m_PrefabRoot;
- GameObject m_CameraGO;
-
- const string kPrefabPath = "Assets/Resources/DropdownPrefab.prefab";
-
- public void Setup()
- {
- #if UNITY_EDITOR
- var rootGO = new GameObject("rootGo");
- var canvasGO = new GameObject("Canvas", typeof(Canvas));
- var canvas = canvasGO.GetComponent<Canvas>();
- canvas.renderMode = RenderMode.WorldSpace;
- canvasGO.transform.SetParent(rootGO.transform);
-
- var dropdownGO = new GameObject("Dropdown", typeof(RectTransform), typeof(Dropdown));
- var dropdownTransform = dropdownGO.GetComponent<RectTransform>();
- dropdownTransform.SetParent(canvas.transform);
- dropdownTransform.anchoredPosition = Vector2.zero;
- var dropdown = dropdownGO.GetComponent<Dropdown>();
-
- var templateGO = new GameObject("Template", typeof(RectTransform));
- templateGO.SetActive(false);
- var templateTransform = templateGO.GetComponent<RectTransform>();
- templateTransform.SetParent(dropdownTransform);
-
- var itemGo = new GameObject("Item", typeof(RectTransform), typeof(Toggle));
- itemGo.transform.SetParent(templateTransform);
-
- dropdown.template = templateTransform;
-
- if (!Directory.Exists("Assets/Resources/"))
- Directory.CreateDirectory("Assets/Resources/");
-
- PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
- GameObject.DestroyImmediate(rootGO);
-
-
- // add a custom sorting layer before test. It doesn't seem to be serialized so no need to remove it after test
- SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
- SerializedProperty sortingLayers = tagManager.FindProperty("m_SortingLayers");
- sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
- var arrayElement = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
- foreach (SerializedProperty a in arrayElement)
- {
- switch (a.name)
- {
- case "name":
- a.stringValue = "test layer";
- break;
- case "uniqueID":
- a.intValue = 314159265;
- break;
- case "locked":
- a.boolValue = false;
- break;
- }
- }
- tagManager.ApplyModifiedProperties();
- #endif
- }
-
- [SetUp]
- public void TestSetup()
- {
- m_PrefabRoot = Object.Instantiate(Resources.Load("DropdownPrefab")) as GameObject;
- m_CameraGO = new GameObject("Camera", typeof(Camera));
- }
-
- // test for case 958281 - [UI] Dropdown list does not copy the parent canvas layer when the panel is opened
- [UnityTest]
- public IEnumerator Dropdown_Canvas()
- {
- var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
- var rootCanvas = m_PrefabRoot.GetComponentInChildren<Canvas>();
- rootCanvas.sortingLayerName = "test layer";
- dropdown.Show();
- yield return null;
- var dropdownList = dropdown.transform.Find("Dropdown List");
- var dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
- Assert.AreEqual(rootCanvas.sortingLayerID, dropdownListCanvas.sortingLayerID, "Sorting layers should match");
- }
-
- // test for case 1343542 - [UI] Child Canvas' Sorting Layer is changed to the same value as the parent
- [UnityTest]
- public IEnumerator Dropdown_Canvas_Already_Exists()
- {
- var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
- var rootCanvas = m_PrefabRoot.GetComponentInChildren<Canvas>();
- var templateCanvas = dropdown.transform.Find("Template").gameObject.AddComponent<Canvas>();
- templateCanvas.overrideSorting = true;
- templateCanvas.sortingLayerName = "test layer";
- dropdown.Show();
- yield return null;
- var dropdownList = dropdown.transform.Find("Dropdown List");
- var dropdownListCanvas = dropdownList.GetComponentInChildren<Canvas>();
- Assert.AreNotEqual(rootCanvas.sortingLayerName, dropdownListCanvas.sortingLayerName, "Sorting layers should not match");
- }
-
- // test for case 935649 - open dropdown menus become unresponsive when disabled and reenabled
- [UnityTest]
- public IEnumerator Dropdown_Disable()
- {
- var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
- dropdown.Show();
- dropdown.gameObject.SetActive(false);
- yield return null;
- var dropdownList = dropdown.transform.Find("Dropdown List");
- Assert.IsNull(dropdownList);
- }
-
- [UnityTest]
- public IEnumerator Dropdown_ResetAndClear()
- {
- var options = new List<string> { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
- var dropdown = m_PrefabRoot.GetComponentInChildren<Dropdown>();
-
- // generate a first dropdown
- dropdown.ClearOptions();
- dropdown.AddOptions(options);
- dropdown.value = 3;
- yield return null;
-
-
- // clear it and generate a new one
- dropdown.ClearOptions();
- yield return null;
-
- // check is the value is 0
- Assert.IsTrue(dropdown.value == 0);
- }
-
- [TearDown]
- public void TearDown()
- {
- Object.DestroyImmediate(m_PrefabRoot);
- GameObject.DestroyImmediate(m_CameraGO);
- }
-
- [OneTimeTearDown]
- public void OneTimeTearDown()
- {
- #if UNITY_EDITOR
- AssetDatabase.DeleteAsset(kPrefabPath);
-
- SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
- SerializedProperty sortingLayers = tagManager.FindProperty("m_SortingLayers");
- sortingLayers.DeleteArrayElementAtIndex(sortingLayers.arraySize);
- tagManager.ApplyModifiedProperties();
- #endif
- }
- }
|