PO/Library/PackageCache/com.unity.ugui@1.0.0/Tests/Runtime/NestedLayout/SceneWithNestedLayoutElemen...

172 lines
7.1 KiB
C#

using System;
using UnityEngine.UI;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEditor;
[TestFixture]
[Category("RegressionTest")]
public class SceneWithNestedLayoutElementsLoad : IPrebuildSetup
{
Scene m_InitScene;
const string aspectRatioFitterSceneName = "AspectRatioFitter";
const string contentSizeFitterSceneName = "ContentSizeFitter";
const string layoutGroupSceneName = "LayoutGroup";
public void Setup()
{
#if UNITY_EDITOR
Action aspectRatioFitterSceneCreation = delegate()
{
var canvasGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler));
var panelGO = new GameObject("Panel", typeof(UnityEngine.UI.Image), typeof(AspectRatioFitter));
var imageGO = new GameObject("Image", typeof(UnityEngine.UI.RawImage), typeof(AspectRatioFitter));
panelGO.transform.SetParent(canvasGO.transform);
imageGO.transform.SetParent(panelGO.transform);
var panelARF = panelGO.GetComponent<AspectRatioFitter>();
panelARF.aspectMode = AspectRatioFitter.AspectMode.EnvelopeParent;
panelARF.aspectRatio = 1.98f;
var iamgeARF = imageGO.GetComponent<AspectRatioFitter>();
iamgeARF.aspectMode = AspectRatioFitter.AspectMode.None;
iamgeARF.aspectRatio = 1f;
new GameObject("GameObject", typeof(SceneWithNestedLayoutElementsLoadScript));
};
CreateSceneUtility.CreateScene(aspectRatioFitterSceneName, aspectRatioFitterSceneCreation);
Action contentSizeFitterSceneCreation = delegate()
{
var canvasGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler));
var panelGO = new GameObject("Panel", typeof(UnityEngine.UI.Image), typeof(ContentSizeFitter), typeof(LayoutElement));
var imageGO = new GameObject("Image", typeof(UnityEngine.UI.RawImage), typeof(ContentSizeFitter), typeof(LayoutElement));
panelGO.transform.SetParent(canvasGO.transform);
imageGO.transform.SetParent(panelGO.transform);
var panelCSF = panelGO.GetComponent<ContentSizeFitter>();
panelCSF.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
panelCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
var panelLE = panelGO.GetComponent<LayoutElement>();
panelLE.preferredWidth = 200f;
panelLE.preferredHeight = 200f;
var imageCSF = imageGO.GetComponent<ContentSizeFitter>();
imageCSF.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;
imageCSF.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
var imageLE = imageGO.GetComponent<LayoutElement>();
imageLE.preferredWidth = 100f;
imageLE.preferredHeight = 100f;
new GameObject("GameObject", typeof(SceneWithNestedLayoutElementsLoadScript));
};
CreateSceneUtility.CreateScene(contentSizeFitterSceneName, contentSizeFitterSceneCreation);
Action layoutGroupSceneCreation = delegate()
{
var canvasGO = new GameObject("Canvas", typeof(Canvas), typeof(CanvasScaler), typeof(GridLayoutGroup));
var panelGO = new GameObject("Panel (0)", typeof(UnityEngine.UI.Image), typeof(GridLayoutGroup), typeof(LayoutElement));
var imageGOOne = new GameObject("Image", typeof(UnityEngine.UI.RawImage), typeof(LayoutElement));
var imageGOTwo = new GameObject("Image", typeof(UnityEngine.UI.RawImage), typeof(LayoutElement));
panelGO.transform.SetParent(canvasGO.transform);
imageGOOne.transform.SetParent(panelGO.transform);
imageGOTwo.transform.SetParent(panelGO.transform);
var panelLE = panelGO.GetComponent<LayoutElement>();
panelLE.preferredWidth = 100f;
panelLE.preferredHeight = 100f;
var imageOneLE = imageGOOne.GetComponent<LayoutElement>();
imageOneLE.preferredWidth = 100f;
imageOneLE.preferredHeight = 100f;
var imageTwoLE = imageGOOne.GetComponent<LayoutElement>();
imageTwoLE.preferredWidth = 100f;
imageTwoLE.preferredHeight = 100f;
// Duplicate the first panel we created.
GameObject.Instantiate(panelGO, canvasGO.transform);
new GameObject("GameObject", typeof(SceneWithNestedLayoutElementsLoadScript));
};
CreateSceneUtility.CreateScene(layoutGroupSceneName, layoutGroupSceneCreation);
#endif
}
[UnityTest]
public IEnumerator SceneWithNestedAspectRatioFitterLoads()
{
AsyncOperation operation = SceneManager.LoadSceneAsync(aspectRatioFitterSceneName, LoadSceneMode.Additive);
yield return operation;
SceneManager.SetActiveScene(SceneManager.GetSceneByName(aspectRatioFitterSceneName));
var go = GameObject.Find("GameObject");
var component = go.GetComponent<SceneWithNestedLayoutElementsLoadScript>();
yield return new WaitUntil(() => component.isStartCalled);
operation = SceneManager.UnloadSceneAsync(aspectRatioFitterSceneName);
yield return operation;
}
[UnityTest]
public IEnumerator SceneWithNestedContentSizeFitterLoads()
{
AsyncOperation operation = SceneManager.LoadSceneAsync(contentSizeFitterSceneName, LoadSceneMode.Additive);
yield return operation;
SceneManager.SetActiveScene(SceneManager.GetSceneByName(contentSizeFitterSceneName));
var go = GameObject.Find("GameObject");
var component = go.GetComponent<SceneWithNestedLayoutElementsLoadScript>();
yield return new WaitUntil(() => component.isStartCalled);
operation = SceneManager.UnloadSceneAsync(contentSizeFitterSceneName);
yield return operation;
}
[UnityTest]
public IEnumerator SceneWithNestedLayoutGroupLoads()
{
AsyncOperation operation = SceneManager.LoadSceneAsync(layoutGroupSceneName, LoadSceneMode.Additive);
yield return operation;
SceneManager.SetActiveScene(SceneManager.GetSceneByName(layoutGroupSceneName));
var go = GameObject.Find("GameObject");
var component = go.GetComponent<SceneWithNestedLayoutElementsLoadScript>();
yield return new WaitUntil(() => component.isStartCalled);
operation = SceneManager.UnloadSceneAsync(layoutGroupSceneName);
yield return operation;
}
[SetUp]
public void TestSetup()
{
m_InitScene = SceneManager.GetActiveScene();
}
[TearDown]
public void TearDown()
{
SceneManager.SetActiveScene(m_InitScene);
}
[OneTimeTearDown]
public void OnTimeTearDown()
{
//Manually add Assets/ and .unity as CreateSceneUtility does that for you.
#if UNITY_EDITOR
AssetDatabase.DeleteAsset("Assets/" + aspectRatioFitterSceneName + ".unity");
AssetDatabase.DeleteAsset("Assets/" + contentSizeFitterSceneName + ".unity");
AssetDatabase.DeleteAsset("Assets/" + layoutGroupSceneName + ".unity");
#endif
}
}