This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using NUnit.Framework;
|
||||
using ShrinkApp;
|
||||
@@ -39,6 +40,8 @@ namespace ShrinkContext.AppAdapter.Tests
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
ResetBootstrapperState();
|
||||
SetSharedSettings(null);
|
||||
if (_settings != null)
|
||||
Object.DestroyImmediate(_settings);
|
||||
}
|
||||
@@ -68,6 +71,33 @@ namespace ShrinkContext.AppAdapter.Tests
|
||||
CollectionAssert.AreEquivalent(new[] { "app.a", "app.b" }, probe.Value!.ModuleIds);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WaitUntilStartedAsync_AllConcurrentWaitersCompleteTogether()
|
||||
{
|
||||
PrepareBootstrapperWaitState();
|
||||
|
||||
var first = ShrinkAppLoaderBootstrapper.WaitUntilStartedAsync();
|
||||
var second = ShrinkAppLoaderBootstrapper.WaitUntilStartedAsync();
|
||||
CompleteBootstrapperStartup(null);
|
||||
|
||||
TestAwait.Run(UniTask.WhenAll(first, second));
|
||||
Assert.IsNull(ShrinkAppLoaderBootstrapper.StartError);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WaitUntilStartedAsync_PropagatesObservableStartupError()
|
||||
{
|
||||
PrepareBootstrapperWaitState();
|
||||
var expected = new InvalidOperationException("test startup failure");
|
||||
CompleteBootstrapperStartup(expected);
|
||||
|
||||
var actual = Assert.Throws<InvalidOperationException>(() =>
|
||||
TestAwait.Run(ShrinkAppLoaderBootstrapper.WaitUntilStartedAsync()));
|
||||
|
||||
Assert.AreSame(expected, actual);
|
||||
Assert.AreSame(expected, ShrinkAppLoaderBootstrapper.StartError);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetModuleDisabled_RetiresModuleAndDependents_EnableReloadsWithoutRestart()
|
||||
{
|
||||
@@ -210,5 +240,36 @@ namespace ShrinkContext.AppAdapter.Tests
|
||||
|
||||
public string Value { get; }
|
||||
}
|
||||
|
||||
private void PrepareBootstrapperWaitState()
|
||||
{
|
||||
ResetBootstrapperState();
|
||||
_settings.hostingMode = ShrinkAppHostingMode.ContextLoader;
|
||||
SetSharedSettings(_settings);
|
||||
}
|
||||
|
||||
private static void CompleteBootstrapperStartup(Exception? error)
|
||||
{
|
||||
var method = typeof(ShrinkAppLoaderBootstrapper).GetMethod(
|
||||
"CompleteStartup", BindingFlags.NonPublic | BindingFlags.Static);
|
||||
Assert.IsNotNull(method);
|
||||
method!.Invoke(null, new object?[] { error });
|
||||
}
|
||||
|
||||
private static void ResetBootstrapperState()
|
||||
{
|
||||
var method = typeof(ShrinkAppLoaderBootstrapper).GetMethod(
|
||||
"ResetStaticState", BindingFlags.NonPublic | BindingFlags.Static);
|
||||
Assert.IsNotNull(method);
|
||||
method!.Invoke(null, null);
|
||||
}
|
||||
|
||||
private static void SetSharedSettings(ShrinkAppSettings? settings)
|
||||
{
|
||||
var property = typeof(ShrinkAppSettings).GetProperty(
|
||||
nameof(ShrinkAppSettings.Instance), BindingFlags.Public | BindingFlags.Static);
|
||||
Assert.IsNotNull(property);
|
||||
property!.SetValue(null, settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user