< Summary

Class:GLTFImporterTests
Assembly:LoadableShapesTests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/LoadableShapes/Tests/GLTFImporterTests.cs
Covered lines:62
Uncovered lines:18
Coverable lines:80
Total lines:177
Line coverage:77.5% (62 of 80)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
LoadModel()0%770100%
ImporterCanLoadSkeletonsByDefault()0%110100%
TrevorModelHasProperScaling()0%20400%
TrevorModelHasProperTopology()0%20400%
GLTFWithoutSkeletonIdIsLoadingCorrectly()0%12300%
TwoGLTFsWithSameExternalTexturePathDontCollide()0%440100%
CurvesAreOptimizedCorrectly()0%550100%
TexturesCacheWorksProperly()0%440100%
TexturesOffsetAndScaleWorkProperly()0%330100%
TexturesProcessTexCoords()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/LoadableShapes/Tests/GLTFImporterTests.cs

#LineLine coverage
 1using DCL.Components;
 2using DCL.Helpers;
 3using DCL.Models;
 4using NUnit.Framework;
 5using System.Collections;
 6using System.Collections.Generic;
 7using System.Collections.Generic;
 8using DCL;
 9using Newtonsoft.Json;
 10using UnityEngine;
 11using UnityEngine.TestTools;
 12using UnityGLTF;
 13using UnityGLTF.Cache;
 14using UnityGLTF.Cache;
 15
 16public class GLTFImporterTests : IntegrationTestSuite_Legacy
 17{
 18    public IEnumerator LoadModel(string path, System.Action<IDCLEntity, InstantiatedGLTFObject> OnFinishLoading)
 19    {
 520        string src = TestAssetsUtils.GetPath() + path;
 21
 522        IDCLEntity entity = null;
 23
 524        GLTFShape gltfShape = TestHelpers.CreateEntityWithGLTFShape(scene, Vector3.zero, src, out entity);
 25
 526        yield return gltfShape.routine;
 27
 528        yield return new WaitForAllMessagesProcessed();
 4329        yield return new WaitUntil(() => GLTFComponent.downloadingCount == 0);
 30
 531        if (OnFinishLoading != null)
 32        {
 533            OnFinishLoading.Invoke(entity, entity.meshRootGameObject.GetComponentInChildren<InstantiatedGLTFObject>());
 34        }
 535    }
 36
 37    [Test]
 38    public void ImporterCanLoadSkeletonsByDefault()
 39    {
 140        var importer = new GLTFSceneImporter("", "", null, null);
 141        Assert.IsTrue( importer.importSkeleton, "Skeleton importing should be true by default or avatars won't load corr
 142    }
 43
 44    [UnityTest]
 45    [Explicit("Test takes too long")]
 46    [Category("Explicit")]
 47    public IEnumerator TrevorModelHasProperScaling()
 48    {
 049        InstantiatedGLTFObject trevorModel = null;
 050        yield return LoadModel("/GLB/Trevor/Trevor.glb", (entity, m) => trevorModel = m);
 51
 052        Transform child = trevorModel.transform.GetChild(0).GetChild(0);
 053        Vector3 scale = child.lossyScale;
 054        Assert.AreEqual(new Vector3(0.049f, 0.049f, 0.049f).ToString(), scale.ToString());
 055        yield return null;
 056    }
 57
 58    [UnityTest]
 59    [Explicit("Test takes too long")]
 60    [Category("Explicit")]
 61    public IEnumerator TrevorModelHasProperTopology()
 62    {
 063        InstantiatedGLTFObject trevorModel = null;
 064        yield return LoadModel("/GLB/Trevor/Trevor.glb", (entity, m) => trevorModel = m);
 65
 066        Assert.IsTrue(trevorModel.transform.childCount == 1);
 067        Assert.IsTrue(trevorModel.transform.GetChild(0).childCount == 2);
 068        Assert.IsTrue(trevorModel.transform.GetChild(0).GetChild(0).name.Contains("Character_Avatar"));
 069        Assert.IsTrue(trevorModel.transform.GetChild(0).GetChild(1).name.Contains("mixamorig"));
 070        yield return null;
 071    }
 72
 73    [UnityTest]
 74    [Explicit("Test takes too long")]
 75    [Category("Explicit")]
 76    public IEnumerator GLTFWithoutSkeletonIdIsLoadingCorrectly()
 77    {
 078        InstantiatedGLTFObject trevorModel = null;
 079        yield return LoadModel("/GLB/Avatar/Avatar_Idle.glb", (entity, m) => trevorModel = m);
 080    }
 81
 82    [UnityTest]
 83    public IEnumerator TwoGLTFsWithSameExternalTexturePathDontCollide()
 84    {
 185        InstantiatedGLTFObject trunk1 = null;
 186        InstantiatedGLTFObject trunk2 = null;
 87
 188        PersistentAssetCache.ImageCacheByUri.Clear();
 89
 290        yield return LoadModel("/GLTF/Trunk/Trunk.gltf", (entity, m) => trunk1 = m);
 291        yield return LoadModel("/GLTF/Trunk2/Trunk.gltf", (entity, m) => trunk2 = m);
 192        UnityEngine.Assertions.Assert.AreEqual(2, PersistentAssetCache.ImageCacheByUri.Count, "Image cache is colliding!
 193        UnityEngine.Assertions.Assert.AreEqual(2, PersistentAssetCache.StreamCacheByUri.Count, "Buffer cache is collidin
 194    }
 95
 96    [UnityTest]
 97    public IEnumerator CurvesAreOptimizedCorrectly()
 98    {
 199        var curvesSource = Resources.Load<AnimationCurveContainer>("CurveOptimizedCorrectlySource");
 100        //NOTE(Brian): We are going to output the optimization result in this SO, so it can be debugged more easily
 1101        var curvesResult = Resources.Load<AnimationCurveContainer>("CurveOptimizedCorrectlyResult");
 102
 1103        curvesResult.curves = new AnimationCurve[curvesSource.curves.Length];
 104
 18105        for (int i = 0; i < curvesSource.curves.Length; i++)
 106        {
 8107            var curve = curvesSource.curves[i];
 108
 8109            List<Keyframe> keys = new List<Keyframe>();
 110
 238111            for (int i1 = 0; i1 < curve.length; i1++)
 112            {
 111113                keys.Add(curve[i1]);
 114            }
 115
 8116            var result = GLTFSceneImporter.OptimizeKeyFrames(keys.ToArray());
 8117            var modifiedCurve = new AnimationCurve(result);
 118
 8119            curvesResult.curves[i] = modifiedCurve;
 120
 528121            for (float time = 0; time < 1.0f; time += 0.032f)
 122            {
 256123                var v1 = curve.Evaluate(time);
 256124                var v2 = modifiedCurve.Evaluate(time);
 125
 256126                UnityEngine.Assertions.Assert.AreApproximatelyEqual(v1, v2, 0.01f);
 127            }
 128        }
 129
 1130        yield break;
 131    }
 132
 133    [UnityTest]
 134    public IEnumerator TexturesCacheWorksProperly()
 135    {
 1136        IDCLEntity entity = null;
 1137        PersistentAssetCache.ImageCacheByUri.Clear();
 2138        yield return LoadModel("/GLTF/Trunk/Trunk.gltf", (e, model) => entity = e);
 139
 1140        UnityEngine.Assertions.Assert.AreEqual(1, PersistentAssetCache.ImageCacheByUri.Count);
 1141        scene.RemoveEntity(entity.entityId);
 1142        PoolManager.i.Cleanup();
 143
 1144        yield return null;
 145
 1146        UnityEngine.Assertions.Assert.AreEqual(0, PersistentAssetCache.ImageCacheByUri.Count);
 1147    }
 148
 149    [UnityTest]
 150    public IEnumerator TexturesOffsetAndScaleWorkProperly()
 151    {
 1152        IDCLEntity entity = null;
 1153        PersistentAssetCache.ImageCacheByUri.Clear();
 2154        yield return LoadModel("/GLB/PlaneUVsOffset/planeUVsOffset.glb", (e, model) => entity = e);
 155
 1156        MeshRenderer meshRenderer = entity.gameObject.GetComponentInChildren<MeshRenderer>();
 157
 1158        var unityOffset = GLTFSceneImporter.GLTFOffsetToUnitySpace(new Vector2(0.35f, 0.35f), 2.5f);
 1159        Assert.AreEqual(unityOffset, meshRenderer.material.GetTextureOffset("_BaseMap"));
 1160        Assert.AreEqual(Vector2.one * 2.5f, meshRenderer.material.GetTextureScale("_BaseMap"));
 1161    }
 162
 163    [UnityTest]
 164    public IEnumerator TexturesProcessTexCoords()
 165    {
 1166        IDCLEntity entity = null;
 1167        PersistentAssetCache.ImageCacheByUri.Clear();
 2168        yield return LoadModel("/GLB/PlaneUVsMultichannel/PlaneUVsMultichannel.glb", (e, model) => entity = e);
 169
 1170        MeshRenderer meshRenderer = entity.gameObject.GetComponentInChildren<MeshRenderer>();
 171
 1172        Assert.AreEqual(1, meshRenderer.material.GetInt("_BaseMapUVs"));
 1173        Assert.AreEqual(1, meshRenderer.material.GetInt("_NormalMapUVs"));
 1174        Assert.AreEqual(1, meshRenderer.material.GetInt("_MetallicMapUVs"));
 1175        Assert.AreEqual(1, meshRenderer.material.GetInt("_EmissiveMapUVs"));
 1176    }
 177}