com.wallstop-studios.dxmessaging 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/format-on-demand.yml +2 -2
- package/.github/workflows/json-format-check.yml +1 -1
- package/.github/workflows/markdown-json.yml +1 -1
- package/.github/workflows/markdownlint.yml +1 -1
- package/.github/workflows/npm-publish.yml +1 -1
- package/.github/workflows/prettier-autofix.yml +2 -2
- package/.github/workflows/yaml-format-lint.yml +1 -1
- package/Docs/Advanced.md +26 -1
- package/Docs/Comparisons.md +1229 -146
- package/Docs/Compatibility.md +27 -0
- package/Docs/DesignAndArchitecture.md +41 -34
- package/Docs/EmitShorthands.md +34 -0
- package/Docs/Helpers.md +91 -76
- package/Docs/Index.md +28 -25
- package/Docs/Install.md +29 -6
- package/Docs/Integrations/Reflex.md +292 -0
- package/{package-lock.json.meta → Docs/Integrations/Reflex.md.meta} +1 -1
- package/Docs/Integrations/VContainer.md +324 -0
- package/Docs/Integrations/VContainer.md.meta +7 -0
- package/Docs/Integrations/Zenject.md +333 -0
- package/Docs/Integrations/Zenject.md.meta +7 -0
- package/{Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.pdb.meta → Docs/Integrations.meta} +2 -1
- package/Docs/InterceptorsAndOrdering.md +371 -17
- package/Docs/ListeningPatterns.md +206 -0
- package/Docs/MessageBusProviders.md +496 -0
- package/Docs/MessageBusProviders.md.meta +7 -0
- package/Docs/MessageTypes.md +27 -0
- package/Docs/MigrationGuide.md +45 -0
- package/Docs/Patterns.md +286 -0
- package/Docs/Performance.md +9 -9
- package/Docs/QuickReference.md +31 -0
- package/Docs/QuickStart.md +1 -2
- package/Docs/RuntimeConfiguration.md +407 -0
- package/Docs/RuntimeConfiguration.md.meta +7 -0
- package/Docs/UnityIntegration.md +3 -1
- package/Docs/VisualGuide.md +206 -157
- package/Editor/CustomEditors/MessagingComponentEditor.cs +15 -6
- package/README.md +148 -26
- package/Runtime/AssemblyInfo.cs +4 -0
- package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +1 -1
- package/Runtime/Core/Extensions/MessageBusExtensions.cs +253 -0
- package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -0
- package/Runtime/Core/Extensions/MessageExtensions.cs +137 -89
- package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs +23 -0
- package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageBusProvider.cs +14 -0
- package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +18 -0
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessageBusRebindMode.cs +26 -0
- package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +383 -0
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -0
- package/Runtime/Core/MessageHandler.cs +198 -27
- package/Runtime/Core/MessageRegistrationToken.cs +67 -25
- package/Runtime/Core/Messages/IBroadcastMessage.cs +1 -1
- package/Runtime/Core/Messages/ITargetedMessage.cs +1 -1
- package/Runtime/Core/Messages/IUntargetedMessage.cs +1 -1
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs +31 -0
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -0
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs +38 -0
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -0
- package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -0
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -0
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/Reflex.meta +8 -0
- package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +46 -0
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -0
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -0
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/VContainer.meta +8 -0
- package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -0
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +55 -0
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -0
- package/Runtime/Unity/Integrations/Zenject.meta +8 -0
- package/Runtime/Unity/Integrations.meta +8 -0
- package/Runtime/Unity/MessageAwareComponent.cs +102 -0
- package/Runtime/Unity/MessageBusProviderHandle.cs +97 -0
- package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -0
- package/Runtime/Unity/MessagingComponent.cs +175 -9
- package/Runtime/Unity/MessagingComponentInstaller.cs +120 -0
- package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -0
- package/Runtime/Unity/ScriptableMessageBusProvider.cs +14 -0
- package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -0
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -0
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -0
- package/Samples~/DI/Prefabs.meta +8 -0
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -0
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -0
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -0
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -0
- package/Samples~/DI/Providers.meta +8 -0
- package/Samples~/DI/README.md +51 -0
- package/Samples~/DI/README.md.meta +7 -0
- package/Samples~/DI/Reflex/SampleInstaller.cs +75 -0
- package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -0
- package/Samples~/DI/Reflex.meta +8 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs +79 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -0
- package/Samples~/DI/VContainer.meta +8 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs +65 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -0
- package/Samples~/DI/Zenject.meta +8 -0
- package/Samples~/DI.meta +8 -0
- package/Samples~/Mini Combat/README.md +5 -7
- package/Samples~/Mini Combat/Walkthrough.md +18 -24
- package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs +12 -2
- package/Samples~/UI Buttons + Inspector/README.md.meta +7 -0
- package/Tests/Runtime/Benchmarks/BenchmarkSession.cs +444 -0
- package/Tests/Runtime/Benchmarks/BenchmarkSession.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs +94 -0
- package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs +395 -0
- package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs +77 -429
- package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs +142 -0
- package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs.meta +12 -0
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +50 -0
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef.meta +7 -0
- package/Tests/Runtime/Core/DefaultBusFallbackTests.cs +333 -0
- package/Tests/Runtime/Core/DefaultBusFallbackTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +278 -0
- package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs +289 -0
- package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions.meta +8 -0
- package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs +57 -0
- package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs +219 -0
- package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs +204 -0
- package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessagingTestBase.cs +4 -4
- package/Tests/Runtime/Core/NominalTests.cs +2 -2
- package/Tests/Runtime/Core/TypedShorthandTests.cs +2 -2
- package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs +1 -1
- package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs +2 -4
- package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs +162 -0
- package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset +16 -0
- package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset.meta +8 -0
- package/Tests/Runtime/Integrations/Reflex/Resources.meta +8 -0
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +27 -0
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/Reflex.meta +8 -0
- package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs +140 -0
- package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +37 -0
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/VContainer.meta +8 -0
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +37 -0
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs +140 -0
- package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/Zenject.meta +8 -0
- package/Tests/Runtime/Integrations.meta +8 -0
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs +64 -0
- package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs.meta +12 -0
- package/Tests/Runtime/TestUtilities.meta +9 -0
- package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs +57 -0
- package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs.meta +11 -0
- package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs +107 -0
- package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs.meta +12 -0
- package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs +210 -0
- package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs.meta +12 -0
- package/Tests/Runtime/Unity.meta +9 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
using NUnit.Framework;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Provides cleanup helpers for tests that instantiate Unity objects or disposable resources.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public abstract class UnityFixtureBase
|
|
11
|
+
{
|
|
12
|
+
private readonly List<IDisposable> _disposables = new();
|
|
13
|
+
private readonly List<UnityEngine.Object> _unityObjects = new();
|
|
14
|
+
|
|
15
|
+
protected T Track<T>(T unityObject)
|
|
16
|
+
where T : UnityEngine.Object
|
|
17
|
+
{
|
|
18
|
+
if (unityObject != null)
|
|
19
|
+
{
|
|
20
|
+
_unityObjects.Add(unityObject);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return unityObject;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protected T TrackDisposable<T>(T disposable)
|
|
27
|
+
where T : IDisposable
|
|
28
|
+
{
|
|
29
|
+
if (disposable != null)
|
|
30
|
+
{
|
|
31
|
+
_disposables.Add(disposable);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return disposable;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
[TearDown]
|
|
38
|
+
public virtual void TearDownManagedResources()
|
|
39
|
+
{
|
|
40
|
+
for (int i = _disposables.Count - 1; i >= 0; i--)
|
|
41
|
+
{
|
|
42
|
+
try
|
|
43
|
+
{
|
|
44
|
+
_disposables[i]?.Dispose();
|
|
45
|
+
}
|
|
46
|
+
catch
|
|
47
|
+
{
|
|
48
|
+
// Ignore teardown exceptions to avoid masking test failures.
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_disposables.Clear();
|
|
52
|
+
|
|
53
|
+
for (int i = _unityObjects.Count - 1; i >= 0; i--)
|
|
54
|
+
{
|
|
55
|
+
UnityEngine.Object instance = _unityObjects[i];
|
|
56
|
+
if (instance != null)
|
|
57
|
+
{
|
|
58
|
+
UnityEngine.Object.DestroyImmediate(instance);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
_unityObjects.Clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Unity
|
|
2
|
+
{
|
|
3
|
+
using DxMessaging.Core;
|
|
4
|
+
using DxMessaging.Core.MessageBus;
|
|
5
|
+
using DxMessaging.Tests.Runtime;
|
|
6
|
+
using DxMessaging.Unity;
|
|
7
|
+
using NUnit.Framework;
|
|
8
|
+
using UnityEngine;
|
|
9
|
+
|
|
10
|
+
[TestFixture]
|
|
11
|
+
public sealed class MessageBusProviderAssetTests : UnityFixtureBase
|
|
12
|
+
{
|
|
13
|
+
[Test]
|
|
14
|
+
public void GlobalProviderRespectsCurrentGlobalBus()
|
|
15
|
+
{
|
|
16
|
+
CurrentGlobalMessageBusProvider provider = Track(
|
|
17
|
+
ScriptableObject.CreateInstance<CurrentGlobalMessageBusProvider>()
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
MessageBus overrideBus = new();
|
|
21
|
+
using (MessageHandler.OverrideGlobalMessageBus(overrideBus))
|
|
22
|
+
{
|
|
23
|
+
IMessageBus resolved = provider.Resolve();
|
|
24
|
+
Assert.AreSame(
|
|
25
|
+
overrideBus,
|
|
26
|
+
resolved,
|
|
27
|
+
"Global provider should resolve the currently configured global bus."
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[Test]
|
|
33
|
+
public void InitialProviderAlwaysReturnsStartupBus()
|
|
34
|
+
{
|
|
35
|
+
InitialGlobalMessageBusProvider provider = Track(
|
|
36
|
+
ScriptableObject.CreateInstance<InitialGlobalMessageBusProvider>()
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
IMessageBus startupBus = provider.Resolve();
|
|
40
|
+
Assert.AreSame(
|
|
41
|
+
MessageHandler.InitialGlobalMessageBus,
|
|
42
|
+
startupBus,
|
|
43
|
+
"Initial provider should resolve the startup global bus."
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
using (MessageHandler.OverrideGlobalMessageBus(new MessageBus()))
|
|
47
|
+
{
|
|
48
|
+
IMessageBus resolvedDuringOverride = provider.Resolve();
|
|
49
|
+
Assert.AreSame(
|
|
50
|
+
startupBus,
|
|
51
|
+
resolvedDuringOverride,
|
|
52
|
+
"Initial provider should ignore overrides and continue returning the startup bus."
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Unity
|
|
2
|
+
{
|
|
3
|
+
using DxMessaging.Core.MessageBus;
|
|
4
|
+
using DxMessaging.Unity;
|
|
5
|
+
using NUnit.Framework;
|
|
6
|
+
using UnityEngine;
|
|
7
|
+
|
|
8
|
+
[TestFixture]
|
|
9
|
+
public sealed class MessageBusProviderHandleTests
|
|
10
|
+
{
|
|
11
|
+
[Test]
|
|
12
|
+
public void TryGetProviderReturnsRuntimeProvider()
|
|
13
|
+
{
|
|
14
|
+
TestMessageBusProvider runtimeProvider = new(new MessageBus());
|
|
15
|
+
MessageBusProviderHandle handle = MessageBusProviderHandle.FromProvider(
|
|
16
|
+
runtimeProvider
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
bool resolved = handle.TryGetProvider(out IMessageBusProvider provider);
|
|
20
|
+
|
|
21
|
+
Assert.IsTrue(resolved);
|
|
22
|
+
Assert.AreSame(runtimeProvider, provider);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
[Test]
|
|
26
|
+
public void TryGetProviderReturnsAssetProvider()
|
|
27
|
+
{
|
|
28
|
+
TestScriptableMessageBusProvider providerAsset =
|
|
29
|
+
ScriptableObject.CreateInstance<TestScriptableMessageBusProvider>();
|
|
30
|
+
providerAsset.Configure(new MessageBus());
|
|
31
|
+
MessageBusProviderHandle handle = new(providerAsset);
|
|
32
|
+
|
|
33
|
+
bool resolved = handle.TryGetProvider(out IMessageBusProvider provider);
|
|
34
|
+
|
|
35
|
+
Assert.IsTrue(resolved);
|
|
36
|
+
Assert.AreSame(providerAsset, provider);
|
|
37
|
+
|
|
38
|
+
Object.DestroyImmediate(providerAsset);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[Test]
|
|
42
|
+
public void ResolveBusReturnsNullWhenUnassigned()
|
|
43
|
+
{
|
|
44
|
+
MessageBusProviderHandle handle = MessageBusProviderHandle.Empty;
|
|
45
|
+
|
|
46
|
+
IMessageBus bus = handle.ResolveBus();
|
|
47
|
+
|
|
48
|
+
Assert.IsNull(bus);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
[Test]
|
|
52
|
+
public void HandleSurvivesSerializationCycle()
|
|
53
|
+
{
|
|
54
|
+
TestScriptableMessageBusProvider providerAsset =
|
|
55
|
+
ScriptableObject.CreateInstance<TestScriptableMessageBusProvider>();
|
|
56
|
+
providerAsset.Configure(new MessageBus());
|
|
57
|
+
MessageBusProviderHandle handle = new(providerAsset);
|
|
58
|
+
|
|
59
|
+
HandleWrapper wrapper = new() { Handle = handle };
|
|
60
|
+
string json = JsonUtility.ToJson(wrapper);
|
|
61
|
+
HandleWrapper deserialized = JsonUtility.FromJson<HandleWrapper>(json);
|
|
62
|
+
|
|
63
|
+
bool resolved = deserialized.Handle.TryGetProvider(out IMessageBusProvider provider);
|
|
64
|
+
|
|
65
|
+
Assert.IsTrue(resolved);
|
|
66
|
+
Assert.AreSame(providerAsset, provider);
|
|
67
|
+
|
|
68
|
+
Object.DestroyImmediate(providerAsset);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private sealed class TestMessageBusProvider : IMessageBusProvider
|
|
72
|
+
{
|
|
73
|
+
private readonly IMessageBus _bus;
|
|
74
|
+
|
|
75
|
+
public TestMessageBusProvider(IMessageBus bus)
|
|
76
|
+
{
|
|
77
|
+
_bus = bus;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public IMessageBus Resolve()
|
|
81
|
+
{
|
|
82
|
+
return _bus;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[System.Serializable]
|
|
87
|
+
private struct HandleWrapper
|
|
88
|
+
{
|
|
89
|
+
public MessageBusProviderHandle Handle;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private sealed class TestScriptableMessageBusProvider : ScriptableMessageBusProvider
|
|
93
|
+
{
|
|
94
|
+
private IMessageBus _bus;
|
|
95
|
+
|
|
96
|
+
public void Configure(IMessageBus bus)
|
|
97
|
+
{
|
|
98
|
+
_bus = bus;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public override IMessageBus Resolve()
|
|
102
|
+
{
|
|
103
|
+
return _bus;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Unity
|
|
2
|
+
{
|
|
3
|
+
using System.Collections;
|
|
4
|
+
using System.Text.RegularExpressions;
|
|
5
|
+
using DxMessaging.Core;
|
|
6
|
+
using DxMessaging.Core.MessageBus;
|
|
7
|
+
using DxMessaging.Core.Messages;
|
|
8
|
+
using DxMessaging.Unity;
|
|
9
|
+
using NUnit.Framework;
|
|
10
|
+
using UnityEngine;
|
|
11
|
+
using UnityEngine.TestTools;
|
|
12
|
+
|
|
13
|
+
public sealed class MessagingComponentProviderIntegrationTests
|
|
14
|
+
{
|
|
15
|
+
[UnityTest]
|
|
16
|
+
public IEnumerator ConfigureWithProviderHandleRoutesThroughProviderBus()
|
|
17
|
+
{
|
|
18
|
+
MessageBus messageBus = new();
|
|
19
|
+
TestScriptableMessageBusProvider provider =
|
|
20
|
+
ScriptableObject.CreateInstance<TestScriptableMessageBusProvider>();
|
|
21
|
+
provider.Configure(messageBus);
|
|
22
|
+
MessageBusProviderHandle handle = new(provider);
|
|
23
|
+
|
|
24
|
+
GameObject owner = new("MessagingComponentOwner");
|
|
25
|
+
MessagingComponent messagingComponent = owner.AddComponent<MessagingComponent>();
|
|
26
|
+
messagingComponent.Configure(handle, MessageBusRebindMode.RebindActive);
|
|
27
|
+
|
|
28
|
+
TestListener listener = owner.AddComponent<TestListener>();
|
|
29
|
+
listener.Initialize(messagingComponent);
|
|
30
|
+
|
|
31
|
+
yield return null;
|
|
32
|
+
|
|
33
|
+
TestUntargetedMessage message = new(42);
|
|
34
|
+
messageBus.UntargetedBroadcast(ref message);
|
|
35
|
+
|
|
36
|
+
Assert.AreEqual(1, listener.ReceivedCount);
|
|
37
|
+
|
|
38
|
+
Object.DestroyImmediate(owner);
|
|
39
|
+
Object.DestroyImmediate(provider);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
[UnityTest]
|
|
43
|
+
public IEnumerator InstallerAppliesConfigurationToChildren()
|
|
44
|
+
{
|
|
45
|
+
MessageBus messageBus = new();
|
|
46
|
+
TestScriptableMessageBusProvider provider =
|
|
47
|
+
ScriptableObject.CreateInstance<TestScriptableMessageBusProvider>();
|
|
48
|
+
provider.Configure(messageBus);
|
|
49
|
+
MessageBusProviderHandle handle = new(provider);
|
|
50
|
+
|
|
51
|
+
GameObject root = new("InstallerRoot");
|
|
52
|
+
MessagingComponentInstaller installer =
|
|
53
|
+
root.AddComponent<MessagingComponentInstaller>();
|
|
54
|
+
installer.SetProvider(handle);
|
|
55
|
+
|
|
56
|
+
GameObject child = new("InstallerListener");
|
|
57
|
+
child.transform.SetParent(root.transform);
|
|
58
|
+
MessagingComponent messagingComponent = child.AddComponent<MessagingComponent>();
|
|
59
|
+
|
|
60
|
+
installer.ApplyConfiguration();
|
|
61
|
+
|
|
62
|
+
TestListener listener = child.AddComponent<TestListener>();
|
|
63
|
+
listener.Initialize(messagingComponent);
|
|
64
|
+
|
|
65
|
+
yield return null;
|
|
66
|
+
|
|
67
|
+
TestUntargetedMessage message = new(19);
|
|
68
|
+
messageBus.UntargetedBroadcast(ref message);
|
|
69
|
+
|
|
70
|
+
Assert.AreEqual(1, listener.ReceivedCount);
|
|
71
|
+
|
|
72
|
+
Object.DestroyImmediate(root);
|
|
73
|
+
Object.DestroyImmediate(provider);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
[UnityTest]
|
|
77
|
+
public IEnumerator CreateRegistrationBuilderUsesConfiguredProviderBus()
|
|
78
|
+
{
|
|
79
|
+
MessageBus messageBus = new();
|
|
80
|
+
TestProvider provider = new(messageBus);
|
|
81
|
+
|
|
82
|
+
GameObject owner = new("BuilderOwner");
|
|
83
|
+
MessagingComponent messagingComponent = owner.AddComponent<MessagingComponent>();
|
|
84
|
+
messagingComponent.Configure(provider, MessageBusRebindMode.RebindActive);
|
|
85
|
+
|
|
86
|
+
IMessageRegistrationBuilder builder = messagingComponent.CreateRegistrationBuilder();
|
|
87
|
+
using (
|
|
88
|
+
MessageRegistrationLease lease = builder.Build(
|
|
89
|
+
new MessageRegistrationBuildOptions()
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
{
|
|
93
|
+
Assert.AreSame(messageBus, lease.MessageBus);
|
|
94
|
+
Assert.IsFalse(lease.Token.Enabled);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Object.DestroyImmediate(owner);
|
|
98
|
+
yield break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[UnityTest]
|
|
102
|
+
public IEnumerator CreateRegistrationBuilderUsesOverrideBusWhenNoProvider()
|
|
103
|
+
{
|
|
104
|
+
MessageBus messageBus = new();
|
|
105
|
+
|
|
106
|
+
GameObject owner = new("OverrideOwner");
|
|
107
|
+
MessagingComponent messagingComponent = owner.AddComponent<MessagingComponent>();
|
|
108
|
+
messagingComponent.Configure(messageBus, MessageBusRebindMode.RebindActive);
|
|
109
|
+
|
|
110
|
+
IMessageRegistrationBuilder builder = messagingComponent.CreateRegistrationBuilder();
|
|
111
|
+
using (
|
|
112
|
+
MessageRegistrationLease lease = builder.Build(
|
|
113
|
+
new MessageRegistrationBuildOptions()
|
|
114
|
+
)
|
|
115
|
+
)
|
|
116
|
+
{
|
|
117
|
+
Assert.AreSame(messageBus, lease.MessageBus);
|
|
118
|
+
}
|
|
119
|
+
Object.DestroyImmediate(owner);
|
|
120
|
+
yield break;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
[UnityTest]
|
|
124
|
+
public IEnumerator InstallerWithoutConfigurationLogsWarning()
|
|
125
|
+
{
|
|
126
|
+
GameObject root = new("InstallerWarningRoot");
|
|
127
|
+
MessagingComponentInstaller installer =
|
|
128
|
+
root.AddComponent<MessagingComponentInstaller>();
|
|
129
|
+
|
|
130
|
+
GameObject child = new("InstallerWarningChild");
|
|
131
|
+
child.transform.SetParent(root.transform);
|
|
132
|
+
_ = child.AddComponent<MessagingComponent>();
|
|
133
|
+
|
|
134
|
+
LogAssert.Expect(
|
|
135
|
+
LogType.Warning,
|
|
136
|
+
new Regex(
|
|
137
|
+
"MessagingComponentInstaller.+has no provider or explicit message bus configured"
|
|
138
|
+
)
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
installer.ApplyConfiguration();
|
|
142
|
+
yield return null;
|
|
143
|
+
|
|
144
|
+
Object.DestroyImmediate(root);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private sealed class TestListener : MonoBehaviour
|
|
148
|
+
{
|
|
149
|
+
private MessageRegistrationToken _token;
|
|
150
|
+
public int ReceivedCount { get; private set; }
|
|
151
|
+
|
|
152
|
+
public void Initialize(MessagingComponent messagingComponent)
|
|
153
|
+
{
|
|
154
|
+
_token = messagingComponent.Create(this);
|
|
155
|
+
_ = _token.RegisterUntargeted<TestUntargetedMessage>(OnUntargetedMessage);
|
|
156
|
+
_token.Enable();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private void OnUntargetedMessage(ref TestUntargetedMessage message)
|
|
160
|
+
{
|
|
161
|
+
ReceivedCount++;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private void OnDestroy()
|
|
165
|
+
{
|
|
166
|
+
_token?.Disable();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private sealed class TestScriptableMessageBusProvider : ScriptableMessageBusProvider
|
|
171
|
+
{
|
|
172
|
+
private IMessageBus _bus;
|
|
173
|
+
|
|
174
|
+
public void Configure(IMessageBus bus)
|
|
175
|
+
{
|
|
176
|
+
_bus = bus;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
public override IMessageBus Resolve()
|
|
180
|
+
{
|
|
181
|
+
return _bus;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private sealed class TestProvider : IMessageBusProvider
|
|
186
|
+
{
|
|
187
|
+
private readonly IMessageBus _messageBus;
|
|
188
|
+
|
|
189
|
+
public TestProvider(IMessageBus messageBus)
|
|
190
|
+
{
|
|
191
|
+
_messageBus = messageBus;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
public IMessageBus Resolve()
|
|
195
|
+
{
|
|
196
|
+
return _messageBus;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
private readonly struct TestUntargetedMessage : IUntargetedMessage
|
|
201
|
+
{
|
|
202
|
+
public TestUntargetedMessage(int value)
|
|
203
|
+
{
|
|
204
|
+
Value = value;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public int Value { get; }
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
"UnityEngine.TestRunner",
|
|
6
6
|
"UnityEditor.TestRunner",
|
|
7
7
|
"WallstopStudios.DxMessaging",
|
|
8
|
-
"
|
|
8
|
+
"WallstopStudios.DxMessaging.Reflex",
|
|
9
|
+
"WallstopStudios.DxMessaging.VContainer",
|
|
10
|
+
"WallstopStudios.DxMessaging.Zenject"
|
|
9
11
|
],
|
|
10
12
|
"includePlatforms": [],
|
|
11
13
|
"excludePlatforms": [],
|