Skip to content

Commit 52d6bea

Browse files
committed
Improved tests stability. Improved Future task conversion
1 parent 9148657 commit 52d6bea

File tree

14 files changed

+239
-198
lines changed

14 files changed

+239
-198
lines changed

Assets/_PackageRoot/Runtime/Future/Future.API.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,9 @@ public void Forget()
359359
}
360360
public UniTask<T> AsUniTask()
361361
{
362+
if (IsCompleted)
363+
return UniTask.FromResult(value);
364+
362365
var taskCompletionSource = new UniTaskCompletionSource<T>();
363366

364367
Then(value => taskCompletionSource.TrySetResult(value));
@@ -369,6 +372,9 @@ public UniTask<T> AsUniTask()
369372
}
370373
public Task<T> AsTask()
371374
{
375+
if (IsCompleted)
376+
return Task.FromResult(value);
377+
372378
var taskCompletionSource = new TaskCompletionSource<T>();
373379

374380
Then(taskCompletionSource.SetResult);
@@ -378,7 +384,14 @@ public Task<T> AsTask()
378384
return taskCompletionSource.Task;
379385
}
380386
public IEnumerator AsCoroutine(Action<T> resultHandler = null, Action<Exception> exceptionHandler = null)
381-
=> AsUniTask().ToCoroutine(resultHandler, exceptionHandler);
387+
{
388+
if (IsCompleted)
389+
{
390+
resultHandler?.Invoke(value);
391+
yield break;
392+
}
393+
yield return AsUniTask().ToCoroutine(resultHandler, exceptionHandler);
394+
}
382395
public FutureAwaiter<T> GetAwaiter() => new FutureAwaiter<T>(AsTask().GetAwaiter());
383396
}
384397
}

Assets/_PackageRoot/Tests/Editor/Test.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Collections;
2-
using NUnit.Framework;
32
using Extensions.Unity.ImageLoader.Tests.Utils;
3+
using System;
44

55
namespace Extensions.Unity.ImageLoader.Tests
66
{
@@ -13,9 +13,8 @@ public virtual IEnumerator SetUp()
1313
}
1414
public virtual IEnumerator TearDown()
1515
{
16-
yield return TestUtils.WaitTicks(10);
17-
Assert.Zero(ImageLoader.GetLoadingSpriteFutures().Count);
18-
Assert.Zero(ImageLoader.GetLoadingTextureFutures().Count);
16+
yield return TestUtils.WaitWhile(() => ImageLoader.GetLoadingSpriteFutures().Count > 0, TimeSpan.FromSeconds(10));
17+
yield return TestUtils.WaitWhile(() => ImageLoader.GetLoadingTextureFutures().Count > 0, TimeSpan.FromSeconds(10));
1918
yield return TestUtils.ClearEverything("<b>Test End </b>");
2019
}
2120
}

Assets/_PackageRoot/Tests/Editor/TestCache.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using UnityEngine.TestTools;
44
using System.Collections;
55
using Extensions.Unity.ImageLoader.Tests.Utils;
6+
using System;
67

78
namespace Extensions.Unity.ImageLoader.Tests
89
{
@@ -26,7 +27,7 @@ [UnityTest] public IEnumerator LoadingFromMemoryCache()
2627
foreach (var imageURL in TestUtils.ImageURLs)
2728
{
2829
Assert.IsFalse(ImageLoader.MemoryCacheContains(imageURL));
29-
yield return LoadSprite(imageURL).ToCoroutine();
30+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
3031
Assert.IsTrue(ImageLoader.MemoryCacheContains(imageURL));
3132
}
3233
}
@@ -39,7 +40,7 @@ [UnityTest] public IEnumerator LoadingFromDiskCache()
3940
foreach (var imageURL in TestUtils.ImageURLs)
4041
{
4142
Assert.IsFalse(ImageLoader.DiskCacheContains(imageURL));
42-
yield return LoadSprite(imageURL).ToCoroutine();
43+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
4344
Assert.IsTrue(ImageLoader.DiskCacheContains(imageURL));
4445
}
4546
}
@@ -50,7 +51,7 @@ [UnityTest] public IEnumerator DiskCacheEnable()
5051

5152
foreach (var imageURL in TestUtils.ImageURLs)
5253
{
53-
yield return LoadSprite(imageURL).ToCoroutine();
54+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
5455
Assert.IsTrue(ImageLoader.DiskCacheContains(imageURL));
5556
}
5657
}
@@ -61,7 +62,7 @@ [UnityTest] public IEnumerator DiskCacheDisable()
6162

6263
foreach (var imageURL in TestUtils.ImageURLs)
6364
{
64-
yield return LoadSprite(imageURL).ToCoroutine();
65+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
6566
Assert.IsFalse(ImageLoader.DiskCacheContains(imageURL));
6667
}
6768
}
@@ -72,7 +73,7 @@ [UnityTest] public IEnumerator MemoryCacheEnabled()
7273

7374
foreach (var imageURL in TestUtils.ImageURLs)
7475
{
75-
yield return LoadSprite(imageURL).ToCoroutine();
76+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
7677
Assert.IsTrue(ImageLoader.MemoryCacheContains(imageURL));
7778
}
7879
}
@@ -83,7 +84,7 @@ [UnityTest] public IEnumerator MemoryCacheDisabled()
8384

8485
foreach (var imageURL in TestUtils.ImageURLs)
8586
{
86-
yield return LoadSprite(imageURL).ToCoroutine();
87+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
8788
Assert.IsFalse(ImageLoader.MemoryCacheContains(imageURL));
8889
}
8990
}
@@ -94,9 +95,9 @@ [UnityTest] public IEnumerator ClearDiskCache()
9495

9596
foreach (var imageURL in TestUtils.ImageURLs)
9697
{
97-
yield return LoadSprite(imageURL).ToCoroutine();
98+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
9899
Assert.IsTrue(ImageLoader.DiskCacheContains(imageURL));
99-
yield return ImageLoader.ClearDiskCacheAll().AsUniTask().ToCoroutine();
100+
yield return ImageLoader.ClearDiskCacheAll().TimeoutCoroutine(TimeSpan.FromSeconds(10));
100101
Assert.IsFalse(ImageLoader.DiskCacheContains(imageURL));
101102
}
102103
}
@@ -107,7 +108,7 @@ [UnityTest] public IEnumerator ClearMemoryCache()
107108

108109
foreach (var imageURL in TestUtils.ImageURLs)
109110
{
110-
yield return LoadSprite(imageURL).ToCoroutine();
111+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
111112
Assert.IsTrue(ImageLoader.MemoryCacheContains(imageURL));
112113
ImageLoader.ClearMemoryCache(imageURL);
113114
Assert.IsFalse(ImageLoader.MemoryCacheContains(imageURL));
@@ -120,10 +121,10 @@ [UnityTest] public IEnumerator ClearDiskCacheAll()
120121

121122
foreach (var imageURL in TestUtils.ImageURLs)
122123
{
123-
yield return LoadSprite(imageURL).ToCoroutine();
124+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
124125
Assert.IsTrue(ImageLoader.DiskCacheContains(imageURL));
125126
}
126-
yield return ImageLoader.ClearDiskCacheAll().AsUniTask().ToCoroutine();
127+
yield return ImageLoader.ClearDiskCacheAll().TimeoutCoroutine(TimeSpan.FromSeconds(10));
127128
foreach (var imageURL in TestUtils.ImageURLs)
128129
Assert.IsFalse(ImageLoader.DiskCacheContains(imageURL));
129130
}
@@ -134,7 +135,7 @@ [UnityTest] public IEnumerator ClearMemoryCacheAll()
134135

135136
foreach (var imageURL in TestUtils.ImageURLs)
136137
{
137-
yield return LoadSprite(imageURL).ToCoroutine();
138+
yield return LoadSprite(imageURL).TimeoutCoroutine(TimeSpan.FromSeconds(10));
138139
Assert.IsTrue(ImageLoader.MemoryCacheContains(imageURL));
139140
}
140141
ImageLoader.ClearMemoryCacheAll();

Assets/_PackageRoot/Tests/Editor/TestConcurrency.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ public IEnumerator Load_X_ReferencesInParallelLateDispose(int count, bool future
4040
ImageLoader.settings.useDiskCache = true;
4141
ImageLoader.settings.useMemoryCache = true;
4242

43-
var url1 = TestUtils.ImageURLs[0];
43+
var url = TestUtils.ImageURLs[0];
4444

4545
var cts = new System.Threading.CancellationTokenSource();
4646
cts.CancelAfterSlim(TimeSpan.FromSeconds(25) + TimeSpan.FromMilliseconds(5 * count));
4747

4848
var tasks = Enumerable.Range(0, count)
4949
.Select(i => Task.Run(async () =>
5050
{
51-
var futureRef = ImageLoader.LoadSpriteRef(url1);
51+
var futureRef = ImageLoader.LoadSpriteRef(url);
5252
Assert.NotNull(futureRef);
5353
var result = await futureRef;
5454
if (futureDispose)
@@ -63,11 +63,11 @@ public IEnumerator Load_X_ReferencesInParallelLateDispose(int count, bool future
6363
yield return UniTask.Yield();
6464

6565
Assert.False(cts.Token.IsCancellationRequested, "Timeout");
66-
Assert.AreEqual(count, Reference<Sprite>.Counter(url1));
66+
Assert.AreEqual(count, Reference<Sprite>.Counter(url));
6767

6868
foreach (var reference in tasks.Select(task => task.Result))
6969
reference.Dispose();
70-
Assert.AreEqual(0, Reference<Sprite>.Counter(url1));
70+
Assert.AreEqual(0, Reference<Sprite>.Counter(url));
7171
}
7272

7373
[UnityTest] public IEnumerator LoadOneMake____5_ReferencesInParallelLateDispose_NoLogs() => TestUtils.RunNoLogs(LoadOneMake____5_ReferencesInParallelLateDispose);
@@ -85,14 +85,14 @@ public IEnumerator LoadOneMake_X_ReferencesInParallelLateDispose(int count)
8585
ImageLoader.settings.useDiskCache = true;
8686
ImageLoader.settings.useMemoryCache = true;
8787

88-
var url1 = TestUtils.ImageURLs[0];
88+
var url = TestUtils.ImageURLs[0];
8989

90-
var future = ImageLoader.LoadSpriteRef(url1);
90+
var future = ImageLoader.LoadSpriteRef(url);
9191
var task1 = future.AsTask();
92-
while (!task1.IsCompleted)
93-
yield return UniTask.Yield();
9492

95-
Assert.AreEqual(1, Reference<Sprite>.Counter(url1));
93+
yield return task1.TimeoutCoroutine(TimeSpan.FromSeconds(25));
94+
95+
Assert.AreEqual(1, Reference<Sprite>.Counter(url));
9696

9797
var ref1 = task1.Result;
9898
Assert.NotNull(ref1);
@@ -101,21 +101,21 @@ public IEnumerator LoadOneMake_X_ReferencesInParallelLateDispose(int count)
101101
var tasks = Enumerable.Range(0, count)
102102
.Select(i => Task.Run(() =>
103103
{
104-
var ref0 = ImageLoader.LoadSpriteRefFromMemoryCache(url1);
104+
var ref0 = ImageLoader.LoadSpriteRefFromMemoryCache(url);
105105
Assert.NotNull(ref0);
106106
return ref0;
107107
}))
108108
.ToArray();
109109

110-
yield return Task.WhenAll(tasks).AsUniTask().ToCoroutine();
111-
Assert.AreEqual(count + 1, Reference<Sprite>.Counter(url1));
110+
yield return Task.WhenAll(tasks).TimeoutCoroutine(TimeSpan.FromSeconds(10));
111+
Assert.AreEqual(count + 1, Reference<Sprite>.Counter(url));
112112

113113
foreach (var reference in tasks.Select(task => task.Result))
114114
reference.Dispose();
115-
Assert.AreEqual(1, Reference<Sprite>.Counter(url1));
115+
Assert.AreEqual(1, Reference<Sprite>.Counter(url));
116116

117117
ref1.Dispose();
118-
Assert.AreEqual(0, Reference<Sprite>.Counter(url1));
118+
Assert.AreEqual(0, Reference<Sprite>.Counter(url));
119119
}
120120
}
121121
}

0 commit comments

Comments
 (0)