| using NUnit.Framework; |
| using UnityEngine.EventSystems; |
| using UnityEngine; |
| using UnityEngine.UI; |
| using UnityEngine.TestTools; |
| using System.IO; |
| using UnityEditor; |
|
|
| class GridLayoutGroupTests : IPrebuildSetup |
| { |
| const string kPrefabPath = "Assets/Resources/GridLayoutGroupTests.prefab"; |
| private GameObject m_PrefabRoot; |
| private GridLayoutGroup m_LayoutGroup; |
|
|
| public void Setup() |
| { |
| #if UNITY_EDITOR |
| var rootGO = new GameObject("rootGo"); |
|
|
| var canvasGO = new GameObject("Canvas"); |
| canvasGO.transform.SetParent(rootGO.transform); |
| Canvas canvas = canvasGO.AddComponent<Canvas>(); |
| canvas.referencePixelsPerUnit = 100; |
|
|
| var groupGO = new GameObject("Group", typeof(RectTransform), typeof(GridLayoutGroup)); |
| groupGO.transform.SetParent(canvas.transform); |
|
|
| var rectTransform = groupGO.GetComponent<RectTransform>(); |
| rectTransform.sizeDelta = new Vector2(400, 500); |
| rectTransform.anchoredPosition = new Vector2(0, 0); |
| rectTransform.pivot = new Vector2(0, 0); |
|
|
| var layoutGroup = groupGO.GetComponent<GridLayoutGroup>(); |
| layoutGroup.spacing = new Vector2(10, 0); |
| layoutGroup.startCorner = GridLayoutGroup.Corner.UpperLeft; |
| layoutGroup.cellSize = new Vector2(90, 50); |
| layoutGroup.constraint = GridLayoutGroup.Constraint.Flexible; |
| layoutGroup.startAxis = GridLayoutGroup.Axis.Horizontal; |
| layoutGroup.childAlignment = TextAnchor.UpperLeft; |
| layoutGroup.enabled = false; |
| layoutGroup.enabled = true; |
|
|
| var el1 = new GameObject("Element1"); |
| el1.transform.SetParent(rectTransform); |
| var element1 = el1.AddComponent<LayoutElement>(); |
| (el1.transform as RectTransform).pivot = Vector2.zero; |
| element1.minWidth = 5; |
| element1.minHeight = 10; |
| element1.preferredWidth = 100; |
| element1.preferredHeight = 50; |
| element1.flexibleWidth = 0; |
| element1.flexibleHeight = 0; |
| element1.enabled = true; |
|
|
| var el2 = new GameObject("Element2"); |
| el2.transform.SetParent(rectTransform); |
| var element2 = el2.AddComponent<LayoutElement>(); |
| (el2.transform as RectTransform).pivot = Vector2.zero; |
| element2.minWidth = 10; |
| element2.minHeight = 5; |
| element2.preferredWidth = -1; |
| element2.preferredHeight = -1; |
| element2.flexibleWidth = 0; |
| element2.flexibleHeight = 0; |
| element2.enabled = true; |
|
|
| var el3 = new GameObject("Element3"); |
| el3.transform.SetParent(rectTransform); |
| var element3 = el3.AddComponent<LayoutElement>(); |
| (el3.transform as RectTransform).pivot = Vector2.zero; |
| element3.minWidth = 60; |
| element3.minHeight = 25; |
| element3.preferredWidth = 120; |
| element3.preferredHeight = 40; |
| element3.flexibleWidth = 1; |
| element3.flexibleHeight = 1; |
| element3.enabled = true; |
|
|
| var el4 = new GameObject("Element4"); |
| el4.transform.SetParent(rectTransform); |
| var element4 = el4.AddComponent<LayoutElement>(); |
| (el4.transform as RectTransform).pivot = Vector2.zero; |
| element4.minWidth = 60; |
| element4.minHeight = 25; |
| element4.preferredWidth = 120; |
| element4.preferredHeight = 40; |
| element4.flexibleWidth = 1; |
| element4.flexibleHeight = 1; |
| element4.enabled = true; |
|
|
| var el5 = new GameObject("Element5"); |
| el5.transform.SetParent(rectTransform); |
| var element5 = el5.AddComponent<LayoutElement>(); |
| (el5.transform as RectTransform).pivot = Vector2.zero; |
| element5.minWidth = 60; |
| element5.minHeight = 25; |
| element5.preferredWidth = 120; |
| element5.preferredHeight = 40; |
| element5.flexibleWidth = 1; |
| element5.flexibleHeight = 1; |
| element5.enabled = true; |
|
|
| var el6 = new GameObject("Element6"); |
| el6.transform.SetParent(rectTransform); |
| var element6 = el6.AddComponent<LayoutElement>(); |
| (el6.transform as RectTransform).pivot = Vector2.zero; |
| element6.minWidth = 60; |
| element6.minHeight = 25; |
| element6.preferredWidth = 120; |
| element6.preferredHeight = 40; |
| element6.flexibleWidth = 1; |
| element6.flexibleHeight = 1; |
| element6.enabled = true; |
|
|
| var el7 = new GameObject("Element7"); |
| el7.transform.SetParent(rectTransform); |
| var element7 = el7.AddComponent<LayoutElement>(); |
| (el7.transform as RectTransform).pivot = Vector2.zero; |
| element7.minWidth = 60; |
| element7.minHeight = 25; |
| element7.preferredWidth = 120; |
| element7.preferredHeight = 40; |
| element7.flexibleWidth = 1; |
| element7.flexibleHeight = 1; |
| element7.enabled = true; |
|
|
| var el8 = new GameObject("Element8"); |
| el8.transform.SetParent(rectTransform); |
| var element8 = el8.AddComponent<LayoutElement>(); |
| (el8.transform as RectTransform).pivot = Vector2.zero; |
| element8.minWidth = 60; |
| element8.minHeight = 25; |
| element8.preferredWidth = 120; |
| element8.preferredHeight = 40; |
| element8.flexibleWidth = 1; |
| element8.flexibleHeight = 1; |
| element8.enabled = true; |
|
|
| var el9 = new GameObject("Element9"); |
| el9.transform.SetParent(rectTransform); |
| var element9 = el9.AddComponent<LayoutElement>(); |
| (el9.transform as RectTransform).pivot = Vector2.zero; |
| element9.minWidth = 500; |
| element9.minHeight = 300; |
| element9.preferredWidth = 1000; |
| element9.preferredHeight = 600; |
| element9.flexibleWidth = 1; |
| element9.flexibleHeight = 1; |
| element9.enabled = true; |
| element9.ignoreLayout = true; |
|
|
| if (!Directory.Exists("Assets/Resources/")) |
| Directory.CreateDirectory("Assets/Resources/"); |
|
|
| PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath); |
| GameObject.DestroyImmediate(rootGO); |
| #endif |
| } |
|
|
| [SetUp] |
| public void TestSetup() |
| { |
| m_PrefabRoot = GameObject.Instantiate(Resources.Load("GridLayoutGroupTests")) as GameObject; |
| m_LayoutGroup = m_PrefabRoot.GetComponentInChildren<GridLayoutGroup>(); |
| } |
|
|
| [TearDown] |
| public void TearDown() |
| { |
| GameObject.DestroyImmediate(m_PrefabRoot); |
| m_LayoutGroup = null; |
| } |
|
|
| [OneTimeTearDown] |
| public void OneTimeTearDown() |
| { |
| #if UNITY_EDITOR |
| AssetDatabase.DeleteAsset(kPrefabPath); |
| #endif |
| } |
|
|
| [Test] |
| public void TestFlexibleCalculateLayout() |
| { |
| m_LayoutGroup.constraint = GridLayoutGroup.Constraint.Flexible; |
| Assert.AreEqual(GridLayoutGroup.Constraint.Flexible, m_LayoutGroup.constraint); |
| LayoutRebuilder.ForceRebuildLayoutImmediate(m_LayoutGroup.GetComponent<RectTransform>()); |
|
|
| Assert.AreEqual(90, m_LayoutGroup.minWidth); |
| Assert.AreEqual(100, m_LayoutGroup.minHeight); |
| Assert.AreEqual(290, m_LayoutGroup.preferredWidth); |
| Assert.AreEqual(100, m_LayoutGroup.preferredHeight); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleWidth); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleHeight); |
|
|
| Vector2[] expectedPositions = |
| { |
| new Vector2(0, -50), |
| new Vector2(100, -50), |
| new Vector2(200, -50), |
| new Vector2(300, -50), |
| new Vector2(0, -100), |
| new Vector2(100, -100), |
| new Vector2(200, -100), |
| new Vector2(300, -100), |
| }; |
|
|
| Vector2 expectedSize = new Vector2(90, 50); |
|
|
| for (int i = 0; i < expectedPositions.Length; ++i) |
| { |
| var element = m_LayoutGroup.transform.Find("Element" + (i + 1)); |
| var rectTransform = element.GetComponent<RectTransform>(); |
|
|
| Assert.AreEqual(expectedPositions[i], rectTransform.anchoredPosition); |
| Assert.AreEqual(expectedSize, rectTransform.sizeDelta); |
| } |
| } |
|
|
| [Test] |
| public void TestHorizontallyContrainedCalculateLayoutHorizontal() |
| { |
| m_LayoutGroup.constraint = GridLayoutGroup.Constraint.FixedColumnCount; |
| m_LayoutGroup.constraintCount = 2; |
| Assert.AreEqual(GridLayoutGroup.Constraint.FixedColumnCount, m_LayoutGroup.constraint); |
| Assert.AreEqual(2, m_LayoutGroup.constraintCount); |
| LayoutRebuilder.ForceRebuildLayoutImmediate(m_LayoutGroup.GetComponent<RectTransform>()); |
|
|
| Assert.AreEqual(190, m_LayoutGroup.minWidth); |
| Assert.AreEqual(200, m_LayoutGroup.minHeight); |
| Assert.AreEqual(190, m_LayoutGroup.preferredWidth); |
| Assert.AreEqual(200, m_LayoutGroup.preferredHeight); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleWidth); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleHeight); |
|
|
| Vector2[] expectedPositions = |
| { |
| new Vector2(0, -50), |
| new Vector2(100, -50), |
| new Vector2(0, -100), |
| new Vector2(100, -100), |
| new Vector2(0, -150), |
| new Vector2(100, -150), |
| new Vector2(0, -200), |
| new Vector2(100, -200), |
| }; |
|
|
| Vector2 expectedSize = new Vector2(90, 50); |
|
|
| for (int i = 0; i < expectedPositions.Length; ++i) |
| { |
| var element = m_LayoutGroup.transform.Find("Element" + (i + 1)); |
| var rectTransform = element.GetComponent<RectTransform>(); |
|
|
| Assert.AreEqual(expectedPositions[i], rectTransform.anchoredPosition); |
| Assert.AreEqual(expectedSize, rectTransform.sizeDelta); |
| } |
| } |
|
|
| [Test] |
| public void TestVerticallyContrainedCalculateLayoutHorizontal() |
| { |
| m_LayoutGroup.constraint = GridLayoutGroup.Constraint.FixedRowCount; |
| m_LayoutGroup.constraintCount = 2; |
| Assert.AreEqual(GridLayoutGroup.Constraint.FixedRowCount, m_LayoutGroup.constraint); |
| Assert.AreEqual(2, m_LayoutGroup.constraintCount); |
| LayoutRebuilder.ForceRebuildLayoutImmediate(m_LayoutGroup.GetComponent<RectTransform>()); |
|
|
| Assert.AreEqual(390, m_LayoutGroup.minWidth); |
| Assert.AreEqual(100, m_LayoutGroup.minHeight); |
| Assert.AreEqual(390, m_LayoutGroup.preferredWidth); |
| Assert.AreEqual(100, m_LayoutGroup.preferredHeight); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleWidth); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleHeight); |
|
|
| Vector2[] expectedPositions = |
| { |
| new Vector2(0, -50), |
| new Vector2(100, -50), |
| new Vector2(200, -50), |
| new Vector2(300, -50), |
| new Vector2(0, -100), |
| new Vector2(100, -100), |
| new Vector2(200, -100), |
| new Vector2(300, -100), |
| }; |
|
|
| Vector2 expectedSize = new Vector2(90, 50); |
|
|
| for (int i = 0; i < expectedPositions.Length; ++i) |
| { |
| var element = m_LayoutGroup.transform.Find("Element" + (i + 1)); |
| var rectTransform = element.GetComponent<RectTransform>(); |
|
|
| Assert.AreEqual(expectedPositions[i], rectTransform.anchoredPosition); |
| Assert.AreEqual(expectedSize, rectTransform.sizeDelta); |
| } |
| } |
|
|
| [Test] |
| public void TestHorizontallyContrainedCalculateLayoutVertical() |
| { |
| m_LayoutGroup.constraint = GridLayoutGroup.Constraint.FixedColumnCount; |
| m_LayoutGroup.constraintCount = 2; |
| m_LayoutGroup.startAxis = GridLayoutGroup.Axis.Vertical; |
| Assert.AreEqual(GridLayoutGroup.Constraint.FixedColumnCount, m_LayoutGroup.constraint); |
| Assert.AreEqual(2, m_LayoutGroup.constraintCount); |
| LayoutRebuilder.ForceRebuildLayoutImmediate(m_LayoutGroup.GetComponent<RectTransform>()); |
|
|
| Assert.AreEqual(190, m_LayoutGroup.minWidth); |
| Assert.AreEqual(200, m_LayoutGroup.minHeight); |
| Assert.AreEqual(190, m_LayoutGroup.preferredWidth); |
| Assert.AreEqual(200, m_LayoutGroup.preferredHeight); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleWidth); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleHeight); |
|
|
| Vector2[] expectedPositions = |
| { |
| new Vector2(0, -50), |
| new Vector2(0, -100), |
| new Vector2(0, -150), |
| new Vector2(0, -200), |
| new Vector2(100, -50), |
| new Vector2(100, -100), |
| new Vector2(100, -150), |
| new Vector2(100, -200), |
| }; |
|
|
| Vector2 expectedSize = new Vector2(90, 50); |
|
|
| for (int i = 0; i < expectedPositions.Length; ++i) |
| { |
| var element = m_LayoutGroup.transform.Find("Element" + (i + 1)); |
| var rectTransform = element.GetComponent<RectTransform>(); |
|
|
| Assert.AreEqual(expectedPositions[i], rectTransform.anchoredPosition); |
| Assert.AreEqual(expectedSize, rectTransform.sizeDelta); |
| } |
| } |
|
|
| [Test] |
| public void TestVerticallyContrainedCalculateLayoutVertical() |
| { |
| m_LayoutGroup.constraint = GridLayoutGroup.Constraint.FixedRowCount; |
| m_LayoutGroup.constraintCount = 2; |
| m_LayoutGroup.startAxis = GridLayoutGroup.Axis.Vertical; |
| m_LayoutGroup.startCorner = GridLayoutGroup.Corner.LowerRight; |
| Assert.AreEqual(GridLayoutGroup.Constraint.FixedRowCount, m_LayoutGroup.constraint); |
| Assert.AreEqual(2, m_LayoutGroup.constraintCount); |
| m_LayoutGroup.CalculateLayoutInputHorizontal(); |
| m_LayoutGroup.SetLayoutHorizontal(); |
| m_LayoutGroup.CalculateLayoutInputVertical(); |
| m_LayoutGroup.SetLayoutVertical(); |
|
|
| Assert.AreEqual(390, m_LayoutGroup.minWidth); |
| Assert.AreEqual(100, m_LayoutGroup.minHeight); |
| Assert.AreEqual(390, m_LayoutGroup.preferredWidth); |
| Assert.AreEqual(100, m_LayoutGroup.preferredHeight); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleWidth); |
| Assert.AreEqual(-1, m_LayoutGroup.flexibleHeight); |
|
|
| Vector2[] expectedPositions = |
| { |
| new Vector2(300, -100), |
| new Vector2(300, -50), |
| new Vector2(200, -100), |
| new Vector2(200, -50), |
| new Vector2(100, -100), |
| new Vector2(100, -50), |
| new Vector2(0, -100), |
| new Vector2(0, -50), |
| }; |
|
|
| Vector2 expectedSize = new Vector2(90, 50); |
|
|
| for (int i = 0; i < expectedPositions.Length; ++i) |
| { |
| var element = m_LayoutGroup.transform.Find("Element" + (i + 1)); |
| var rectTransform = element.GetComponent<RectTransform>(); |
|
|
| Assert.AreEqual(expectedPositions[i], rectTransform.anchoredPosition); |
| Assert.AreEqual(expectedSize, rectTransform.sizeDelta); |
| } |
| } |
| } |
|
|