< Summary

Class:DCL.FontAssetResolver
Assembly:AssetPromiseKeeper
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Font/Providers/FontAssetResolver.cs
Covered lines:22
Uncovered lines:4
Coverable lines:26
Total lines:65
Line coverage:84.6% (22 of 26)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FontAssetResolver(...)0%110100%
GetFontAsync()0%13.5513085.19%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Font/Providers/FontAssetResolver.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using MainScripts.DCL.Controllers.AssetManager;
 3using MainScripts.DCL.Controllers.AssetManager.Font;
 4using MainScripts.DCL.Helpers.Utils;
 5using System;
 6using System.Collections.Generic;
 7using System.Threading;
 8using TMPro;
 9using UnityEngine;
 10
 11namespace DCL
 12{
 13    public class FontAssetResolver : AssetResolverBase, IFontAssetResolver
 14    {
 15        private readonly IReadOnlyDictionary<AssetSource, IFontAssetProvider> providers;
 16
 17        public FontAssetResolver(IReadOnlyDictionary<AssetSource, IFontAssetProvider> providers, DataStore_FeatureFlag f
 69718            : base(featureFlags)
 19        {
 69720            this.providers = providers;
 69721        }
 22
 23        public async UniTask<FontResponse> GetFontAsync(AssetSource permittedSources, string url, CancellationToken canc
 24        {
 3225            Exception lastException = null;
 3226            TMP_FontAsset font = null;
 27
 3228            using PoolUtils.ListPoolRent<IFontAssetProvider> permittedSourcesRent = GetPermittedProviders(providers, per
 3229            List<IFontAssetProvider> permittedProviders = permittedSourcesRent.GetList();
 30
 9631            foreach (IFontAssetProvider provider in permittedProviders)
 32            {
 33                try
 34                {
 9635                    font = await provider.GetFontAsync(url, cancellationToken);
 36
 2837                    if (font)
 38                    {
 39                        // The valid font is retrieved
 2840                        AssetResolverLogger.LogVerbose(featureFlags, LogType.Log, $"Font {url} loaded from {provider}");
 2841                        break;
 42                    }
 43
 044                    AssetResolverLogger.LogVerbose(featureFlags, LogType.Log, $"Font {url} loaded from {provider} is nul
 045                }
 446                catch (Exception e)
 47                {
 448                    lastException = e;
 49
 450                    AssetResolverLogger.LogVerbose(featureFlags, e);
 51
 52                    // Propagate `OperationCanceledException` further as there is no reason to iterate
 453                    if (e is OperationCanceledException)
 454                        break;
 055                }
 056            }
 57
 3258            if (font)
 2859                return new FontResponse(new FontSuccessResponse(font));
 60
 461            lastException ??= new AssetNotFoundException(permittedSources, url);
 462            return new FontResponse(new FontFailResponse(lastException));
 3263        }
 64    }
 65}