| | 1 | | using DCL; |
| | 2 | | using System.Collections; |
| | 3 | | using System.Collections.Generic; |
| | 4 | | using UnityEngine; |
| | 5 | | using UnityEngine.Assertions; |
| | 6 | | using UnityEngine.TestTools; |
| | 7 | |
|
| | 8 | | namespace AssetPromiseKeeper_Mock_Tests |
| | 9 | | { |
| | 10 | | public class BlockedAndMasterPromisesShould |
| | 11 | | { |
| | 12 | | [UnityTest] |
| | 13 | | public IEnumerator ResolveCorrectlyIfKeepIsCalledWhenBlockedPromisesAreBeingProcessed() |
| | 14 | | { |
| 1 | 15 | | Time.maximumDeltaTime = 0.016f; |
| | 16 | |
|
| 1 | 17 | | var library = new AssetLibrary_Mock(); |
| 1 | 18 | | var keeper = new AssetPromiseKeeper_Mock(library); |
| | 19 | |
|
| 1 | 20 | | string id = "1"; |
| | 21 | |
|
| 1 | 22 | | var promList = new List<AssetPromise_Mock>(); |
| | 23 | |
|
| 1 | 24 | | var mischievousPromise = new AssetPromise_Mock(); |
| 1 | 25 | | mischievousPromise.idGenerator = id; |
| 1 | 26 | | mischievousPromise.loadTime = 0.01f; |
| | 27 | |
|
| 1 | 28 | | var mischievousPromise2 = new AssetPromise_Mock(); |
| 1 | 29 | | mischievousPromise2.idGenerator = id; |
| 1 | 30 | | mischievousPromise2.loadTime = 0.01f; |
| | 31 | |
|
| 100 | 32 | | for (int i = 0; i < 49; i++) |
| | 33 | | { |
| 49 | 34 | | AssetPromise_Mock tmpProm = new AssetPromise_Mock(); |
| 49 | 35 | | tmpProm.idGenerator = id; |
| 49 | 36 | | tmpProm.loadTime = 0.01f; |
| 49 | 37 | | keeper.Keep(tmpProm); |
| 49 | 38 | | promList.Add(tmpProm); |
| | 39 | | } |
| | 40 | |
|
| 100 | 41 | | for (int i = 0; i < promList.Count; i++) |
| | 42 | | { |
| 49 | 43 | | AssetPromise_Mock prom = promList[i]; |
| 49 | 44 | | yield return prom; |
| | 45 | |
|
| 49 | 46 | | if (i == 25) |
| | 47 | | { |
| 1 | 48 | | keeper.Keep(mischievousPromise); |
| 1 | 49 | | keeper.Keep(mischievousPromise2); |
| 2 | 50 | | yield return new DCL.WaitUntil(() => mischievousPromise.keepWaiting == false, 2.0f); |
| 2 | 51 | | yield return new DCL.WaitUntil(() => mischievousPromise2.keepWaiting == false, 2.0f); |
| 1 | 52 | | Assert.IsFalse(mischievousPromise.keepWaiting, "While blocked promises are being resolved, new promi |
| 1 | 53 | | Assert.IsFalse(mischievousPromise2.keepWaiting, "While blocked promises are being resolved, new prom |
| | 54 | | } |
| | 55 | | } |
| 1 | 56 | | } |
| | 57 | |
|
| | 58 | | [UnityTest] |
| | 59 | | public IEnumerator FailCorrectlyIfMasterPromiseFails() |
| | 60 | | { |
| 1 | 61 | | var library = new AssetLibrary_Mock(); |
| 1 | 62 | | var keeper = new AssetPromiseKeeper_Mock(library); |
| | 63 | |
|
| 1 | 64 | | string id = "1"; |
| 1 | 65 | | AssetPromise_Mock prom = new AssetPromise_Mock(); |
| 1 | 66 | | prom.idGenerator = id; |
| 1 | 67 | | Asset_Mock asset = null; |
| 1 | 68 | | bool failEventCalled1 = false; |
| 1 | 69 | | prom.OnSuccessEvent += (x) => { asset = x; }; |
| 3 | 70 | | prom.OnFailEvent += (x) => { failEventCalled1 = true; }; |
| | 71 | |
|
| 1 | 72 | | prom.forceFail = true; |
| | 73 | |
|
| 1 | 74 | | AssetPromise_Mock prom2 = new AssetPromise_Mock(); |
| 1 | 75 | | prom2.idGenerator = id; |
| 1 | 76 | | Asset_Mock asset2 = null; |
| 1 | 77 | | bool failEventCalled2 = false; |
| 1 | 78 | | prom2.OnSuccessEvent += (x) => { asset2 = x; }; |
| 3 | 79 | | prom2.OnFailEvent += (x) => { failEventCalled2 = true; }; |
| | 80 | |
|
| 1 | 81 | | AssetPromise_Mock prom3 = new AssetPromise_Mock(); |
| 1 | 82 | | prom3.idGenerator = id; |
| 1 | 83 | | Asset_Mock asset3 = null; |
| 1 | 84 | | bool failEventCalled3 = false; |
| 1 | 85 | | prom3.OnSuccessEvent += (x) => { asset3 = x; }; |
| 3 | 86 | | prom3.OnFailEvent += (x) => { failEventCalled3 = true; }; |
| | 87 | |
|
| 1 | 88 | | keeper.Keep(prom); |
| 1 | 89 | | keeper.Keep(prom2); |
| 1 | 90 | | keeper.Keep(prom3); |
| | 91 | |
|
| 1 | 92 | | Assert.AreEqual(3, keeper.waitingPromisesCount); |
| | 93 | |
|
| 1 | 94 | | yield return prom; |
| 1 | 95 | | yield return prom2; |
| 1 | 96 | | yield return prom3; |
| | 97 | |
|
| 1 | 98 | | Assert.AreEqual(0, keeper.waitingPromisesCount); |
| | 99 | |
|
| 1 | 100 | | Assert.AreNotEqual(AssetPromiseState.FINISHED, prom.state); |
| 1 | 101 | | Assert.AreNotEqual(AssetPromiseState.FINISHED, prom2.state); |
| 1 | 102 | | Assert.AreNotEqual(AssetPromiseState.FINISHED, prom3.state); |
| | 103 | |
|
| 1 | 104 | | Assert.IsTrue(failEventCalled1); |
| 1 | 105 | | Assert.IsTrue(failEventCalled2); |
| 1 | 106 | | Assert.IsTrue(failEventCalled3); |
| | 107 | |
|
| 1 | 108 | | Assert.IsFalse(asset != null); |
| 1 | 109 | | Assert.IsFalse(asset2 != null); |
| 1 | 110 | | Assert.IsFalse(asset3 != null); |
| | 111 | |
|
| 1 | 112 | | Assert.IsFalse(library.Contains(asset)); |
| 1 | 113 | | Assert.AreNotEqual(1, library.masterAssets.Count); |
| | 114 | |
|
| 1 | 115 | | AssetPromise_Mock prom4 = new AssetPromise_Mock(); |
| 1 | 116 | | prom4.idGenerator = id; |
| 1 | 117 | | Asset_Mock asset4 = null; |
| 3 | 118 | | prom4.OnSuccessEvent += (x) => { asset4 = x; }; |
| | 119 | |
|
| 1 | 120 | | keeper.Keep(prom4); |
| | 121 | |
|
| 1 | 122 | | yield return prom4; |
| | 123 | |
|
| 1 | 124 | | Assert.IsTrue(asset4 != null); |
| 1 | 125 | | Assert.IsTrue(library.Contains(asset4)); |
| 1 | 126 | | Assert.AreEqual(1, library.masterAssets.Count); |
| 1 | 127 | | } |
| | 128 | |
|
| | 129 | | } |
| | 130 | | } |