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.
177 lines
6.8 KiB
177 lines
6.8 KiB
using System.IO; |
|
using System.Collections.Generic; |
|
using NUnit.Framework; |
|
using UnityEngine.EventSystems; |
|
using UnityEngine.TestTools; |
|
using UnityEditor; |
|
using UnityEngine; |
|
using UnityEngine.UI; |
|
using UnityEngine.UI.Tests; |
|
|
|
namespace LayoutTests |
|
{ |
|
public class VerticalLayoutGroupTests : IPrebuildSetup |
|
{ |
|
GameObject m_PrefabRoot; |
|
const string kPrefabPath = "Assets/Resources/VerticalLayoutGroupPrefab.prefab"; |
|
|
|
public void Setup() |
|
{ |
|
#if UNITY_EDITOR |
|
var rootGO = new GameObject("rootGo"); |
|
GameObject canvasGO = new GameObject("Canvas", typeof(RectTransform), typeof(Canvas)); |
|
canvasGO.transform.SetParent(rootGO.transform); |
|
|
|
var canvas = canvasGO.GetComponent<Canvas>(); |
|
canvas.referencePixelsPerUnit = 100; |
|
|
|
var groupGO = new GameObject("Group", typeof(RectTransform), typeof(VerticalLayoutGroup)); |
|
groupGO.transform.SetParent(canvasGO.transform); |
|
|
|
var element1GO = new GameObject("Element1", typeof(RectTransform), typeof(LayoutElement)); |
|
element1GO.transform.SetParent(groupGO.transform); |
|
|
|
var element2GO = new GameObject("Element2", typeof(RectTransform), typeof(LayoutElement)); |
|
element2GO.transform.SetParent(groupGO.transform); |
|
|
|
var element3GO = new GameObject("Element3", typeof(RectTransform), typeof(LayoutElement)); |
|
element3GO.transform.SetParent(groupGO.transform); |
|
|
|
VerticalLayoutGroup layoutGroup = groupGO.GetComponent<VerticalLayoutGroup>(); |
|
layoutGroup.padding = new RectOffset(2, 4, 3, 5); |
|
layoutGroup.spacing = 1; |
|
layoutGroup.childForceExpandWidth = false; |
|
layoutGroup.childForceExpandHeight = false; |
|
layoutGroup.childControlWidth = true; |
|
layoutGroup.childControlHeight = true; |
|
|
|
var element1 = element1GO.GetComponent<LayoutElement>(); |
|
element1.minWidth = 5; |
|
element1.minHeight = 10; |
|
element1.preferredWidth = 100; |
|
element1.preferredHeight = 50; |
|
element1.flexibleWidth = 0; |
|
element1.flexibleHeight = 0; |
|
element1.enabled = true; |
|
|
|
var element2 = element2GO.GetComponent<LayoutElement>(); |
|
element2.minWidth = 10; |
|
element2.minHeight = 5; |
|
element2.preferredWidth = -1; |
|
element2.preferredHeight = -1; |
|
element2.flexibleWidth = 0; |
|
element2.flexibleHeight = 0; |
|
element2.enabled = true; |
|
|
|
var element3 = element3GO.GetComponent<LayoutElement>(); |
|
element3.minWidth = 25; |
|
element3.minHeight = 15; |
|
element3.preferredWidth = 200; |
|
element3.preferredHeight = 80; |
|
element3.flexibleWidth = 1; |
|
element3.flexibleHeight = 1; |
|
element3.enabled = true; |
|
|
|
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("VerticalLayoutGroupPrefab")) as GameObject; |
|
} |
|
|
|
[TearDown] |
|
public void TearDown() |
|
{ |
|
Object.DestroyImmediate(m_PrefabRoot); |
|
} |
|
|
|
[OneTimeTearDown] |
|
public void OneTimeTearDown() |
|
{ |
|
#if UNITY_EDITOR |
|
AssetDatabase.DeleteAsset(kPrefabPath); |
|
#endif |
|
} |
|
|
|
[Test] |
|
public void TestCalculateLayoutInputHorizontal() |
|
{ |
|
var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>(); |
|
layoutGroup.CalculateLayoutInputHorizontal(); |
|
layoutGroup.SetLayoutHorizontal(); |
|
layoutGroup.CalculateLayoutInputVertical(); |
|
layoutGroup.SetLayoutVertical(); |
|
|
|
Assert.AreEqual(31, layoutGroup.minWidth); |
|
Assert.AreEqual(206, layoutGroup.preferredWidth); |
|
Assert.AreEqual(1, layoutGroup.flexibleWidth); |
|
} |
|
|
|
[Test] |
|
public void TestCalculateLayoutInputVertical() |
|
{ |
|
var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>(); |
|
layoutGroup.CalculateLayoutInputHorizontal(); |
|
layoutGroup.SetLayoutHorizontal(); |
|
layoutGroup.CalculateLayoutInputVertical(); |
|
layoutGroup.SetLayoutVertical(); |
|
|
|
Assert.AreEqual(40, layoutGroup.minHeight); |
|
Assert.AreEqual(145, layoutGroup.preferredHeight); |
|
Assert.AreEqual(1, layoutGroup.flexibleHeight); |
|
} |
|
|
|
[Test] |
|
public void TestCalculateLayoutVertical() |
|
{ |
|
var parentGO = m_PrefabRoot.transform.GetChild(0).GetChild(0); |
|
var element1GO = parentGO.GetChild(0); |
|
var element1Trans = element1GO.GetComponent<RectTransform>(); |
|
var element2GO = parentGO.GetChild(1); |
|
var element2Trans = element2GO.GetComponent<RectTransform>(); |
|
var element3GO = parentGO.GetChild(2); |
|
var element3Trans = element3GO.GetComponent<RectTransform>(); |
|
|
|
var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>(); |
|
layoutGroup.CalculateLayoutInputHorizontal(); |
|
layoutGroup.SetLayoutHorizontal(); |
|
layoutGroup.CalculateLayoutInputVertical(); |
|
layoutGroup.SetLayoutVertical(); |
|
|
|
Assert.AreEqual(-19.4f, element1Trans.anchoredPosition.y, 0.1f); |
|
Assert.AreEqual(-39.4f, element2Trans.anchoredPosition.y, 0.1f); |
|
Assert.AreEqual(-68.9f, element3Trans.anchoredPosition.y, 0.1f); |
|
} |
|
|
|
[Test] |
|
public void TestCalculateLayoutVerticalReversed() |
|
{ |
|
var parentGO = m_PrefabRoot.transform.GetChild(0).GetChild(0); |
|
var element1GO = parentGO.GetChild(0); |
|
var element1Trans = element1GO.GetComponent<RectTransform>(); |
|
var element2GO = parentGO.GetChild(1); |
|
var element2Trans = element2GO.GetComponent<RectTransform>(); |
|
var element3GO = parentGO.GetChild(2); |
|
var element3Trans = element3GO.GetComponent<RectTransform>(); |
|
|
|
var layoutGroup = m_PrefabRoot.GetComponentInChildren<VerticalLayoutGroup>(); |
|
layoutGroup.reverseArrangement = true; |
|
layoutGroup.CalculateLayoutInputHorizontal(); |
|
layoutGroup.SetLayoutHorizontal(); |
|
layoutGroup.CalculateLayoutInputVertical(); |
|
layoutGroup.SetLayoutVertical(); |
|
|
|
|
|
//Assert.AreEqual(-78.6f, element1Trans.anchoredPosition.y, 0.1f); |
|
Assert.AreEqual(-58.6f, element2Trans.anchoredPosition.y, 0.1f); |
|
Assert.AreEqual(-29.1f, element3Trans.anchoredPosition.y, 0.1f); |
|
} |
|
} |
|
}
|
|
|