95 lines
4.1 KiB
C#
95 lines
4.1 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using NUnit.Framework;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.TestTools;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
[TestFixture]
|
||
|
public class LayoutGroupArrangement
|
||
|
{
|
||
|
const float k_LayoutDefaultSize = 100f;
|
||
|
|
||
|
GameObject m_Canvas;
|
||
|
GameObject m_LayoutGameObject;
|
||
|
RectTransform m_Child1;
|
||
|
RectTransform m_Child2;
|
||
|
|
||
|
[SetUp]
|
||
|
public void TestSetup()
|
||
|
{
|
||
|
m_Canvas = new GameObject("Canvas", typeof(Canvas));
|
||
|
m_LayoutGameObject = new GameObject("LayoutGroup", typeof(RectTransform));
|
||
|
m_LayoutGameObject.transform.SetParent(m_Canvas.transform, false);
|
||
|
m_LayoutGameObject.GetComponent<RectTransform>().sizeDelta =
|
||
|
new Vector2(k_LayoutDefaultSize, k_LayoutDefaultSize);
|
||
|
|
||
|
m_Child1 = new GameObject("Child1").AddComponent<RectTransform>();
|
||
|
m_Child1.SetParent(m_LayoutGameObject.transform, false);
|
||
|
|
||
|
m_Child2 = new GameObject("Child2").AddComponent<RectTransform>();
|
||
|
m_Child2.SetParent(m_LayoutGameObject.transform, false);
|
||
|
}
|
||
|
|
||
|
[UnityTest]
|
||
|
[Category("RegressionTest")]
|
||
|
[Description("Nested GameObjects without a Layout Element will effect a Layout Group's arrangement (case 1026779)")]
|
||
|
public IEnumerator LayoutGroup_ShouldResizeChildren_AfterDisablingAndEnablingAnyChild(
|
||
|
[Values(typeof(HorizontalLayoutGroup), typeof(VerticalLayoutGroup))]
|
||
|
Type layoutGroup)
|
||
|
{
|
||
|
var layoutComponent = (HorizontalOrVerticalLayoutGroup)m_LayoutGameObject.AddComponent(layoutGroup);
|
||
|
layoutComponent.childForceExpandHeight = true;
|
||
|
layoutComponent.childForceExpandWidth = true;
|
||
|
layoutComponent.childControlHeight = true;
|
||
|
layoutComponent.childControlWidth = true;
|
||
|
|
||
|
Assert.That(m_LayoutGameObject.GetComponent<RectTransform>().sizeDelta,
|
||
|
Is.EqualTo(Vector2.one * k_LayoutDefaultSize),
|
||
|
"Layout's size should not change after adding the " + layoutGroup.Name);
|
||
|
|
||
|
yield return null;
|
||
|
|
||
|
// HorizontalLayoutGroup will rearrange the children to have width equal to half the layout's width.
|
||
|
var expectedWidth = layoutGroup == typeof(HorizontalLayoutGroup)
|
||
|
? k_LayoutDefaultSize / 2
|
||
|
: k_LayoutDefaultSize;
|
||
|
|
||
|
// VerticalLayoutGroup will rearrange the children to have height equal to half the layout's height.
|
||
|
var expectedHeight = layoutGroup == typeof(VerticalLayoutGroup) ? k_LayoutDefaultSize / 2 : k_LayoutDefaultSize;
|
||
|
|
||
|
Assert.That(m_Child1.sizeDelta.x, Is.EqualTo(expectedWidth),
|
||
|
"Adding " + layoutGroup.Name + " did not resize the first child.");
|
||
|
Assert.That(m_Child1.sizeDelta.y, Is.EqualTo(expectedHeight),
|
||
|
"Adding " + layoutGroup.Name + " did not resize the first child.");
|
||
|
Assert.That(m_Child2.sizeDelta, Is.EqualTo(m_Child1.sizeDelta), "Both children should be of the same size.");
|
||
|
|
||
|
// Disable the second child and verify that the first child is resized to have size equal to the layout's size.
|
||
|
m_Child2.gameObject.SetActive(false);
|
||
|
|
||
|
yield return null;
|
||
|
|
||
|
Assert.That(m_Child1.sizeDelta.x, Is.EqualTo(k_LayoutDefaultSize),
|
||
|
layoutGroup.Name + " did not resize the first child after disabling the second child.");
|
||
|
Assert.That(m_Child1.sizeDelta.y, Is.EqualTo(k_LayoutDefaultSize),
|
||
|
layoutGroup.Name + " did not resize the first child after disabling the second child.");
|
||
|
|
||
|
// Enable the second child and verify that the first child is resized to the expected width/height.
|
||
|
m_Child2.gameObject.SetActive(true);
|
||
|
|
||
|
yield return null;
|
||
|
|
||
|
Assert.That(m_Child1.sizeDelta.x, Is.EqualTo(expectedWidth),
|
||
|
layoutGroup.Name + " did not resize the first child after enabling the second child.");
|
||
|
Assert.That(m_Child1.sizeDelta.y, Is.EqualTo(expectedHeight),
|
||
|
layoutGroup.Name + " did not resize the first child after enabling the second child.");
|
||
|
Assert.That(m_Child2.sizeDelta, Is.EqualTo(m_Child1.sizeDelta), "Both children should be of the same size.");
|
||
|
}
|
||
|
|
||
|
[TearDown]
|
||
|
public void TearDown()
|
||
|
{
|
||
|
GameObject.DestroyImmediate(m_Canvas);
|
||
|
}
|
||
|
}
|