using System.Reflection; using System.Collections; using NUnit.Framework; using UnityEngine.EventSystems; using UnityEngine.TestTools; namespace UnityEngine.UI.Tests { [TestFixture] class NavigationTests { GameObject canvasRoot; Selectable topLeftSelectable; Selectable bottomLeftSelectable; Selectable topRightSelectable; Selectable bottomRightSelectable; [SetUp] public void TestSetup() { canvasRoot = new GameObject("Canvas", typeof(RectTransform), typeof(Canvas)); GameObject topLeftGO = new GameObject("topLeftGO", typeof(RectTransform), typeof(CanvasRenderer), typeof(Selectable)); topLeftGO.transform.SetParent(canvasRoot.transform); (topLeftGO.transform as RectTransform).anchoredPosition = new Vector2(50, 200); topLeftSelectable = topLeftGO.GetComponent(); GameObject bottomLeftGO = new GameObject("bottomLeftGO", typeof(RectTransform), typeof(CanvasRenderer), typeof(Selectable)); bottomLeftGO.transform.SetParent(canvasRoot.transform); (bottomLeftGO.transform as RectTransform).anchoredPosition = new Vector2(50, 50); bottomLeftSelectable = bottomLeftGO.GetComponent(); GameObject topRightGO = new GameObject("topRightGO", typeof(RectTransform), typeof(CanvasRenderer), typeof(Selectable)); topRightGO.transform.SetParent(canvasRoot.transform); (topRightGO.transform as RectTransform).anchoredPosition = new Vector2(200, 200); topRightSelectable = topRightGO.GetComponent(); GameObject bottomRightGO = new GameObject("bottomRightGO", typeof(RectTransform), typeof(CanvasRenderer), typeof(Selectable)); bottomRightGO.transform.SetParent(canvasRoot.transform); (bottomRightGO.transform as RectTransform).anchoredPosition = new Vector2(200, 50); bottomRightSelectable = bottomRightGO.GetComponent(); } [TearDown] public void TearDown() { GameObject.DestroyImmediate(canvasRoot); } [Test] public void FindSelectableOnRight_ReturnsNextSelectableRightOfTarget() { Selectable selectableRightOfTopLeft = topLeftSelectable.FindSelectableOnRight(); Selectable selectableRightOfBottomLeft = bottomLeftSelectable.FindSelectableOnRight(); Assert.AreEqual(topRightSelectable, selectableRightOfTopLeft, "Wrong selectable to right of Top Left Selectable"); Assert.AreEqual(bottomRightSelectable, selectableRightOfBottomLeft, "Wrong selectable to right of Bottom Left Selectable"); } [Test] public void FindSelectableOnLeft_ReturnsNextSelectableLeftOfTarget() { Selectable selectableLeftOfTopRight = topRightSelectable.FindSelectableOnLeft(); Selectable selectableLeftOfBottomRight = bottomRightSelectable.FindSelectableOnLeft(); Assert.AreEqual(topLeftSelectable, selectableLeftOfTopRight, "Wrong selectable to left of Top Right Selectable"); Assert.AreEqual(bottomLeftSelectable, selectableLeftOfBottomRight, "Wrong selectable to left of Bottom Right Selectable"); } [Test] public void FindSelectableOnRDown_ReturnsNextSelectableBelowTarget() { Selectable selectableDownOfTopLeft = topLeftSelectable.FindSelectableOnDown(); Selectable selectableDownOfTopRight = topRightSelectable.FindSelectableOnDown(); Assert.AreEqual(bottomLeftSelectable, selectableDownOfTopLeft, "Wrong selectable to Bottom of Top Left Selectable"); Assert.AreEqual(bottomRightSelectable, selectableDownOfTopRight, "Wrong selectable to Bottom of top Right Selectable"); } [Test] public void FindSelectableOnUp_ReturnsNextSelectableAboveTarget() { Selectable selectableUpOfBottomLeft = bottomLeftSelectable.FindSelectableOnUp(); Selectable selectableUpOfBottomRight = bottomRightSelectable.FindSelectableOnUp(); Assert.AreEqual(topLeftSelectable, selectableUpOfBottomLeft, "Wrong selectable to Up of bottom Left Selectable"); Assert.AreEqual(topRightSelectable, selectableUpOfBottomRight, "Wrong selectable to Up of bottom Right Selectable"); } [Test] public void FindSelectableOnRight__WrappingEnabled_ReturnsFurthestSelectableOnLeft() { Navigation nav = topRightSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Horizontal; topRightSelectable.navigation = nav; nav = bottomRightSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Horizontal; bottomRightSelectable.navigation = nav; Selectable selectableRightOfTopRight = topRightSelectable.FindSelectableOnRight(); Selectable selectableRightOfBottomRight = bottomRightSelectable.FindSelectableOnRight(); Assert.AreEqual(bottomLeftSelectable, selectableRightOfTopRight, "Wrong selectable to right of Top Right Selectable"); Assert.AreEqual(topLeftSelectable, selectableRightOfBottomRight, "Wrong selectable to right of Bottom Right Selectable"); } [Test] public void FindSelectableOnLeft_WrappingEnabled_ReturnsFurthestSelectableOnRight() { Navigation nav = topLeftSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Horizontal; topLeftSelectable.navigation = nav; nav = bottomLeftSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Horizontal; bottomLeftSelectable.navigation = nav; Selectable selectableLeftOfTopLeft = topLeftSelectable.FindSelectableOnLeft(); Selectable selectableLeftOfBottomLeft = bottomLeftSelectable.FindSelectableOnLeft(); Assert.AreEqual(bottomRightSelectable, selectableLeftOfTopLeft, "Wrong selectable to left of Top Left Selectable"); Assert.AreEqual(topRightSelectable, selectableLeftOfBottomLeft, "Wrong selectable to left of Bottom Left Selectable"); } [Test] public void FindSelectableOnDown_WrappingEnabled_ReturnsFurthestSelectableAbove() { Navigation nav = bottomLeftSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Vertical; bottomLeftSelectable.navigation = nav; nav = bottomRightSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Vertical; bottomRightSelectable.navigation = nav; Selectable selectableDownOfBottomLeft = bottomLeftSelectable.FindSelectableOnDown(); Selectable selectableDownOfBottomRight = bottomRightSelectable.FindSelectableOnDown(); Assert.AreEqual(topRightSelectable, selectableDownOfBottomLeft, "Wrong selectable to Bottom of Bottom Left Selectable"); Assert.AreEqual(topLeftSelectable, selectableDownOfBottomRight, "Wrong selectable to Bottom of Bottom Right Selectable"); } [Test] public void FindSelectableOnUp_WrappingEnabled_ReturnsFurthestSelectableBelow() { Navigation nav = topLeftSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Vertical; topLeftSelectable.navigation = nav; nav = topRightSelectable.navigation; nav.wrapAround = true; nav.mode = Navigation.Mode.Vertical; topRightSelectable.navigation = nav; Selectable selectableUpOfTopLeft = topLeftSelectable.FindSelectableOnUp(); Selectable selectableUpOfTopRight = topRightSelectable.FindSelectableOnUp(); Assert.AreEqual(bottomRightSelectable, selectableUpOfTopLeft, "Wrong selectable to Up of Top Left Selectable"); Assert.AreEqual(bottomLeftSelectable, selectableUpOfTopRight, "Wrong selectable to Up of Top Right Selectable"); } } }