diff --git a/DotNet~/ShrinkSDK.Context.AppAdapter.csproj b/DotNet~/ShrinkSDK.Context.AppAdapter.csproj index 926d4ab..a23d85f 100644 --- a/DotNet~/ShrinkSDK.Context.AppAdapter.csproj +++ b/DotNet~/ShrinkSDK.Context.AppAdapter.csproj @@ -5,13 +5,13 @@ ShrinkContext.AppAdapter ShrinkContext.AppAdapter ShrinkSDK.Context.AppAdapter - 0.2.4 + 0.2.5 Engine-neutral ShrinkContext composition host for ShrinkApp. false - - + + diff --git a/Tests/NativeWiringTests.cs b/Tests/NativeWiringTests.cs index bc1d919..e864fe2 100644 --- a/Tests/NativeWiringTests.cs +++ b/Tests/NativeWiringTests.cs @@ -1,6 +1,8 @@ #nullable enable using System; +using System.Collections; using System.Collections.Generic; +using Cysharp.Threading.Tasks; using NUnit.Framework; using ShrinkApp.Starter.Basic; using ShrinkCommand.Integration.App; @@ -10,6 +12,7 @@ using ShrinkNetwork; using ShrinkNetwork.Integration.App; using ShrinkApp; using UnityEngine; +using UnityEngine.TestTools; using Object = UnityEngine.Object; namespace ShrinkContext.AppAdapter.Tests @@ -21,92 +24,94 @@ namespace ShrinkContext.AppAdapter.Tests /// public class NativeWiringTests { - [Test] - public void BasicComposition_UsesNativeComponents_AndRetiresDependentsReversibly() + private ShrinkAppSettings? _settings; + private ShrinkAppLoaderHost? _host; + + [UnityTearDown] + public IEnumerator TearDown() { - var settings = ScriptableObject.CreateInstance(); - ShrinkAppLoaderHost? host = null; - try + if (_host?.IsRunning == true) + yield return _host.ShutdownAsync().ToCoroutine(); + if (_settings != null) + Object.DestroyImmediate(_settings); + } + + [UnityTest] + public IEnumerator BasicComposition_UsesNativeComponents_AndRetiresDependentsReversibly() + { + _settings = ScriptableObject.CreateInstance(); + var coreInstallers = new List(); + foreach (var installerType in ShrinkAppInstallers.GetDiscoveredInstallerTypes()) { - var coreInstallers = new List(); - foreach (var installerType in ShrinkAppInstallers.GetDiscoveredInstallerTypes()) - { - if (Activator.CreateInstance(installerType) is not IShrinkAppModuleInstaller installer) - continue; - if (installer.ModuleId is "shrink.network" or "shrink.command" or "shrink.datasaver") - coreInstallers.Add(installer); - } - - host = new ShrinkAppLoaderHost(settings, coreInstallers); - ShrinkAppBasicContextComposition.Configure(host); - host.ApplyComposition(ShrinkAppBasicContextComposition.CreateDefaultDocument()); - - TestAwait.Run(host.StartAsync()); - - Assert.AreEqual(7, host.ModuleIds.Count); - Assert.AreEqual(7, host.ActiveModuleIds.Count); - Assert.IsTrue(host.IsModuleActive("shrink.network")); - Assert.IsTrue(host.IsModuleActive("shrink.command")); - Assert.IsTrue(host.IsModuleActive("shrink.datasaver")); - Assert.IsTrue(host.IsModuleActive("shrink.integration.command-network")); - Assert.IsTrue(host.IsModuleActive("shrink.integration.command-eventbus")); - Assert.IsTrue(host.IsModuleActive("shrink.integration.datasaver-eventbus")); - Assert.IsTrue(host.IsModuleActive("shrink.integration.network-eventbus")); - - var root = host.Context.RootContext; - Assert.IsTrue(host.Context.TryGetRaw(root, - ShrinkNetworkAppComponent.ServiceKey, out _), "网络服务键由原生组件提供"); - Assert.IsTrue(host.Context.TryGetRaw(root, - ShrinkCommandAppComponent.ServiceKey, out _), "命令服务键由原生组件提供"); - Assert.IsTrue(host.Context.TryGetRaw(root, - ShrinkDataSaverAppComponent.ServiceKey, out _), "存档服务键由原生组件提供"); - Assert.IsTrue(host.Context.TryGetRaw(root, - "shrink.integration.command-network", out _)); - Assert.IsTrue(host.Context.TryGetRaw(root, - "shrink.integration.command-eventbus", out _)); - Assert.IsTrue(host.Context.TryGetRaw(root, - "shrink.integration.datasaver-eventbus", out _)); - Assert.IsTrue(host.Context.TryGetRaw(root, - "shrink.integration.network-eventbus", out _)); - Assert.IsTrue(host.Services.TryGet(out _)); - Assert.IsTrue(host.Services.TryGet(out _)); - Assert.IsTrue(host.Services.TryGet(out _)); - - TestAwait.Run(host.SetModuleDisabledAsync("shrink.command", true)); - - Assert.IsFalse(host.IsModuleActive("shrink.command")); - Assert.IsFalse(host.IsModuleActive("shrink.integration.command-network")); - Assert.IsFalse(host.IsModuleActive("shrink.integration.command-eventbus")); - Assert.IsTrue(host.IsModuleActive("shrink.network"), "无关提供者不得重载"); - Assert.IsTrue(host.IsModuleActive("shrink.datasaver"), "无关提供者不得重载"); - Assert.IsTrue(host.IsModuleActive("shrink.integration.network-eventbus")); - Assert.IsTrue(host.IsModuleActive("shrink.integration.datasaver-eventbus")); - Assert.IsFalse(host.Context.TryGetRaw(root, - ShrinkCommandAppComponent.ServiceKey, out _)); - Assert.IsFalse(host.Context.TryGetRaw(root, - "shrink.integration.command-network", out _)); - Assert.IsFalse(host.Context.TryGetRaw(root, - "shrink.integration.command-eventbus", out _)); - Assert.IsFalse(host.Services.TryGet(out _), - "兼容门面应随组件退役注销"); - - TestAwait.Run(host.SetModuleDisabledAsync("shrink.command", false)); - - Assert.AreEqual(7, host.ActiveModuleIds.Count); - Assert.IsTrue(host.Services.TryGet(out _)); - - TestAwait.Run(host.ShutdownAsync()); - Assert.AreEqual(0, host.ActiveModuleIds.Count); - Assert.IsFalse(host.Services.TryGet(out _)); - Assert.IsFalse(host.Services.TryGet(out _)); - Assert.IsFalse(host.Services.TryGet(out _)); - } - finally - { - if (host?.IsRunning == true) - TestAwait.Run(host.ShutdownAsync()); - Object.DestroyImmediate(settings); + if (Activator.CreateInstance(installerType) is not IShrinkAppModuleInstaller installer) + continue; + if (installer.ModuleId is "shrink.network" or "shrink.command" or "shrink.datasaver") + coreInstallers.Add(installer); } + + _host = new ShrinkAppLoaderHost(_settings, coreInstallers); + ShrinkAppBasicContextComposition.Configure(_host); + _host.ApplyComposition(ShrinkAppBasicContextComposition.CreateDefaultDocument()); + + yield return _host.StartAsync().ToCoroutine(); + + Assert.AreEqual(7, _host.ModuleIds.Count); + Assert.AreEqual(7, _host.ActiveModuleIds.Count); + Assert.IsTrue(_host.IsModuleActive("shrink.network")); + Assert.IsTrue(_host.IsModuleActive("shrink.command")); + Assert.IsTrue(_host.IsModuleActive("shrink.datasaver")); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.command-network")); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.command-eventbus")); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.datasaver-eventbus")); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.network-eventbus")); + + var root = _host.Context.RootContext; + Assert.IsTrue(_host.Context.TryGetRaw(root, + ShrinkNetworkAppComponent.ServiceKey, out _), "网络服务键由原生组件提供"); + Assert.IsTrue(_host.Context.TryGetRaw(root, + ShrinkCommandAppComponent.ServiceKey, out _), "命令服务键由原生组件提供"); + Assert.IsTrue(_host.Context.TryGetRaw(root, + ShrinkDataSaverAppComponent.ServiceKey, out _), "存档服务键由原生组件提供"); + Assert.IsTrue(_host.Context.TryGetRaw(root, + "shrink.integration.command-network", out _)); + Assert.IsTrue(_host.Context.TryGetRaw(root, + "shrink.integration.command-eventbus", out _)); + Assert.IsTrue(_host.Context.TryGetRaw(root, + "shrink.integration.datasaver-eventbus", out _)); + Assert.IsTrue(_host.Context.TryGetRaw(root, + "shrink.integration.network-eventbus", out _)); + Assert.IsTrue(_host.Services.TryGet(out _)); + Assert.IsTrue(_host.Services.TryGet(out _)); + Assert.IsTrue(_host.Services.TryGet(out _)); + + yield return _host.SetModuleDisabledAsync("shrink.command", true).ToCoroutine(); + + Assert.IsFalse(_host.IsModuleActive("shrink.command")); + Assert.IsFalse(_host.IsModuleActive("shrink.integration.command-network")); + Assert.IsFalse(_host.IsModuleActive("shrink.integration.command-eventbus")); + Assert.IsTrue(_host.IsModuleActive("shrink.network"), "无关提供者不得重载"); + Assert.IsTrue(_host.IsModuleActive("shrink.datasaver"), "无关提供者不得重载"); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.network-eventbus")); + Assert.IsTrue(_host.IsModuleActive("shrink.integration.datasaver-eventbus")); + Assert.IsFalse(_host.Context.TryGetRaw(root, + ShrinkCommandAppComponent.ServiceKey, out _)); + Assert.IsFalse(_host.Context.TryGetRaw(root, + "shrink.integration.command-network", out _)); + Assert.IsFalse(_host.Context.TryGetRaw(root, + "shrink.integration.command-eventbus", out _)); + Assert.IsFalse(_host.Services.TryGet(out _), + "兼容门面应随组件退役注销"); + + yield return _host.SetModuleDisabledAsync("shrink.command", false).ToCoroutine(); + + Assert.AreEqual(7, _host.ActiveModuleIds.Count); + Assert.IsTrue(_host.Services.TryGet(out _)); + + yield return _host.ShutdownAsync().ToCoroutine(); + Assert.AreEqual(0, _host.ActiveModuleIds.Count); + Assert.IsFalse(_host.Services.TryGet(out _)); + Assert.IsFalse(_host.Services.TryGet(out _)); + Assert.IsFalse(_host.Services.TryGet(out _)); } } } diff --git a/package.json b/package.json index c2f3605..736c911 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "com.cneicy.shrink-context-app-adapter", - "version": "0.2.4", + "version": "0.2.5", "displayName": "ShrinkContext - ShrinkApp Adapter", "description": "把现有 IShrinkAppModuleInstaller 包装为 ShrinkContext 组件:依赖缺失改为等待而非抛错,模块激活由响应式余效应驱动。", "unity": "2022.3", "dependencies": { - "com.cneicy.shrink-context-core": "0.3.0", - "com.cneicy.shrink-app-core": "0.2.3", - "com.cneicy.shrink-eventbus": "2.2.2", + "com.cneicy.shrink-context-core": "0.3.1", + "com.cneicy.shrink-app-core": "0.2.4", + "com.cneicy.shrink-eventbus": "2.3.1", "com.cysharp.unitask": "2.5.10", "com.unity.modules.jsonserialize": "1.0.0" },