Skip to content

Commit a16d139

Browse files
committed
test: add transition stress tests
1 parent 5953402 commit a16d139

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

Packages/mygamedevtools-scene-loader/Tests/Runtime/MyGameDevTools.SceneLoading.Tests.asmdef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"GUID:9e24947de15b9834991c9d8411ea37cf",
88
"GUID:69448af7b92c7f342b298e06a37122aa",
99
"GUID:84651a3751eca9349aac36a66bba901b",
10-
"GUID:6055be8ebefd69e48b49212b09b47b2f"
10+
"GUID:6055be8ebefd69e48b49212b09b47b2f",
11+
"GUID:f51ebe6a0ceec4240a699833d6309b23"
1112
],
1213
"includePlatforms": [],
1314
"excludePlatforms": [],

Packages/mygamedevtools-scene-loader/Tests/Runtime/SceneLoaderTests.cs

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
*/
66

77
#if ENABLE_UNITASK
8+
using Cysharp.Threading.Tasks;
89
using MyGameDevTools.SceneLoading.UniTaskSupport;
910
#endif
1011
using NUnit.Framework;
1112
using System.Collections;
1213
using System.Diagnostics;
14+
using System.Threading.Tasks;
1315
using UnityEngine;
1416
using UnityEngine.SceneManagement;
1517
using UnityEngine.TestTools;
@@ -31,6 +33,11 @@ public class SceneLoaderTests : SceneTestEnvironment
3133
new LoadSceneInfoName(SceneBuilder.SceneNames[1]),
3234
new LoadSceneInfoName(SceneBuilder.SceneNames[2])
3335
};
36+
static ILoadSceneInfo[] _sameSceneInfos = new ILoadSceneInfo[]
37+
{
38+
new LoadSceneInfoName(SceneBuilder.SceneNames[1]),
39+
new LoadSceneInfoName(SceneBuilder.SceneNames[1])
40+
};
3441
static ILoadSceneInfo[] _loadingSceneInfos = new ILoadSceneInfo[]
3542
{
3643
null,
@@ -39,14 +46,14 @@ public class SceneLoaderTests : SceneTestEnvironment
3946
};
4047
static ISceneLoader[] _sceneLoaders = new ISceneLoader[]
4148
{
42-
new SceneLoaderCoroutine(_managers[0]),
43-
new SceneLoaderCoroutine(_managers[1]),
4449
new SceneLoaderAsync(_managers[0]),
4550
new SceneLoaderAsync(_managers[1]),
4651
#if ENABLE_UNITASK
4752
new SceneLoaderUniTask(_managers[0]),
4853
new SceneLoaderUniTask(_managers[1]),
4954
#endif
55+
new SceneLoaderCoroutine(_managers[0]),
56+
new SceneLoaderCoroutine(_managers[1])
5057
};
5158

5259
[UnityTearDown]
@@ -110,13 +117,54 @@ public IEnumerator Transition([ValueSource(nameof(_sceneLoaders))] ISceneLoader
110117
Assert.AreEqual(loadedScene, sceneLoader.Manager.GetActiveScene());
111118
Assert.AreEqual(loadedScene.name, targetScene.Reference);
112119

120+
yield return new WaitUntil(() => !((ISceneManagerReporter)sceneLoader.Manager).IsUnloadingScenes);
121+
113122
void sceneLoaded(Scene scene)
114123
{
115124
if (targetScene.IsReferenceToScene(scene))
116125
loadedScene = scene;
117126
}
118127
}
119128

129+
[UnityTest]
130+
public IEnumerator Transition_Stress([ValueSource(nameof(_sceneLoaders))] ISceneLoader sceneLoader, [ValueSource(nameof(_targetSceneInfos))] ILoadSceneInfo targetScene, [ValueSource(nameof(_loadingSceneInfos))] ILoadSceneInfo loadingScene)
131+
{
132+
yield return LoadFirstScene(sceneLoader);
133+
134+
int type;
135+
if (sceneLoader is ISceneLoaderAsync<ValueTask<Scene>>)
136+
type = 1;
137+
else if (sceneLoader is ISceneLoaderAsync<UniTask<Scene>>)
138+
type = 2;
139+
else
140+
yield break; // There is currently no way to correctly get the loaded/unloaded scene in the SceneLoaderCoroutine
141+
142+
Scene loadedScene = default;
143+
var watch = new Stopwatch();
144+
145+
for (int i = 0; i < 20; i++)
146+
{
147+
switch (type)
148+
{
149+
case 1:
150+
var task = ((ISceneLoaderAsync<ValueTask<Scene>>)sceneLoader).TransitionToSceneAsync(targetScene, loadingScene).AsTask();
151+
yield return new WaitTask(task);
152+
loadedScene = task.Result;
153+
break;
154+
case 2:
155+
var unitask = ((ISceneLoaderAsync<UniTask<Scene>>)sceneLoader).TransitionToSceneAsync(targetScene, loadingScene).AsTask();
156+
yield return new WaitTask(unitask);
157+
loadedScene = unitask.Result;
158+
break;
159+
}
160+
161+
Assert.AreEqual(loadedScene.handle, sceneLoader.Manager.GetActiveScene().handle);
162+
Assert.AreEqual(loadedScene.name, targetScene.Reference);
163+
}
164+
165+
yield return new WaitUntil(() => !((ISceneManagerReporter)sceneLoader.Manager).IsUnloadingScenes);
166+
}
167+
120168
[UnityTest]
121169
public IEnumerator Transition_FromExternalOrigin([ValueSource(nameof(_sceneLoaders))] ISceneLoader sceneLoader, [ValueSource(nameof(_targetSceneInfos))] ILoadSceneInfo targetScene, [ValueSource(nameof(_loadingSceneInfos))] ILoadSceneInfo loadingScene)
122170
{
@@ -138,6 +186,8 @@ public IEnumerator Transition_FromExternalOrigin([ValueSource(nameof(_sceneLoade
138186
Assert.AreEqual(loadedScene, sceneLoader.Manager.GetActiveScene());
139187
Assert.AreEqual(loadedScene.name, targetScene.Reference);
140188

189+
yield return new WaitUntil(() => !((ISceneManagerReporter)sceneLoader.Manager).IsUnloadingScenes);
190+
141191
void sceneLoaded(Scene scene)
142192
{
143193
if (targetScene.IsReferenceToScene(scene))

0 commit comments

Comments
 (0)