暫無描述
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.

ImageTests.cs 4.7KB

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