172 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			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 | ||
|  |     } | ||
|  | } |