com.wallstop-studios.dxmessaging 2.0.0 → 2.1.0
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 +1 -1
- package/Docs/Index.md +28 -25
- package/Docs/Install.md +29 -6
- package/Docs/Integrations/Reflex.md +292 -0
- package/Docs/Integrations/Reflex.md.meta +7 -0
- 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/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/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/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 +164 -2
- 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 +81 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -0
- package/Samples~/DI/VContainer.meta +8 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs +67 -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,219 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Core
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using DxMessaging.Core;
|
|
5
|
+
using DxMessaging.Core.MessageBus;
|
|
6
|
+
using DxMessaging.Core.Messages;
|
|
7
|
+
using NUnit.Framework;
|
|
8
|
+
using GlobalMessageBus = DxMessaging.Core.MessageBus.MessageBus;
|
|
9
|
+
|
|
10
|
+
[TestFixture]
|
|
11
|
+
public sealed class MessageHandlerGlobalBusTests
|
|
12
|
+
{
|
|
13
|
+
private IMessageBus _originalBus;
|
|
14
|
+
|
|
15
|
+
[SetUp]
|
|
16
|
+
public void CaptureOriginalBus()
|
|
17
|
+
{
|
|
18
|
+
_originalBus = MessageHandler.MessageBus;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
[TearDown]
|
|
22
|
+
public void RestoreOriginalBus()
|
|
23
|
+
{
|
|
24
|
+
MessageHandler.SetGlobalMessageBus(_originalBus);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[Test]
|
|
28
|
+
public void SetGlobalMessageBusReplacesGlobalInstance()
|
|
29
|
+
{
|
|
30
|
+
GlobalMessageBus customBus = new GlobalMessageBus();
|
|
31
|
+
MessageHandler.SetGlobalMessageBus(customBus);
|
|
32
|
+
|
|
33
|
+
Assert.AreSame(customBus, MessageHandler.MessageBus);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
[Test]
|
|
37
|
+
public void ResetGlobalMessageBusRestoresDefaultInstance()
|
|
38
|
+
{
|
|
39
|
+
MessageHandler.ResetGlobalMessageBus();
|
|
40
|
+
IMessageBus expectedDefault = MessageHandler.MessageBus;
|
|
41
|
+
|
|
42
|
+
GlobalMessageBus customBus = new GlobalMessageBus();
|
|
43
|
+
MessageHandler.SetGlobalMessageBus(customBus);
|
|
44
|
+
Assert.AreSame(customBus, MessageHandler.MessageBus);
|
|
45
|
+
|
|
46
|
+
MessageHandler.ResetGlobalMessageBus();
|
|
47
|
+
Assert.AreSame(expectedDefault, MessageHandler.MessageBus);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
[Test]
|
|
51
|
+
public void SetGlobalMessageBusAcceptsInterfaceImplementation()
|
|
52
|
+
{
|
|
53
|
+
WrapperMessageBus wrapper = new WrapperMessageBus(new GlobalMessageBus());
|
|
54
|
+
MessageHandler.SetGlobalMessageBus(wrapper);
|
|
55
|
+
Assert.AreSame(wrapper, MessageHandler.MessageBus);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[Test]
|
|
59
|
+
public void OverrideGlobalMessageBusScopeRestoresPreviousBus()
|
|
60
|
+
{
|
|
61
|
+
GlobalMessageBus primary = new GlobalMessageBus();
|
|
62
|
+
MessageHandler.SetGlobalMessageBus(primary);
|
|
63
|
+
WrapperMessageBus secondary = new WrapperMessageBus(new GlobalMessageBus());
|
|
64
|
+
|
|
65
|
+
using (MessageHandler.OverrideGlobalMessageBus(secondary))
|
|
66
|
+
{
|
|
67
|
+
Assert.AreSame(secondary, MessageHandler.MessageBus);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
Assert.AreSame(primary, MessageHandler.MessageBus);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private sealed class WrapperMessageBus : IMessageBus
|
|
74
|
+
{
|
|
75
|
+
private readonly IMessageBus _inner;
|
|
76
|
+
|
|
77
|
+
public WrapperMessageBus(IMessageBus inner)
|
|
78
|
+
{
|
|
79
|
+
_inner = inner ?? throw new ArgumentNullException(nameof(inner));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public bool DiagnosticsMode => _inner.DiagnosticsMode;
|
|
83
|
+
|
|
84
|
+
public int RegisteredGlobalSequentialIndex => _inner.RegisteredGlobalSequentialIndex;
|
|
85
|
+
|
|
86
|
+
public int RegisteredBroadcast => _inner.RegisteredBroadcast;
|
|
87
|
+
|
|
88
|
+
public int RegisteredTargeted => _inner.RegisteredTargeted;
|
|
89
|
+
|
|
90
|
+
public int RegisteredUntargeted => _inner.RegisteredUntargeted;
|
|
91
|
+
|
|
92
|
+
public RegistrationLog Log => _inner.Log;
|
|
93
|
+
|
|
94
|
+
public long EmissionId => _inner.EmissionId;
|
|
95
|
+
|
|
96
|
+
public Action RegisterUntargeted<T>(MessageHandler messageHandler, int priority = 0)
|
|
97
|
+
where T : IUntargetedMessage =>
|
|
98
|
+
_inner.RegisterUntargeted<T>(messageHandler, priority);
|
|
99
|
+
|
|
100
|
+
public Action RegisterUntargetedPostProcessor<T>(
|
|
101
|
+
MessageHandler messageHandler,
|
|
102
|
+
int priority = 0
|
|
103
|
+
)
|
|
104
|
+
where T : IUntargetedMessage =>
|
|
105
|
+
_inner.RegisterUntargetedPostProcessor<T>(messageHandler, priority);
|
|
106
|
+
|
|
107
|
+
public Action RegisterTargeted<T>(
|
|
108
|
+
InstanceId target,
|
|
109
|
+
MessageHandler messageHandler,
|
|
110
|
+
int priority = 0
|
|
111
|
+
)
|
|
112
|
+
where T : ITargetedMessage =>
|
|
113
|
+
_inner.RegisterTargeted<T>(target, messageHandler, priority);
|
|
114
|
+
|
|
115
|
+
public Action RegisterTargetedPostProcessor<T>(
|
|
116
|
+
InstanceId target,
|
|
117
|
+
MessageHandler messageHandler,
|
|
118
|
+
int priority = 0
|
|
119
|
+
)
|
|
120
|
+
where T : ITargetedMessage =>
|
|
121
|
+
_inner.RegisterTargetedPostProcessor<T>(target, messageHandler, priority);
|
|
122
|
+
|
|
123
|
+
public Action RegisterTargetedWithoutTargeting<T>(
|
|
124
|
+
MessageHandler messageHandler,
|
|
125
|
+
int priority = 0
|
|
126
|
+
)
|
|
127
|
+
where T : ITargetedMessage =>
|
|
128
|
+
_inner.RegisterTargetedWithoutTargeting<T>(messageHandler, priority);
|
|
129
|
+
|
|
130
|
+
public Action RegisterTargetedWithoutTargetingPostProcessor<T>(
|
|
131
|
+
MessageHandler messageHandler,
|
|
132
|
+
int priority = 0
|
|
133
|
+
)
|
|
134
|
+
where T : ITargetedMessage =>
|
|
135
|
+
_inner.RegisterTargetedWithoutTargetingPostProcessor<T>(messageHandler, priority);
|
|
136
|
+
|
|
137
|
+
public Action RegisterBroadcastPostProcessor<T>(
|
|
138
|
+
InstanceId source,
|
|
139
|
+
MessageHandler messageHandler,
|
|
140
|
+
int priority = 0
|
|
141
|
+
)
|
|
142
|
+
where T : IBroadcastMessage =>
|
|
143
|
+
_inner.RegisterBroadcastPostProcessor<T>(source, messageHandler, priority);
|
|
144
|
+
|
|
145
|
+
public Action RegisterBroadcastWithoutSourcePostProcessor<T>(
|
|
146
|
+
MessageHandler messageHandler,
|
|
147
|
+
int priority = 0
|
|
148
|
+
)
|
|
149
|
+
where T : IBroadcastMessage =>
|
|
150
|
+
_inner.RegisterBroadcastWithoutSourcePostProcessor<T>(messageHandler, priority);
|
|
151
|
+
|
|
152
|
+
public Action RegisterSourcedBroadcast<T>(
|
|
153
|
+
InstanceId source,
|
|
154
|
+
MessageHandler messageHandler,
|
|
155
|
+
int priority = 0
|
|
156
|
+
)
|
|
157
|
+
where T : IBroadcastMessage =>
|
|
158
|
+
_inner.RegisterSourcedBroadcast<T>(source, messageHandler, priority);
|
|
159
|
+
|
|
160
|
+
public Action RegisterSourcedBroadcastWithoutSource<T>(
|
|
161
|
+
MessageHandler messageHandler,
|
|
162
|
+
int priority = 0
|
|
163
|
+
)
|
|
164
|
+
where T : IBroadcastMessage =>
|
|
165
|
+
_inner.RegisterSourcedBroadcastWithoutSource<T>(messageHandler, priority);
|
|
166
|
+
|
|
167
|
+
public Action RegisterGlobalAcceptAll(MessageHandler messageHandler) =>
|
|
168
|
+
_inner.RegisterGlobalAcceptAll(messageHandler);
|
|
169
|
+
|
|
170
|
+
public Action RegisterUntargetedInterceptor<T>(
|
|
171
|
+
IMessageBus.UntargetedInterceptor<T> interceptor,
|
|
172
|
+
int priority = 0
|
|
173
|
+
)
|
|
174
|
+
where T : IUntargetedMessage =>
|
|
175
|
+
_inner.RegisterUntargetedInterceptor(interceptor, priority);
|
|
176
|
+
|
|
177
|
+
public Action RegisterTargetedInterceptor<T>(
|
|
178
|
+
IMessageBus.TargetedInterceptor<T> interceptor,
|
|
179
|
+
int priority = 0
|
|
180
|
+
)
|
|
181
|
+
where T : ITargetedMessage =>
|
|
182
|
+
_inner.RegisterTargetedInterceptor(interceptor, priority);
|
|
183
|
+
|
|
184
|
+
public Action RegisterBroadcastInterceptor<T>(
|
|
185
|
+
IMessageBus.BroadcastInterceptor<T> interceptor,
|
|
186
|
+
int priority = 0
|
|
187
|
+
)
|
|
188
|
+
where T : IBroadcastMessage =>
|
|
189
|
+
_inner.RegisterBroadcastInterceptor(interceptor, priority);
|
|
190
|
+
|
|
191
|
+
public void UntypedUntargetedBroadcast(IUntargetedMessage typedMessage) =>
|
|
192
|
+
_inner.UntypedUntargetedBroadcast(typedMessage);
|
|
193
|
+
|
|
194
|
+
public void UntargetedBroadcast<TMessage>(ref TMessage typedMessage)
|
|
195
|
+
where TMessage : IUntargetedMessage => _inner.UntargetedBroadcast(ref typedMessage);
|
|
196
|
+
|
|
197
|
+
public void UntypedTargetedBroadcast(
|
|
198
|
+
InstanceId target,
|
|
199
|
+
ITargetedMessage typedMessage
|
|
200
|
+
) => _inner.UntypedTargetedBroadcast(target, typedMessage);
|
|
201
|
+
|
|
202
|
+
public void TargetedBroadcast<TMessage>(
|
|
203
|
+
ref InstanceId target,
|
|
204
|
+
ref TMessage typedMessage
|
|
205
|
+
)
|
|
206
|
+
where TMessage : ITargetedMessage =>
|
|
207
|
+
_inner.TargetedBroadcast(ref target, ref typedMessage);
|
|
208
|
+
|
|
209
|
+
public void UntypedSourcedBroadcast(
|
|
210
|
+
InstanceId source,
|
|
211
|
+
IBroadcastMessage typedMessage
|
|
212
|
+
) => _inner.UntypedSourcedBroadcast(source, typedMessage);
|
|
213
|
+
|
|
214
|
+
public void SourcedBroadcast<TMessage>(ref InstanceId source, ref TMessage typedMessage)
|
|
215
|
+
where TMessage : IBroadcastMessage =>
|
|
216
|
+
_inner.SourcedBroadcast(ref source, ref typedMessage);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Core
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using DxMessaging.Core;
|
|
5
|
+
using DxMessaging.Core.MessageBus;
|
|
6
|
+
using DxMessaging.Tests.Runtime.Scripts.Messages;
|
|
7
|
+
using NUnit.Framework;
|
|
8
|
+
|
|
9
|
+
public sealed class MessageRegistrationBuilderTests
|
|
10
|
+
{
|
|
11
|
+
private sealed class PassthroughMessageBusProvider : IMessageBusProvider
|
|
12
|
+
{
|
|
13
|
+
private readonly IMessageBus _messageBus;
|
|
14
|
+
|
|
15
|
+
public PassthroughMessageBusProvider(IMessageBus messageBus)
|
|
16
|
+
{
|
|
17
|
+
_messageBus = messageBus ?? throw new ArgumentNullException(nameof(messageBus));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public IMessageBus Resolve()
|
|
21
|
+
{
|
|
22
|
+
return _messageBus;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private MessageRegistrationBuilder _builder;
|
|
27
|
+
private IMessageBus _defaultBus;
|
|
28
|
+
|
|
29
|
+
[SetUp]
|
|
30
|
+
public void SetUp()
|
|
31
|
+
{
|
|
32
|
+
_defaultBus = new MessageBus();
|
|
33
|
+
IMessageBusProvider provider = new PassthroughMessageBusProvider(_defaultBus);
|
|
34
|
+
_builder = new MessageRegistrationBuilder(provider);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
[TearDown]
|
|
38
|
+
public void TearDown()
|
|
39
|
+
{
|
|
40
|
+
_builder = null;
|
|
41
|
+
_defaultBus = null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
[Test]
|
|
45
|
+
public void BuildUsesResolvedBusWhenNoOverrideProvided()
|
|
46
|
+
{
|
|
47
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions();
|
|
48
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
49
|
+
|
|
50
|
+
Assert.AreSame(_defaultBus, lease.MessageBus);
|
|
51
|
+
Assert.IsNotNull(lease.Token);
|
|
52
|
+
Assert.IsFalse(lease.Token.Enabled);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[Test]
|
|
56
|
+
public void ActivateOnBuildEnablesTokenAndLifecycle()
|
|
57
|
+
{
|
|
58
|
+
bool buildInvoked = false;
|
|
59
|
+
bool activateInvoked = false;
|
|
60
|
+
bool deactivateInvoked = false;
|
|
61
|
+
bool disposeInvoked = false;
|
|
62
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
63
|
+
{
|
|
64
|
+
ActivateOnBuild = true,
|
|
65
|
+
Configure = token =>
|
|
66
|
+
{
|
|
67
|
+
_ = token.RegisterUntargeted<SimpleUntargetedMessage>(OnSimpleMessage);
|
|
68
|
+
},
|
|
69
|
+
Lifecycle = new MessageRegistrationLifecycle(
|
|
70
|
+
token =>
|
|
71
|
+
{
|
|
72
|
+
buildInvoked = true;
|
|
73
|
+
},
|
|
74
|
+
token =>
|
|
75
|
+
{
|
|
76
|
+
activateInvoked = true;
|
|
77
|
+
},
|
|
78
|
+
token =>
|
|
79
|
+
{
|
|
80
|
+
deactivateInvoked = true;
|
|
81
|
+
},
|
|
82
|
+
token =>
|
|
83
|
+
{
|
|
84
|
+
disposeInvoked = true;
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
using (MessageRegistrationLease lease = _builder.Build(options))
|
|
90
|
+
{
|
|
91
|
+
Assert.IsTrue(buildInvoked);
|
|
92
|
+
Assert.IsTrue(lease.Token.Enabled);
|
|
93
|
+
Assert.IsTrue(lease.IsActive);
|
|
94
|
+
Assert.IsTrue(activateInvoked);
|
|
95
|
+
|
|
96
|
+
lease.Deactivate();
|
|
97
|
+
Assert.IsFalse(lease.IsActive);
|
|
98
|
+
Assert.IsTrue(deactivateInvoked);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
Assert.IsTrue(disposeInvoked);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
[Test]
|
|
105
|
+
public void PreferredMessageBusOverridesProvider()
|
|
106
|
+
{
|
|
107
|
+
MessageBus preferredBus = new MessageBus();
|
|
108
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
109
|
+
{
|
|
110
|
+
PreferredMessageBus = preferredBus,
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
114
|
+
Assert.AreSame(preferredBus, lease.MessageBus);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
[Test]
|
|
118
|
+
public void MessageBusProviderOptionOverridesBuilderDefault()
|
|
119
|
+
{
|
|
120
|
+
MessageBus providerBus = new MessageBus();
|
|
121
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
122
|
+
{
|
|
123
|
+
MessageBusProvider = new PassthroughMessageBusProvider(providerBus),
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
127
|
+
Assert.AreSame(providerBus, lease.MessageBus);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
[Test]
|
|
131
|
+
public void SyntheticOwnerGeneratedWhenOwnerMissing()
|
|
132
|
+
{
|
|
133
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions();
|
|
134
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
135
|
+
Assert.AreNotEqual(InstanceId.EmptyId, lease.Owner);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
[Test]
|
|
139
|
+
public void HandlerStartsInactiveWhenConfigured()
|
|
140
|
+
{
|
|
141
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
142
|
+
{
|
|
143
|
+
HandlerStartsActive = false,
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
147
|
+
|
|
148
|
+
Assert.IsFalse(lease.Handler.active);
|
|
149
|
+
lease.Activate();
|
|
150
|
+
Assert.IsTrue(lease.IsActive);
|
|
151
|
+
Assert.IsTrue(lease.Handler.active);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
[Test]
|
|
155
|
+
public void DiagnosticsModeRespectedWhenEnabled()
|
|
156
|
+
{
|
|
157
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
158
|
+
{
|
|
159
|
+
EnableDiagnostics = true,
|
|
160
|
+
Configure = token =>
|
|
161
|
+
{
|
|
162
|
+
_ = token.RegisterUntargeted<SimpleUntargetedMessage>(OnSimpleMessage);
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
using MessageRegistrationLease lease = _builder.Build(options);
|
|
167
|
+
Assert.IsTrue(
|
|
168
|
+
lease.Token.DiagnosticMode,
|
|
169
|
+
"Diagnostics flag should propagate to the token."
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
[Test]
|
|
174
|
+
public void DisposingActiveLeaseInvokesDeactivateLifecycle()
|
|
175
|
+
{
|
|
176
|
+
bool deactivateInvoked = false;
|
|
177
|
+
bool disposeInvoked = false;
|
|
178
|
+
|
|
179
|
+
MessageRegistrationBuildOptions options = new MessageRegistrationBuildOptions
|
|
180
|
+
{
|
|
181
|
+
ActivateOnBuild = true,
|
|
182
|
+
Lifecycle = new MessageRegistrationLifecycle(
|
|
183
|
+
null,
|
|
184
|
+
null,
|
|
185
|
+
token => deactivateInvoked = true,
|
|
186
|
+
token => disposeInvoked = true
|
|
187
|
+
),
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
using (MessageRegistrationLease lease = _builder.Build(options))
|
|
191
|
+
{
|
|
192
|
+
// No-op
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
Assert.IsTrue(
|
|
196
|
+
deactivateInvoked,
|
|
197
|
+
"Disposing an active lease should trigger OnDeactivate before tear-down."
|
|
198
|
+
);
|
|
199
|
+
Assert.IsTrue(disposeInvoked, "Disposing a lease should trigger OnDispose callbacks.");
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private static void OnSimpleMessage(ref SimpleUntargetedMessage message) { }
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -7,8 +7,8 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
7
7
|
using System.Linq;
|
|
8
8
|
using DxMessaging.Core;
|
|
9
9
|
using DxMessaging.Core.MessageBus;
|
|
10
|
+
using DxMessaging.Unity;
|
|
10
11
|
using NUnit.Framework;
|
|
11
|
-
using Unity;
|
|
12
12
|
using UnityEngine;
|
|
13
13
|
using UnityEngine.TestTools;
|
|
14
14
|
using Debug = UnityEngine.Debug;
|
|
@@ -43,7 +43,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
|
|
46
|
+
IMessageBus messageBus = MessageHandler.MessageBus;
|
|
47
47
|
Assert.IsNotNull(messageBus);
|
|
48
48
|
messageBus.Log.Enabled = true;
|
|
49
49
|
_numRegistrations = 150;
|
|
@@ -53,7 +53,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
53
53
|
|
|
54
54
|
protected void LogMessageBusStatus()
|
|
55
55
|
{
|
|
56
|
-
|
|
56
|
+
IMessageBus messageBus = MessageHandler.MessageBus;
|
|
57
57
|
Debug.Log(
|
|
58
58
|
$"Untargeted registrations: {messageBus.RegisteredUntargeted}, "
|
|
59
59
|
+ $"targeted registrations: {messageBus.RegisteredTargeted}, "
|
|
@@ -177,7 +177,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
177
177
|
|
|
178
178
|
protected static IEnumerator WaitUntilMessageHandlerIsFresh()
|
|
179
179
|
{
|
|
180
|
-
|
|
180
|
+
IMessageBus messageBus = MessageHandler.MessageBus;
|
|
181
181
|
Assert.IsNotNull(messageBus);
|
|
182
182
|
|
|
183
183
|
Stopwatch timer = Stopwatch.StartNew();
|
|
@@ -265,7 +265,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
265
265
|
[UnityTest]
|
|
266
266
|
public IEnumerator Lifetime()
|
|
267
267
|
{
|
|
268
|
-
|
|
268
|
+
IMessageBus messageBus = MessageHandler.MessageBus;
|
|
269
269
|
Assert.IsNotNull(messageBus);
|
|
270
270
|
|
|
271
271
|
GameObject test = new(nameof(Lifetime), typeof(SimpleMessageAwareComponent));
|
|
@@ -352,7 +352,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
352
352
|
[UnityTest]
|
|
353
353
|
public IEnumerator NonMessagingObjects()
|
|
354
354
|
{
|
|
355
|
-
|
|
355
|
+
IMessageBus messageBus = MessageHandler.MessageBus;
|
|
356
356
|
Assert.IsNotNull(messageBus);
|
|
357
357
|
|
|
358
358
|
GameObject test1 = new("NonMessaging1");
|
|
@@ -168,7 +168,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
168
168
|
ShorthandTargetedBroadcastComponent comp =
|
|
169
169
|
go.GetComponent<ShorthandTargetedBroadcastComponent>();
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
IMessageBus bus = MessageHandler.MessageBus;
|
|
172
172
|
bool cancel = true;
|
|
173
173
|
Action dereg = bus.RegisterTargetedInterceptor(
|
|
174
174
|
(ref InstanceId t, ref SimpleTargetedMessage m) => !cancel
|
|
@@ -203,7 +203,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
203
203
|
ShorthandTargetedBroadcastComponent comp =
|
|
204
204
|
go.GetComponent<ShorthandTargetedBroadcastComponent>();
|
|
205
205
|
|
|
206
|
-
|
|
206
|
+
IMessageBus bus = MessageHandler.MessageBus;
|
|
207
207
|
bool cancel = true;
|
|
208
208
|
Action dereg = bus.RegisterBroadcastInterceptor(
|
|
209
209
|
(ref InstanceId s, ref SimpleBroadcastMessage m) => !cancel
|
|
@@ -43,7 +43,7 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
43
43
|
_spawned.Add(go);
|
|
44
44
|
UntargetedReceiverComponent comp = go.GetComponent<UntargetedReceiverComponent>();
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
IMessageBus bus = MessageHandler.MessageBus;
|
|
47
47
|
bool cancel = true;
|
|
48
48
|
Action dereg = bus.RegisterUntargetedInterceptor(
|
|
49
49
|
(ref SimpleUntargetedMessage _) => !cancel
|
|
@@ -19,10 +19,8 @@ namespace DxMessaging.Tests.Runtime.Core
|
|
|
19
19
|
MessageRegistrationToken token = MessageRegistrationToken.Create(handler, messageBus);
|
|
20
20
|
|
|
21
21
|
int postProcessCount = 0;
|
|
22
|
-
_ = token.RegisterUntargeted
|
|
23
|
-
|
|
24
|
-
);
|
|
25
|
-
_ = token.RegisterUntargetedPostProcessor<SimpleUntargetedMessage>(
|
|
22
|
+
_ = token.RegisterUntargeted((ref SimpleUntargetedMessage _) => { });
|
|
23
|
+
_ = token.RegisterUntargetedPostProcessor(
|
|
26
24
|
(ref SimpleUntargetedMessage _) => postProcessCount++,
|
|
27
25
|
priority: 0
|
|
28
26
|
);
|