123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- using System.Collections;
- using System.IO;
- using NUnit.Framework;
- using UnityEditor;
- using UnityEngine.EventSystems;
- using UnityEngine.TestTools;
- using UnityEngine.UI;
- using UnityEngine;
-
- public class ButtonTests : IPrebuildSetup
- {
- GameObject m_PrefabRoot;
- const string kPrefabPath = "Assets/Resources/ButtonPrefab.prefab";
-
- public void Setup()
- {
- #if UNITY_EDITOR
- var rootGO = new GameObject("rootGo");
- var canvasGO = new GameObject("Canvas", typeof(Canvas));
- canvasGO.transform.SetParent(rootGO.transform);
- var canvas = canvasGO.GetComponent<Canvas>();
- canvas.referencePixelsPerUnit = 100;
- GameObject eventSystemGO = new GameObject("EventSystem", typeof(EventSystem));
- eventSystemGO.transform.SetParent(rootGO.transform);
- GameObject TestButtonGO = new GameObject("TestButton", typeof(RectTransform), typeof(TestButton));
- TestButtonGO.transform.SetParent(canvasGO.transform);
-
- if (!Directory.Exists("Assets/Resources/"))
- Directory.CreateDirectory("Assets/Resources/");
-
- PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
- GameObject.DestroyImmediate(rootGO);
- #endif
- }
-
- [SetUp]
- public void TestSetup()
- {
- m_PrefabRoot = Object.Instantiate(Resources.Load("ButtonPrefab")) as GameObject;
- }
-
- [TearDown]
- public void TearDown()
- {
- GameObject.DestroyImmediate(m_PrefabRoot);
- }
-
- [OneTimeTearDown]
- public void OneTimeTearDown()
- {
- #if UNITY_EDITOR
- AssetDatabase.DeleteAsset(kPrefabPath);
- #endif
- }
-
- [Test]
- public void PressShouldCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnPointerClick(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.True(called);
- }
-
- [Test]
- public void PressInactiveShouldNotCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.enabled = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnPointerClick(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.False(called);
- }
-
- [Test]
- public void PressNotInteractableShouldNotCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.interactable = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnPointerClick(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.False(called);
- }
-
- [Test]
- public void SelectShouldHoldThePreviousStateAfterDisablingAndEnabling()
- {
- TestButton button = m_PrefabRoot.GetComponentInChildren<TestButton>();
- button.onClick.AddListener(() => {
- button.Select();
- button.enabled = false;
- });
- button.OnPointerClick(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.False(button.enabled, "Expected button to not be enabled");
- button.enabled = true;
- Assert.True(button.isStateSelected, "Expected selected state to be true");
- }
-
- [Test]
- public void SubmitShouldCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnSubmit(null);
- Assert.True(called);
- }
-
- [Test]
- public void SubmitInactiveShouldNotCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.enabled = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnSubmit(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.False(called);
- }
-
- [Test]
- public void SubmitNotInteractableShouldNotCallClickHandler()
- {
- Button button = m_PrefabRoot.GetComponentInChildren<Button>();
- bool called = false;
- button.interactable = false;
- button.onClick.AddListener(() => { called = true; });
- button.OnSubmit(new PointerEventData(m_PrefabRoot.GetComponentInChildren<EventSystem>()) { button = PointerEventData.InputButton.Left });
- Assert.False(called);
- }
-
- [UnityTest]
- public IEnumerator SubmitShouldTransitionToPressedStateAndBackToNormal()
- {
- TestButton button = m_PrefabRoot.GetComponentInChildren<TestButton>();
- Assert.True(button.IsTransitionToNormal(0));
-
- button.OnSubmit(null);
- Assert.True(button.isStateNormal);
- Assert.True(button.IsTransitionToPressed(1));
- yield return new WaitWhile(() => button.StateTransitionCount == 2);
-
- // 3rd transition back to normal should have started
- Assert.True(button.IsTransitionToNormal(2));
- yield return null;
-
- Assert.True(button.isStateNormal);
- }
- }
|