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.
101 lines
4.0 KiB
101 lines
4.0 KiB
using UnityEngine; |
|
using UnityEngine.UI; |
|
using UnityEngine.TestTools; |
|
using NUnit.Framework; |
|
using System.Collections; |
|
|
|
public class ScrollRectClamp |
|
{ |
|
// Prefab has the following hierarchy: |
|
// - PrefabRoot |
|
// - Canvas |
|
// - Root |
|
// - Scroll View |
|
// - Content |
|
// - Scrollbar |
|
GameObject m_PrefabRoot; |
|
RectTransform Root { get; set; } |
|
ScrollRect Scroll { get; set; } |
|
RectTransform ScrollTransform { get; set; } |
|
RectTransform Content { get; set; } |
|
|
|
float ScrollSizeY { get { return ScrollTransform.rect.size.y; } } |
|
float ContentSizeY { get { return Content.rect.size.y; } } |
|
|
|
[SetUp] |
|
public void Setup() |
|
{ |
|
// We setup the ScrollRect so that it will vertically resize with the Root object, to simulate |
|
// a change in screen size |
|
m_PrefabRoot = new GameObject("ScrollRectClamp"); |
|
|
|
GameObject CanvasGO = new GameObject("Canvas"); |
|
CanvasGO.transform.SetParent(m_PrefabRoot.transform); |
|
|
|
GameObject RootGO = new GameObject("Root", typeof(RectTransform)); |
|
RootGO.transform.SetParent(CanvasGO.transform); |
|
Root = RootGO.GetComponent<RectTransform>(); |
|
Root.pivot = Root.anchorMin = Root.anchorMax = new Vector2(0.5f, 0.5f); |
|
Root.sizeDelta = new Vector2(150.0f, 200.0f); |
|
|
|
GameObject ScrollViewGO = new GameObject("Scroll View", typeof(RectTransform), typeof(ScrollRect), typeof(Image)); |
|
ScrollViewGO.transform.SetParent(Root); |
|
Scroll = ScrollViewGO.GetComponent<ScrollRect>(); |
|
ScrollTransform = ScrollViewGO.GetComponent<RectTransform>(); |
|
Scroll.viewport = ScrollTransform; |
|
Scroll.movementType = ScrollRect.MovementType.Clamped; |
|
Scroll.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHide; |
|
|
|
ScrollTransform.pivot = ScrollTransform.anchorMax = new Vector2(0.0f, 1.0f); |
|
ScrollTransform.anchorMin = Vector2.zero; |
|
ScrollTransform.sizeDelta = new Vector2(150.0f, 0.0f); |
|
ScrollTransform.localPosition = Vector3.zero; |
|
|
|
GameObject ContentGO = new GameObject("Content", typeof(RectTransform)); |
|
Content = ContentGO.GetComponent<RectTransform>(); |
|
Content.SetParent(ScrollTransform); |
|
Scroll.content = Content; |
|
Content.pivot = Content.anchorMin = new Vector2(0.0f, 1.0f); |
|
Content.anchorMax = new Vector2(1.0f, 1.0f); |
|
Content.sizeDelta = new Vector2(0.0f, 300.0f); |
|
Content.anchoredPosition = Vector2.zero; |
|
|
|
GameObject ScrollbarGO = new GameObject("Scrollbar", typeof(RectTransform), typeof(Image), typeof(Scrollbar)); |
|
ScrollbarGO.transform.SetParent(ScrollTransform); |
|
Scroll.verticalScrollbar = ScrollbarGO.GetComponent<Scrollbar>(); |
|
} |
|
|
|
[TearDown] |
|
public void TearDown() |
|
{ |
|
Object.DestroyImmediate(m_PrefabRoot); |
|
} |
|
|
|
[UnityTest] |
|
public IEnumerator ScrollRect_CorrectClampOnResize() |
|
{ |
|
Assert.IsNotNull(Scroll.verticalScrollbar); |
|
|
|
Scroll.verticalNormalizedPosition = 1.0f; |
|
yield return null; |
|
Assert.IsTrue(Mathf.Approximately(0.0f, Content.anchoredPosition.y)); |
|
|
|
Scroll.verticalNormalizedPosition = 0.0f; |
|
yield return null; |
|
// The content is vertically bigger than the viewport. |
|
Assert.IsTrue(Mathf.Approximately(Content.anchoredPosition.y, ContentSizeY - ScrollSizeY)); |
|
|
|
// Resizing the root will resize the viewport accordingly. |
|
Root.sizeDelta = new Vector2(150.0f, 300.0f); |
|
yield return null; |
|
// The content is vertically the same size as the viewport |
|
Assert.IsTrue(Mathf.Approximately(ContentSizeY, ScrollSizeY)); |
|
Assert.False(Scroll.verticalScrollbar.gameObject.activeSelf); |
|
Assert.IsTrue(Mathf.Approximately(0.0f, Scroll.verticalNormalizedPosition)); |
|
Assert.IsTrue(Mathf.Approximately(0.0f, Content.anchoredPosition.y)); |
|
|
|
Root.sizeDelta = new Vector2(150.0f, 200.0f); |
|
yield return null; |
|
Assert.IsTrue(Mathf.Approximately(1.0f, Scroll.verticalNormalizedPosition)); |
|
} |
|
}
|
|
|