< Summary

Class:AssetPromiseKeeper_Mock_Tests.PromiseKeeperShouldBehaveCorrectlyWhen
Assembly:AssetPromiseKeeper_Basic_Tests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Common/Mock/Tests/PromiseKeeperShouldBehaveCorrectlyWhen.cs
Covered lines:141
Uncovered lines:6
Coverable lines:147
Total lines:240
Line coverage:95.9% (141 of 147)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
AnyAssetIsLoadedAndThenUnloaded()0%440100%
ForgetIsCalledWhileAssetIsBeingLoaded()0%440100%
MasterPromiseIsUnloadedWhenOtherPromisesAreWaitingForIt()0%660100%
ManyPromisesWithTheSameURLAreLoaded()0%550100%
KeepAndForgetIsCalledInSingleFrameWhenLoadingAsset()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/Common/Mock/Tests/PromiseKeeperShouldBehaveCorrectlyWhen.cs

#LineLine coverage
 1using DCL;
 2using System.Collections;
 3using UnityEngine;
 4using UnityEngine.Assertions;
 5using UnityEngine.TestTools;
 6
 7namespace AssetPromiseKeeper_Mock_Tests
 8{
 9    public class PromiseKeeperShouldBehaveCorrectlyWhen
 10    {
 11        [UnityTest]
 12        public IEnumerator AnyAssetIsLoadedAndThenUnloaded()
 13        {
 114            var library = new AssetLibrary_Mock();
 115            var keeper = new AssetPromiseKeeper_Mock(library);
 16
 117            AssetPromise_Mock prom = new AssetPromise_Mock();
 118            Asset_Mock loadedAsset = null;
 19
 120            prom.idGenerator = "1";
 121            prom.OnSuccessEvent +=
 22                (x) =>
 23                {
 124                    loadedAsset = x;
 125                }
 26                ;
 27
 28
 129            keeper.Keep(prom);
 30
 131            Assert.AreEqual(AssetPromiseState.LOADING, prom.state);
 32
 133            yield return prom;
 34
 135            Assert.AreEqual(AssetPromiseState.FINISHED, prom.state);
 36
 137            Assert.IsTrue(loadedAsset != null);
 138            Assert.IsTrue(library.Contains(loadedAsset));
 39
 140            Assert.AreEqual(1, library.masterAssets.Count);
 41
 142            keeper.Forget(prom);
 43
 144            yield return prom;
 45
 146            Assert.AreEqual(AssetPromiseState.IDLE_AND_EMPTY, prom.state);
 47
 148            Assert.IsTrue(!library.Contains(loadedAsset.id));
 149            Assert.AreEqual(0, library.masterAssets.Count);
 150        }
 51
 52        [UnityTest]
 53        public IEnumerator ForgetIsCalledWhileAssetIsBeingLoaded()
 54        {
 155            var library = new AssetLibrary_Mock();
 156            var keeper = new AssetPromiseKeeper_Mock(library);
 57
 158            AssetPromise_Mock prom = new AssetPromise_Mock();
 159            Asset_Mock asset = null;
 160            prom.idGenerator = "1";
 161            prom.OnSuccessEvent += (x) => { asset = x; };
 62
 163            keeper.Keep(prom);
 64
 165            yield return new WaitForSeconds(0.1f);
 66
 167            Assert.AreEqual(AssetPromiseState.LOADING, prom.state);
 68
 169            keeper.Forget(prom);
 70
 171            Assert.AreEqual(AssetPromiseState.IDLE_AND_EMPTY, prom.state);
 72
 173            yield return new WaitForSeconds(0.1f);
 74
 175            Assert.IsTrue(asset == null);
 176            Assert.IsTrue(!library.Contains(asset));
 177            Assert.AreEqual(0, library.masterAssets.Count);
 178        }
 79
 80        [UnityTest]
 81        public IEnumerator MasterPromiseIsUnloadedWhenOtherPromisesAreWaitingForIt()
 82        {
 183            var library = new AssetLibrary_Mock();
 184            var keeper = new AssetPromiseKeeper_Mock(library);
 85
 186            string id = "1";
 187            AssetPromise_Mock prom = new AssetPromise_Mock();
 188            prom.idGenerator = id;
 89
 190            Asset_Mock asset = null;
 191            bool masterSuccessCalled = false;
 192            bool masterFailCalled = false;
 93
 194            prom.OnSuccessEvent += (x) =>
 95            {
 096                asset = x;
 097                masterSuccessCalled = true;
 098            };
 199            prom.OnFailEvent += (x) => { masterFailCalled = true; };
 100
 1101            AssetPromise_Mock_Alt_Loading_Approach prom2 = new AssetPromise_Mock_Alt_Loading_Approach();
 1102            prom2.idGenerator = id;
 1103            Asset_Mock asset2 = null;
 3104            prom2.OnSuccessEvent += (x) => { asset2 = x; };
 105
 1106            AssetPromise_Mock prom3 = new AssetPromise_Mock();
 1107            prom3.idGenerator = id;
 1108            Asset_Mock asset3 = null;
 3109            prom3.OnSuccessEvent += (x) => { asset3 = x; };
 110
 1111            keeper.Keep(prom);
 1112            keeper.Keep(prom2);
 1113            keeper.Keep(prom3);
 114
 1115            Assert.AreEqual(3, keeper.waitingPromisesCount);
 116
 1117            yield return new WaitForSeconds(prom.loadTime * 0.2f);
 118
 1119            keeper.Forget(prom);
 120
 1121            yield return prom;
 1122            yield return prom2;
 1123            yield return prom3;
 124
 1125            Assert.AreEqual(AssetPromiseState.FINISHED, prom.state);
 1126            Assert.AreEqual(AssetPromiseState.FINISHED, prom2.state);
 1127            Assert.AreEqual(AssetPromiseState.FINISHED, prom3.state);
 128
 1129            Assert.IsTrue(!masterSuccessCalled, "Success event called when it shouldn't!");
 1130            Assert.IsTrue(!masterFailCalled, "Fail event called when it shouldn't!");
 131
 1132            Assert.IsTrue(asset == null);
 1133            Assert.IsTrue(prom.GetAsset_Test() != null);
 134
 1135            Assert.IsTrue(asset2 != null);
 1136            Assert.IsTrue(asset3 != null);
 137
 1138            Assert.IsTrue(asset2.id == asset3.id);
 1139            Assert.IsTrue(asset2 != asset3);
 140
 1141            Assert.AreEqual(1, library.masterAssets.Count);
 1142        }
 143
 144        [UnityTest]
 145        public IEnumerator ManyPromisesWithTheSameURLAreLoaded()
 146        {
 1147            var library = new AssetLibrary_Mock();
 1148            var keeper = new AssetPromiseKeeper_Mock(library);
 149
 1150            string id = "1";
 1151            AssetPromise_Mock prom = new AssetPromise_Mock();
 1152            prom.idGenerator = id;
 1153            Asset_Mock asset = null;
 3154            prom.OnSuccessEvent += (x) => { asset = x; };
 155
 1156            AssetPromise_Mock_Alt_Loading_Approach prom2 = new AssetPromise_Mock_Alt_Loading_Approach();
 1157            prom2.idGenerator = id;
 1158            Asset_Mock asset2 = null;
 3159            prom2.OnSuccessEvent += (x) => { asset2 = x; };
 160
 1161            AssetPromise_Mock prom3 = new AssetPromise_Mock();
 1162            prom3.idGenerator = id;
 1163            Asset_Mock asset3 = null;
 3164            prom3.OnSuccessEvent += (x) => { asset3 = x; };
 165
 1166            keeper.Keep(prom);
 1167            keeper.Keep(prom2);
 1168            keeper.Keep(prom3);
 169
 1170            Assert.AreEqual(3, keeper.waitingPromisesCount);
 171
 1172            yield return prom;
 1173            yield return prom2;
 1174            yield return prom3;
 175
 1176            Assert.AreEqual(AssetPromiseState.FINISHED, prom.state);
 1177            Assert.AreEqual(AssetPromiseState.FINISHED, prom2.state);
 1178            Assert.AreEqual(AssetPromiseState.FINISHED, prom3.state);
 179
 1180            Assert.IsTrue(asset != null);
 1181            Assert.IsTrue(asset2 != null);
 1182            Assert.IsTrue(asset3 != null);
 183
 1184            Assert.IsTrue(asset2.id == asset.id);
 1185            Assert.IsTrue(asset3.id == asset.id);
 1186            Assert.IsTrue(asset2.id == asset3.id);
 187
 1188            Assert.IsTrue(asset != asset2);
 1189            Assert.IsTrue(asset != asset3);
 1190            Assert.IsTrue(asset2 != asset3);
 191
 1192            Assert.IsTrue(library.Contains(asset));
 1193            Assert.AreEqual(1, library.masterAssets.Count);
 1194        }
 195
 196        [UnityTest]
 197        public IEnumerator KeepAndForgetIsCalledInSingleFrameWhenLoadingAsset()
 198        {
 1199            var library = new AssetLibrary_Mock();
 1200            var keeper = new AssetPromiseKeeper_Mock(library);
 201
 1202            AssetPromise_Mock prom = new AssetPromise_Mock();
 1203            Asset_Mock loadedAsset = null;
 1204            object id = null;
 205
 1206            prom.idGenerator = "1";
 1207            prom.OnSuccessEvent +=
 208                (x) =>
 209                {
 0210                    loadedAsset = x;
 0211                    id = loadedAsset.id;
 0212                };
 213
 214
 1215            keeper.Keep(prom);
 1216            keeper.Forget(prom);
 1217            keeper.Keep(prom);
 1218            keeper.Forget(prom);
 219
 1220            keeper.Keep(prom);
 1221            Assert.AreEqual(1, keeper.waitingPromisesCount);
 1222            keeper.Keep(prom);
 1223            Assert.AreEqual(1, keeper.waitingPromisesCount);
 1224            keeper.Forget(prom);
 1225            Assert.AreEqual(0, keeper.waitingPromisesCount);
 1226            keeper.Forget(prom);
 1227            Assert.AreEqual(0, keeper.waitingPromisesCount);
 1228            keeper.Forget(prom);
 1229            Assert.AreEqual(0, keeper.waitingPromisesCount);
 230
 1231            Assert.AreEqual(AssetPromiseState.IDLE_AND_EMPTY, prom.state);
 1232            Assert.AreEqual(0, keeper.waitingPromisesCount);
 1233            Assert.IsTrue(loadedAsset == null);
 1234            Assert.IsTrue(!library.Contains(id));
 1235            Assert.AreEqual(0, library.masterAssets.Count);
 236
 1237            yield break;
 238        }
 239    }
 240}