< Summary

Class:Tests.UIImageTests
Assembly:UIImageTests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/UI/UIImage/Tests/UIImageTests.cs
Covered lines:143
Uncovered lines:0
Coverable lines:143
Total lines:477
Line coverage:100% (143 of 143)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
TestPropertiesAreAppliedCorrectly()0%660100%
TestMissingValuesGetDefaultedOnUpdate()0%440100%
AddedCorrectlyOnInvisibleParent()0%330100%
TestOnClickEvent()0%14140100%
TestOnClickOnInvisibleShapeEvent()0%880100%
TestOnClickOnTransparentShapeEvent()0%880100%
TestAlignment()0%14140100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/UI/UIImage/Tests/UIImageTests.cs

#LineLine coverage
 1using DCL;
 2using DCL.Components;
 3using DCL.Helpers;
 4using DCL.Models;
 5using NUnit.Framework;
 6using System.Collections;
 7using UnityEngine;
 8using UnityEngine.TestTools;
 9
 10namespace Tests
 11{
 12    public class UIImageTests : UITestsBase
 13    {
 14        [UnityTest]
 15        public IEnumerator TestPropertiesAreAppliedCorrectly()
 16        {
 17            // Create UIScreenSpaceShape
 118            UIScreenSpace screenSpaceShape =
 19                TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene,
 20                    CLASS_ID.UI_SCREEN_SPACE_SHAPE);
 121            yield return screenSpaceShape.routine;
 22
 23            // Create UIImage
 124            UIImage uiImageShape =
 25                TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE);
 126            yield return uiImageShape.routine;
 27
 28            // Check default properties are applied correctly
 129            Assert.IsTrue(uiImageShape.referencesContainer.transform.parent == screenSpaceShape.childHookRectTransform);
 130            Assert.IsTrue(uiImageShape.referencesContainer.image.color == new Color(1, 1, 1, 1));
 131            Assert.IsTrue(uiImageShape.referencesContainer.canvasGroup.blocksRaycasts);
 132            Assert.AreEqual(100f, uiImageShape.childHookRectTransform.rect.width);
 133            Assert.AreEqual(50f, uiImageShape.childHookRectTransform.rect.height);
 134            Assert.IsTrue(uiImageShape.referencesContainer.image.enabled);
 135            Assert.IsTrue(uiImageShape.referencesContainer.image.texture == null);
 36
 137            Vector2 alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 38                uiImageShape.childHookRectTransform.rect);
 139            Assert.AreEqual(alignedPosition.ToString(),
 40                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 41
 42            // Update UIImage properties
 143            DCLTexture texture =
 44                TestHelpers.CreateDCLTexture(scene, TestAssetsUtils.GetPath() + "/Images/atlas.png");
 145            yield return texture.routine;
 46
 147            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 48            {
 49                parentComponent = screenSpaceShape.id,
 50                source = texture.id,
 51                opacity = 0.7f,
 52                isPointerBlocker = true,
 53                width = new UIValue(128f),
 54                height = new UIValue(128f),
 55                positionX = new UIValue(-55f),
 56                positionY = new UIValue(30f),
 57                hAlign = "right",
 58                vAlign = "bottom",
 59                sourceLeft = 64f,
 60                sourceTop = 64f,
 61                sourceWidth = 64f,
 62                sourceHeight = 64f,
 63                paddingTop = 10f,
 64                paddingRight = 10f,
 65                paddingBottom = 10f,
 66                paddingLeft = 10f
 67            });
 68
 69            // Check default properties are applied correctly
 170            Assert.IsTrue(uiImageShape.referencesContainer.transform.parent == screenSpaceShape.childHookRectTransform);
 171            Assert.AreEqual(new Color(1, 1, 1, 1), uiImageShape.referencesContainer.image.color);
 172            Assert.IsTrue(uiImageShape.referencesContainer.canvasGroup.blocksRaycasts);
 73
 174            Assert.AreEqual(108f, uiImageShape.childHookRectTransform.rect.width); // 128 - 20 (left and right padding)
 175            Assert.AreEqual(108f, uiImageShape.childHookRectTransform.rect.height); // 128 - 20 (left and right padding)
 176            Assert.IsTrue(uiImageShape.referencesContainer.image.enabled);
 177            Assert.IsTrue(uiImageShape.referencesContainer.image.texture != null);
 78
 179            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 80                uiImageShape.childHookRectTransform.rect, "bottom", "right");
 181            alignedPosition += new Vector2(-65f, 40f); // affected by padding
 82
 183            Assert.AreEqual(alignedPosition.ToString(),
 84                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 85
 186            Assert.AreEqual(0.5f, uiImageShape.referencesContainer.image.uvRect.x);
 187            Assert.AreEqual(0f, uiImageShape.referencesContainer.image.uvRect.y);
 188            Assert.AreEqual(0.5f, uiImageShape.referencesContainer.image.uvRect.width);
 189            Assert.AreEqual(0.5f, uiImageShape.referencesContainer.image.uvRect.height);
 90
 191            Assert.AreEqual(10, uiImageShape.referencesContainer.paddingLayoutGroup.padding.bottom);
 192            Assert.AreEqual(10, uiImageShape.referencesContainer.paddingLayoutGroup.padding.top);
 193            Assert.AreEqual(10, uiImageShape.referencesContainer.paddingLayoutGroup.padding.left);
 194            Assert.AreEqual(10, uiImageShape.referencesContainer.paddingLayoutGroup.padding.right);
 95
 196            screenSpaceShape.Dispose();
 197        }
 98
 99        [UnityTest]
 100        public IEnumerator TestMissingValuesGetDefaultedOnUpdate()
 101        {
 1102            UIScreenSpace screenSpaceShape =
 103                TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene,
 104                    CLASS_ID.UI_SCREEN_SPACE_SHAPE);
 1105            yield return screenSpaceShape.routine;
 106
 1107            Assert.IsFalse(screenSpaceShape == null);
 108
 1109            yield return TestHelpers.TestSharedComponentDefaultsOnUpdate<UIImage.Model, UIImage>(scene,
 110                CLASS_ID.UI_IMAGE_SHAPE);
 1111        }
 112
 113        [UnityTest]
 2114        public IEnumerator AddedCorrectlyOnInvisibleParent() { yield return TestHelpers.TestUIElementAddedCorrectlyOnInv
 115
 116        [UnityTest]
 117        public IEnumerator TestOnClickEvent()
 118        {
 1119            UIScreenSpace screenSpaceShape =
 120                TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene,
 121                    CLASS_ID.UI_SCREEN_SPACE_SHAPE);
 1122            yield return screenSpaceShape.routine;
 123
 1124            Assert.IsFalse(screenSpaceShape == null);
 125
 1126            DCLTexture texture =
 127                TestHelpers.CreateDCLTexture(scene, TestAssetsUtils.GetPath() + "/Images/atlas.png");
 1128            yield return texture.routine;
 129
 1130            UIImage uiImage = TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE);
 1131            yield return uiImage.routine;
 132
 1133            string uiImageOnClickEventId = "UUIDFakeEventId";
 134
 1135            yield return TestHelpers.SharedComponentUpdate(uiImage, new UIImage.Model
 136            {
 137                parentComponent = screenSpaceShape.id,
 138                source = texture.id,
 139                width = new UIValue(128f),
 140                height = new UIValue(128f),
 141                onClick = uiImageOnClickEventId
 142            });
 143
 1144            bool eventResult = false;
 145
 1146            yield return TestHelpers.TestUIClickEventPropagation(
 147                scene.sceneData.id,
 148                uiImageOnClickEventId,
 149                (RectTransform) uiImage.referencesContainer.image.transform,
 150                (bool res) =>
 151                {
 152                    // Check image object clicking triggers the correct event
 1153                    eventResult = res;
 1154                });
 155
 1156            Assert.IsTrue(eventResult);
 157
 158            // Check UI children won't trigger the parent/root image component event
 1159            UIContainerRect uiContainer =
 160                TestHelpers.SharedComponentCreate<UIContainerRect, UIContainerRect.Model>(scene,
 161                    CLASS_ID.UI_CONTAINER_RECT);
 1162            yield return uiContainer.routine;
 163
 1164            yield return TestHelpers.SharedComponentUpdate(uiContainer, new UIContainerRect.Model
 165            {
 166                parentComponent = uiImage.id
 167            });
 168
 1169            eventResult = false;
 170
 1171            yield return TestHelpers.TestUIClickEventPropagation(
 172                scene.sceneData.id,
 173                uiImageOnClickEventId,
 174                (RectTransform) uiContainer.referencesContainer.image.transform,
 175                (bool res) =>
 176                {
 177                    // Check image object clicking doesn't trigger event
 1178                    eventResult = res;
 1179                });
 180
 1181            Assert.IsFalse(eventResult);
 182
 1183            yield return null;
 1184            yield return null;
 1185            yield return null;
 1186            yield return null;
 1187        }
 188
 189        [UnityTest]
 190        public IEnumerator TestOnClickOnInvisibleShapeEvent()
 191        {
 1192            UIScreenSpace screenSpaceShape = TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene
 1193            yield return screenSpaceShape.routine;
 194
 1195            Assert.IsFalse(screenSpaceShape == null);
 196
 1197            DCLTexture texture = TestHelpers.CreateDCLTexture(scene, TestAssetsUtils.GetPath() + "/Images/atlas.png");
 1198            yield return texture.routine;
 199
 200            // --------------------------------------------------------------------------------------
 201            // Visible image that should trigger click events
 1202            UIImage uiImage = TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE);
 1203            yield return uiImage.routine;
 204
 1205            string uiImageOnClickEventId = "UUIDFakeEventId";
 206
 1207            yield return TestHelpers.SharedComponentUpdate(uiImage, new UIImage.Model
 208            {
 209                visible = true,
 210                parentComponent = screenSpaceShape.id,
 211                source = texture.id,
 212                width = new UIValue(128f),
 213                height = new UIValue(128f),
 214                onClick = uiImageOnClickEventId
 215            });
 216
 217            // --------------------------------------------------------------------------------------
 218            // Invisible image
 219            // Create an invisible image to check that it doesn't trigger click events
 220            // and that doesn't prevent previous image from triggering click events
 1221            UIImage uiImage2 = TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE)
 1222            yield return uiImage2.routine;
 223
 1224            yield return TestHelpers.SharedComponentUpdate(uiImage2, new UIImage.Model
 225            {
 226                visible = false,
 227                parentComponent = screenSpaceShape.id,
 228                source = texture.id,
 229                width = new UIValue(128f),
 230                height = new UIValue(128f),
 231
 232                onClick = uiImageOnClickEventId
 233            });
 234
 235            // --------------------------------------------------------------------------------------
 236            // We need to cast a ray to check clicked objects
 1237            Assert.IsFalse(TestHelpers.TestUIClick(screenSpaceShape.canvas, uiImage2.referencesContainer.childHookRectTr
 1238            Assert.IsTrue(TestHelpers.TestUIClick(screenSpaceShape.canvas, uiImage.referencesContainer.childHookRectTran
 1239        }
 240
 241        [UnityTest]
 242        public IEnumerator TestOnClickOnTransparentShapeEvent()
 243        {
 1244            UIScreenSpace screenSpaceShape = TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene
 1245            yield return screenSpaceShape.routine;
 246
 1247            Assert.IsFalse(screenSpaceShape == null);
 248
 1249            DCLTexture texture = TestHelpers.CreateDCLTexture(scene, TestAssetsUtils.GetPath() + "/Images/atlas.png");
 1250            yield return texture.routine;
 251
 252            // --------------------------------------------------------------------------------------
 253            // Visible image that should trigger click events
 1254            UIImage uiImage = TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE);
 1255            yield return uiImage.routine;
 256
 1257            string uiImageOnClickEventId = "UUIDFakeEventId";
 258
 1259            yield return TestHelpers.SharedComponentUpdate(uiImage, new UIImage.Model
 260            {
 261                visible = true,
 262                parentComponent = screenSpaceShape.id,
 263                source = texture.id,
 264                width = new UIValue(128f),
 265                height = new UIValue(128f),
 266                sourceLeft = 0,
 267                sourceTop = 0,
 268                sourceWidth = 1,
 269                sourceHeight = 1,
 270                onClick = uiImageOnClickEventId
 271            });
 272
 273            // --------------------------------------------------------------------------------------
 274            // Invisible image
 275            // Create an invisible image to check that it doesn't trigger click events
 276            // and that doesn't prevent previous image from triggering click events
 1277            UIImage uiImage2 = TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE)
 1278            yield return uiImage2.routine;
 279
 1280            yield return TestHelpers.SharedComponentUpdate(uiImage2, new UIImage.Model
 281            {
 282                visible = true,
 283                parentComponent = screenSpaceShape.id,
 284                source = texture.id,
 285                width = new UIValue(128f),
 286                height = new UIValue(128f),
 287                sourceLeft = 0,
 288                sourceTop = 0,
 289                sourceWidth = 1,
 290                sourceHeight = 1,
 291                opacity = 0f,
 292                onClick = uiImageOnClickEventId
 293            });
 294
 295            // --------------------------------------------------------------------------------------
 296            // We need to cast a ray to check clicked objects
 1297            Canvas canvas = screenSpaceShape.canvas;
 298
 1299            Assert.IsTrue(TestHelpers.TestUIClick(canvas, uiImage2.referencesContainer.childHookRectTransform));
 1300        }
 301
 302        [UnityTest]
 303        public IEnumerator TestAlignment()
 304        {
 305            // Create UIScreenSpaceShape
 1306            UIScreenSpace screenSpaceShape =
 307                TestHelpers.SharedComponentCreate<UIScreenSpace, UIScreenSpace.Model>(scene,
 308                    CLASS_ID.UI_SCREEN_SPACE_SHAPE);
 1309            yield return screenSpaceShape.routine;
 310
 311            // Create UIImage
 1312            UIImage uiImageShape =
 313                TestHelpers.SharedComponentCreate<UIImage, UIImage.Model>(scene, CLASS_ID.UI_IMAGE_SHAPE);
 1314            yield return uiImageShape.routine;
 315
 1316            DCLTexture texture =
 317                TestHelpers.CreateDCLTexture(scene, TestAssetsUtils.GetPath() + "/Images/atlas.png");
 1318            yield return texture.routine;
 319
 320            // Align to right-bottom
 1321            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 322            {
 323                parentComponent = screenSpaceShape.id,
 324                source = texture.id,
 325                width = new UIValue(128f),
 326                height = new UIValue(128f),
 327                hAlign = "right",
 328                vAlign = "bottom"
 329            });
 330
 331            // Check alignment position was applied correctly
 1332            Vector2 alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 333                uiImageShape.childHookRectTransform.rect, "bottom", "right");
 1334            Assert.AreEqual(alignedPosition.ToString(),
 335                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1336            Assert.AreEqual(TextAnchor.LowerRight, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 337
 338            // Align to right-center
 1339            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 340            {
 341                source = texture.id,
 342                width = new UIValue(128f),
 343                height = new UIValue(128f),
 344                hAlign = "right",
 345                vAlign = "center"
 346            });
 347
 348            // Check alignment position was applied correctly
 1349            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 350                uiImageShape.childHookRectTransform.rect, "center", "right");
 1351            Assert.AreEqual(alignedPosition.ToString(),
 352                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1353            Assert.AreEqual(TextAnchor.MiddleRight, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 354
 355            // Align to right-top
 1356            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 357            {
 358                source = texture.id,
 359                width = new UIValue(128f),
 360                height = new UIValue(128f),
 361                hAlign = "right",
 362                vAlign = "top"
 363            });
 364
 365            // Check alignment position was applied correctly
 1366            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 367                uiImageShape.childHookRectTransform.rect, "top", "right");
 1368            Assert.AreEqual(alignedPosition.ToString(),
 369                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1370            Assert.AreEqual(TextAnchor.UpperRight, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 371
 372            // Align to center-bottom
 1373            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 374            {
 375                source = texture.id,
 376                width = new UIValue(128f),
 377                height = new UIValue(128f),
 378                hAlign = "center",
 379                vAlign = "bottom"
 380            });
 381
 382            // Check alignment position was applied correctly
 1383            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 384                uiImageShape.childHookRectTransform.rect, "bottom", "center");
 1385            Assert.AreEqual(alignedPosition.ToString(),
 386                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1387            Assert.AreEqual(TextAnchor.LowerCenter, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 388
 389            // Align to center-center
 1390            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 391            {
 392                source = texture.id,
 393                width = new UIValue(128f),
 394                height = new UIValue(128f),
 395                hAlign = "center",
 396                vAlign = "center"
 397            });
 398
 399            // Check alignment position was applied correctly
 1400            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 401                uiImageShape.childHookRectTransform.rect, "center", "center");
 1402            Assert.AreEqual(alignedPosition.ToString(),
 403                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1404            Assert.AreEqual(TextAnchor.MiddleCenter, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 405
 406            // Align to center-top
 1407            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 408            {
 409                source = texture.id,
 410                width = new UIValue(128f),
 411                height = new UIValue(128f),
 412                hAlign = "center",
 413                vAlign = "top"
 414            });
 415
 416            // Check alignment position was applied correctly
 1417            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 418                uiImageShape.childHookRectTransform.rect, "top", "center");
 1419            Assert.AreEqual(alignedPosition.ToString(),
 420                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1421            Assert.AreEqual(TextAnchor.UpperCenter, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 422
 423            // Align to left-bottom
 1424            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 425            {
 426                source = texture.id,
 427                width = new UIValue(128f),
 428                height = new UIValue(128f),
 429                hAlign = "left",
 430                vAlign = "bottom"
 431            });
 432
 433            // Check alignment position was applied correctly
 1434            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 435                uiImageShape.childHookRectTransform.rect, "bottom", "left");
 1436            Assert.AreEqual(alignedPosition.ToString(),
 437                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1438            Assert.AreEqual(TextAnchor.LowerLeft, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 439
 440            // Align to left-center
 1441            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 442            {
 443                source = texture.id,
 444                width = new UIValue(128f),
 445                height = new UIValue(128f),
 446                hAlign = "left",
 447                vAlign = "center"
 448            });
 449
 450            // Check alignment position was applied correctly
 1451            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 452                uiImageShape.childHookRectTransform.rect, "center", "left");
 1453            Assert.AreEqual(alignedPosition.ToString(),
 454                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1455            Assert.AreEqual(TextAnchor.MiddleLeft, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 456
 457            // Align to left-top
 1458            yield return TestHelpers.SharedComponentUpdate(uiImageShape, new UIImage.Model
 459            {
 460                source = texture.id,
 461                width = new UIValue(128f),
 462                height = new UIValue(128f),
 463                hAlign = "left",
 464                vAlign = "top",
 465            });
 466
 467            // Check alignment position was applied correctly
 1468            alignedPosition = CalculateAlignedAnchoredPosition(screenSpaceShape.childHookRectTransform.rect,
 469                uiImageShape.childHookRectTransform.rect, "top", "left");
 1470            Assert.AreEqual(alignedPosition.ToString(),
 471                uiImageShape.referencesContainer.layoutElementRT.anchoredPosition.ToString());
 1472            Assert.AreEqual(TextAnchor.UpperLeft, uiImageShape.referencesContainer.layoutGroup.childAlignment);
 473
 1474            screenSpaceShape.Dispose();
 1475        }
 476    }
 477}