152 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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);
 | |
|     }
 | |
| }
 |