No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ToggleGroupTests.cs 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using NUnit.Framework;
  7. using UnityEditor;
  8. using UnityEngine;
  9. using UnityEngine.EventSystems;
  10. using UnityEngine.TestTools;
  11. using UnityEngine.UI;
  12. using UnityEngine.UI.Tests;
  13. using Object = UnityEngine.Object;
  14. namespace ToggleTest
  15. {
  16. class ToggleGroupTests : IPrebuildSetup
  17. {
  18. const string kPrefabToggleGroupPath = "Assets/Resources/TestToggleGroup.prefab";
  19. protected GameObject m_PrefabRoot;
  20. protected List<Toggle> m_toggle = new List<Toggle>();
  21. protected static int nbToggleInGroup = 2;
  22. private TestableToggleGroup m_toggleGroup;
  23. public void Setup()
  24. {
  25. #if UNITY_EDITOR
  26. var rootGO = new GameObject("rootGo");
  27. GameObject canvasGO = new GameObject("Canvas", typeof(RectTransform), typeof(Canvas));
  28. canvasGO.transform.SetParent(rootGO.transform);
  29. var toggleGroupGO = new GameObject("ToggleGroup", typeof(RectTransform), typeof(TestableToggleGroup));
  30. toggleGroupGO.transform.SetParent(canvasGO.transform);
  31. toggleGroupGO.AddComponent(typeof(TestableToggleGroup));
  32. var toggle0GO = new GameObject("TestToggle0", typeof(RectTransform), typeof(Toggle), typeof(Image));
  33. toggle0GO.transform.SetParent(toggleGroupGO.transform);
  34. var toggle1GO = new GameObject("TestToggle1", typeof(RectTransform), typeof(Toggle), typeof(Image));
  35. toggle1GO.transform.SetParent(toggleGroupGO.transform);
  36. var toggle = toggle0GO.GetComponent<Toggle>();
  37. toggle.graphic = toggle0GO.GetComponent<Image>();
  38. toggle.graphic.canvasRenderer.SetColor(Color.white);
  39. var toggle1 = toggle1GO.GetComponent<Toggle>();
  40. toggle1.graphic = toggle1GO.GetComponent<Image>();
  41. toggle1.graphic.canvasRenderer.SetColor(Color.white);
  42. if (!Directory.Exists("Assets/Resources/"))
  43. Directory.CreateDirectory("Assets/Resources/");
  44. PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabToggleGroupPath);
  45. GameObject.DestroyImmediate(rootGO);
  46. #endif
  47. }
  48. [SetUp]
  49. public void TestSetup()
  50. {
  51. m_PrefabRoot = Object.Instantiate(Resources.Load("TestToggleGroup")) as GameObject;
  52. m_toggleGroup = m_PrefabRoot.GetComponentInChildren<TestableToggleGroup>();
  53. m_toggle.AddRange(m_PrefabRoot.GetComponentsInChildren<Toggle>());
  54. }
  55. [TearDown]
  56. public void TearDown()
  57. {
  58. m_toggle.Clear();
  59. m_toggleGroup = null;
  60. Object.DestroyImmediate(m_PrefabRoot);
  61. }
  62. [OneTimeTearDown]
  63. public void OneTimeTearDown()
  64. {
  65. #if UNITY_EDITOR
  66. AssetDatabase.DeleteAsset(kPrefabToggleGroupPath);
  67. #endif
  68. }
  69. [Test]
  70. public void TogglingOneShouldDisableOthersInGroup()
  71. {
  72. m_toggle[0].group = m_toggleGroup;
  73. m_toggle[1].group = m_toggleGroup;
  74. m_toggle[0].isOn = true;
  75. m_toggle[1].isOn = true;
  76. Assert.IsFalse(m_toggle[0].isOn);
  77. Assert.IsTrue(m_toggle[1].isOn);
  78. }
  79. [Test]
  80. public void DisallowSwitchOffShouldKeepToggleOnWhenClicking()
  81. {
  82. m_toggle[0].group = m_toggleGroup;
  83. m_toggle[1].group = m_toggleGroup;
  84. m_toggle[0].isOn = true;
  85. Assert.IsTrue(m_toggle[0].isOn);
  86. m_toggle[0].OnPointerClick(new PointerEventData(EventSystem.current) { button = PointerEventData.InputButton.Left });
  87. Assert.IsTrue(m_toggle[0].isOn);
  88. Assert.IsFalse(m_toggle[1].isOn);
  89. }
  90. [Test]
  91. public void DisallowSwitchOffShouldDisableToggleWhenClicking()
  92. {
  93. m_toggleGroup.allowSwitchOff = true;
  94. m_toggle[0].group = m_toggleGroup;
  95. m_toggle[1].group = m_toggleGroup;
  96. m_toggle[0].isOn = true;
  97. Assert.IsTrue(m_toggle[0].isOn);
  98. m_toggle[0].OnPointerClick(new PointerEventData(EventSystem.current) { button = PointerEventData.InputButton.Left });
  99. Assert.IsFalse(m_toggle[0].isOn);
  100. Assert.IsFalse(m_toggle[1].isOn);
  101. }
  102. [TestCase(0)]
  103. [TestCase(1)]
  104. public void ReEnablingGameObjectWithToggleGroupRetainsPreviouslySelectedToggle(int toggleIndex)
  105. {
  106. m_toggle[0].group = m_toggleGroup;
  107. m_toggle[1].group = m_toggleGroup;
  108. m_toggle[toggleIndex].isOn = true;
  109. m_PrefabRoot.SetActive(false);
  110. m_PrefabRoot.SetActive(true);
  111. Assert.IsTrue(m_toggle[toggleIndex].isOn);
  112. }
  113. [Test]
  114. public void ChangingToggleGroupUnregistersFromOriginalGroup()
  115. {
  116. m_toggle[0].group = m_toggleGroup;
  117. Assert.IsTrue(m_toggleGroup.ToggleListContains(m_toggle[0]));
  118. m_toggle[0].group = null;
  119. Assert.IsFalse(m_toggleGroup.ToggleListContains(m_toggle[0]));
  120. }
  121. [Test]
  122. public void DisabledToggleGroupDoesntControlChildren()
  123. {
  124. m_toggleGroup.enabled = false;
  125. m_toggle[0].group = m_toggleGroup;
  126. m_toggle[1].group = m_toggleGroup;
  127. m_toggle[0].isOn = true;
  128. m_toggle[1].isOn = true;
  129. Assert.IsTrue(m_toggle[0].isOn);
  130. Assert.IsTrue(m_toggle[1].isOn);
  131. m_toggleGroup.enabled = true;
  132. IEnumerable<Toggle> activeToggles = m_toggleGroup.ActiveToggles();
  133. Assert.IsTrue(activeToggles.Count() == 1);
  134. }
  135. }
  136. }