暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

VerticalLayoutGroupTests.cs 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System.IO;
  2. using System.Collections.Generic;
  3. using NUnit.Framework;
  4. using UnityEngine.EventSystems;
  5. using UnityEngine.TestTools;
  6. using UnityEditor;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. using UnityEngine.UI.Tests;
  10. namespace LayoutTests
  11. {
  12. public class VerticalLayoutGroupTests : IPrebuildSetup
  13. {
  14. GameObject m_PrefabRoot;
  15. const string kPrefabPath = "Assets/Resources/VerticalLayoutGroupPrefab.prefab";
  16. public void Setup()
  17. {
  18. #if UNITY_EDITOR
  19. var rootGO = new GameObject("rootGo");
  20. GameObject canvasGO = new GameObject("Canvas", typeof(RectTransform), typeof(Canvas));
  21. canvasGO.transform.SetParent(rootGO.transform);
  22. var canvas = canvasGO.GetComponent<Canvas>();
  23. canvas.referencePixelsPerUnit = 100;
  24. var groupGO = new GameObject("Group", typeof(RectTransform), typeof(VerticalLayoutGroup));
  25. groupGO.transform.SetParent(canvasGO.transform);
  26. var element1GO = new GameObject("Element1", typeof(RectTransform), typeof(LayoutElement));
  27. element1GO.transform.SetParent(groupGO.transform);
  28. var element2GO = new GameObject("Element2", typeof(RectTransform), typeof(LayoutElement));
  29. element2GO.transform.SetParent(groupGO.transform);
  30. var element3GO = new GameObject("Element3", typeof(RectTransform), typeof(LayoutElement));
  31. element3GO.transform.SetParent(groupGO.transform);
  32. VerticalLayoutGroup layoutGroup = groupGO.GetComponent<VerticalLayoutGroup>();
  33. layoutGroup.padding = new RectOffset(2, 4, 3, 5);
  34. layoutGroup.spacing = 1;
  35. layoutGroup.childForceExpandWidth = false;
  36. layoutGroup.childForceExpandHeight = false;
  37. layoutGroup.childControlWidth = true;
  38. layoutGroup.childControlHeight = true;
  39. var element1 = element1GO.GetComponent<LayoutElement>();
  40. element1.minWidth = 5;
  41. element1.minHeight = 10;
  42. element1.preferredWidth = 100;
  43. element1.preferredHeight = 50;
  44. element1.flexibleWidth = 0;
  45. element1.flexibleHeight = 0;
  46. element1.enabled = true;
  47. var element2 = element2GO.GetComponent<LayoutElement>();
  48. element2.minWidth = 10;
  49. element2.minHeight = 5;
  50. element2.preferredWidth = -1;
  51. element2.preferredHeight = -1;
  52. element2.flexibleWidth = 0;
  53. element2.flexibleHeight = 0;
  54. element2.enabled = true;
  55. var element3 = element3GO.GetComponent<LayoutElement>();
  56. element3.minWidth = 25;
  57. element3.minHeight = 15;
  58. element3.preferredWidth = 200;
  59. element3.preferredHeight = 80;
  60. element3.flexibleWidth = 1;
  61. element3.flexibleHeight = 1;
  62. element3.enabled = true;
  63. if (!Directory.Exists("Assets/Resources/"))
  64. Directory.CreateDirectory("Assets/Resources/");
  65. PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
  66. GameObject.DestroyImmediate(rootGO);
  67. #endif
  68. }
  69. [SetUp]
  70. public void TestSetup()
  71. {
  72. m_PrefabRoot = Object.Instantiate(Resources.Load("VerticalLayoutGroupPrefab")) as GameObject;
  73. }
  74. [TearDown]
  75. public void TearDown()
  76. {
  77. Object.DestroyImmediate(m_PrefabRoot);
  78. }
  79. [OneTimeTearDown]
  80. public void OneTimeTearDown()
  81. {
  82. #if UNITY_EDITOR
  83. AssetDatabase.DeleteAsset(kPrefabPath);
  84. #endif
  85. }
  86. [Test]
  87. public void TestCalculateLayoutInputHorizontal()
  88. {
  89. var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>();
  90. layoutGroup.CalculateLayoutInputHorizontal();
  91. layoutGroup.SetLayoutHorizontal();
  92. layoutGroup.CalculateLayoutInputVertical();
  93. layoutGroup.SetLayoutVertical();
  94. Assert.AreEqual(31, layoutGroup.minWidth);
  95. Assert.AreEqual(206, layoutGroup.preferredWidth);
  96. Assert.AreEqual(1, layoutGroup.flexibleWidth);
  97. }
  98. [Test]
  99. public void TestCalculateLayoutInputVertical()
  100. {
  101. var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>();
  102. layoutGroup.CalculateLayoutInputHorizontal();
  103. layoutGroup.SetLayoutHorizontal();
  104. layoutGroup.CalculateLayoutInputVertical();
  105. layoutGroup.SetLayoutVertical();
  106. Assert.AreEqual(40, layoutGroup.minHeight);
  107. Assert.AreEqual(145, layoutGroup.preferredHeight);
  108. Assert.AreEqual(1, layoutGroup.flexibleHeight);
  109. }
  110. [Test]
  111. public void TestCalculateLayoutVertical()
  112. {
  113. var parentGO = m_PrefabRoot.transform.GetChild(0).GetChild(0);
  114. var element1GO = parentGO.GetChild(0);
  115. var element1Trans = element1GO.GetComponent<RectTransform>();
  116. var element2GO = parentGO.GetChild(1);
  117. var element2Trans = element2GO.GetComponent<RectTransform>();
  118. var element3GO = parentGO.GetChild(2);
  119. var element3Trans = element3GO.GetComponent<RectTransform>();
  120. var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>();
  121. layoutGroup.CalculateLayoutInputHorizontal();
  122. layoutGroup.SetLayoutHorizontal();
  123. layoutGroup.CalculateLayoutInputVertical();
  124. layoutGroup.SetLayoutVertical();
  125. Assert.AreEqual(-19.4f, element1Trans.anchoredPosition.y, 0.1f);
  126. Assert.AreEqual(-39.4f, element2Trans.anchoredPosition.y, 0.1f);
  127. Assert.AreEqual(-68.9f, element3Trans.anchoredPosition.y, 0.1f);
  128. }
  129. [Test]
  130. public void TestCalculateLayoutVerticalReversed()
  131. {
  132. var parentGO = m_PrefabRoot.transform.GetChild(0).GetChild(0);
  133. var element1GO = parentGO.GetChild(0);
  134. var element1Trans = element1GO.GetComponent<RectTransform>();
  135. var element2GO = parentGO.GetChild(1);
  136. var element2Trans = element2GO.GetComponent<RectTransform>();
  137. var element3GO = parentGO.GetChild(2);
  138. var element3Trans = element3GO.GetComponent<RectTransform>();
  139. var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>();
  140. layoutGroup.reverseArrangement = true;
  141. layoutGroup.CalculateLayoutInputHorizontal();
  142. layoutGroup.SetLayoutHorizontal();
  143. layoutGroup.CalculateLayoutInputVertical();
  144. layoutGroup.SetLayoutVertical();
  145. //Assert.AreEqual(-78.6f, element1Trans.anchoredPosition.y, 0.1f);
  146. Assert.AreEqual(-58.6f, element2Trans.anchoredPosition.y, 0.1f);
  147. Assert.AreEqual(-29.1f, element3Trans.anchoredPosition.y, 0.1f);
  148. }
  149. }
  150. }