A game about forced loneliness, made by TACStudios
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 138 lines 4.8 kB view raw
1using UnityEngine; 2using UnityEngine.TestTools; 3using NUnit.Framework; 4using System.Collections; 5using UnityEngine.UI; 6using System.Reflection; 7 8public class ImageTests 9{ 10 private const int Width = 32; 11 private const int Height = 32; 12 13 GameObject m_CanvasGO; 14 TestableImage m_Image; 15 private Texture2D m_defaultTexture; 16 17 private bool m_dirtyLayout; 18 private bool m_dirtyMaterial; 19 20 [SetUp] 21 public void SetUp() 22 { 23 m_CanvasGO = new GameObject("Canvas", typeof(Canvas)); 24 GameObject imageObject = new GameObject("Image", typeof(TestableImage)); 25 imageObject.transform.SetParent(m_CanvasGO.transform); 26 m_Image = imageObject.GetComponent<TestableImage>(); 27 m_Image.RegisterDirtyLayoutCallback(() => m_dirtyLayout = true); 28 m_Image.RegisterDirtyMaterialCallback(() => m_dirtyMaterial = true); 29 30 m_defaultTexture = new Texture2D(Width, Height); 31 Color[] colors = new Color[Width * Height]; 32 for (int i = 0; i < Width * Height; i++) 33 colors[i] = Color.magenta; 34 m_defaultTexture.Apply(); 35 } 36 37 [Test] 38 public void TightMeshSpritePopulatedVertexHelperProperly() 39 { 40 Texture2D texture = new Texture2D(64, 64); 41 m_Image.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0, 0)); 42 m_Image.type = Image.Type.Simple; 43 m_Image.useSpriteMesh = true; 44 45 VertexHelper vh = new VertexHelper(); 46 47 m_Image.GenerateImageData(vh); 48 49 Assert.AreEqual(vh.currentVertCount, m_Image.sprite.vertices.Length); 50 Assert.AreEqual(vh.currentIndexCount, m_Image.sprite.triangles.Length); 51 } 52 53 [UnityTest] 54 public IEnumerator CanvasCustomRefPixPerUnitToggleWillUpdateImageMesh() 55 { 56 var canvas = m_CanvasGO.GetComponent<Canvas>(); 57 var canvasScaler = m_CanvasGO.AddComponent<CanvasScaler>(); 58 59 canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; 60 m_Image.transform.SetParent(m_CanvasGO.transform); 61 m_Image.type = Image.Type.Sliced; 62 var texture = new Texture2D(120, 120); 63 m_Image.sprite = Sprite.Create(texture, new Rect(0, 0, 120, 120), new Vector2(0.5f, 0.5f), 100, 1, SpriteMeshType.Tight, new Vector4(30, 30, 30, 30), true); 64 m_Image.fillCenter = true; 65 66 67 canvasScaler.referencePixelsPerUnit = 200; 68 yield return null; // skip frame to update canvas properly 69 //setup done 70 71 canvas.enabled = false; 72 73 yield return null; 74 75 canvas.enabled = true; 76 m_Image.isOnPopulateMeshCalled = false; 77 78 yield return null; 79 80 Assert.IsTrue(m_Image.isOnPopulateMeshCalled); 81 } 82 83 [UnityTest] 84 public IEnumerator Sprite_Layout() 85 { 86 m_Image.sprite = Sprite.Create(m_defaultTexture, new Rect(0, 0, Width, Height), Vector2.zero); 87 yield return null; 88 89 m_Image.isGeometryUpdated = false; 90 m_dirtyLayout = false; 91 92 var Texture = new Texture2D(Width * 2, Height * 2); 93 m_Image.sprite = Sprite.Create(Texture, new Rect(0, 0, Width, Height), Vector2.zero); 94 yield return new WaitUntil(() => m_Image.isGeometryUpdated); 95 96 // validate that layout change rebuil is not called 97 Assert.IsFalse(m_dirtyLayout); 98 99 m_Image.isGeometryUpdated = false; 100 m_dirtyLayout = false; 101 m_Image.sprite = Sprite.Create(Texture, new Rect(0, 0, Width / 2, Height / 2), Vector2.zero); 102 yield return new WaitUntil(() => m_Image.isGeometryUpdated); 103 104 // validate that layout change rebuil is called 105 Assert.IsTrue(m_dirtyLayout); 106 } 107 108 [UnityTest] 109 public IEnumerator Sprite_Material() 110 { 111 m_Image.sprite = Sprite.Create(m_defaultTexture, new Rect(0, 0, Width, Height), Vector2.zero); 112 yield return null; 113 114 m_Image.isGeometryUpdated = false; 115 m_dirtyMaterial = false; 116 m_Image.sprite = Sprite.Create(m_defaultTexture, new Rect(0, 0, Width / 2, Height / 2), Vector2.zero); 117 yield return new WaitUntil(() => m_Image.isGeometryUpdated); 118 119 // validate that material change rebuild is not called 120 Assert.IsFalse(m_dirtyMaterial); 121 122 m_Image.isGeometryUpdated = false; 123 m_dirtyMaterial = false; 124 var Texture = new Texture2D(Width * 2, Height * 2); 125 m_Image.sprite = Sprite.Create(Texture, new Rect(0, 0, Width / 2, Height / 2), Vector2.zero); 126 yield return new WaitUntil(() => m_Image.isGeometryUpdated); 127 128 // validate that layout change rebuil is called 129 Assert.IsTrue(m_dirtyMaterial); 130 } 131 132 [TearDown] 133 public void TearDown() 134 { 135 GameObject.DestroyImmediate(m_CanvasGO); 136 GameObject.DestroyImmediate(m_defaultTexture); 137 } 138}