com.wallstop-studios.dxmessaging 2.0.0-rc12 → 2.0.0-rc13
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/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +66 -0
- package/CHANGELOG.md.meta +7 -7
- package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +33 -33
- package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +33 -33
- package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +33 -33
- package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +71 -71
- package/Editor/Analyzers.meta +8 -8
- package/Editor/SetupCscRsp.cs +162 -162
- package/Editor/SetupCscRsp.cs.meta +2 -2
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
- package/Editor.meta +8 -8
- package/LICENSE.md +6 -6
- package/LICENSE.md.meta +7 -7
- package/README.md +387 -364
- package/README.md.meta +7 -7
- package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +7 -7
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +2 -2
- package/Runtime/Core/Attributes.meta +2 -2
- package/Runtime/Core/Extensions/MessageExtensions.cs +342 -342
- package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
- package/Runtime/Core/Extensions.meta +8 -8
- package/Runtime/Core/IMessage.cs +12 -12
- package/Runtime/Core/IMessage.cs.meta +11 -11
- package/Runtime/Core/InstanceId.cs +149 -149
- package/Runtime/Core/InstanceId.cs.meta +11 -11
- package/Runtime/Core/MessageBus/IMessageBus.cs +309 -309
- package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessageBus.cs +2243 -2084
- package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
- package/Runtime/Core/MessageBus/MessagingRegistration.cs +105 -105
- package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
- package/Runtime/Core/MessageBus/RegistrationLog.cs +111 -111
- package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
- package/Runtime/Core/MessageBus.meta +8 -8
- package/Runtime/Core/MessageHandler.cs +2778 -2759
- package/Runtime/Core/MessageHandler.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationHandle.cs +110 -110
- package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
- package/Runtime/Core/MessageRegistrationToken.cs +1234 -1234
- package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
- package/Runtime/Core/Messages/IBroadcastMessage.cs +27 -27
- package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/ITargetedMessage.cs +27 -27
- package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages/IUntargetedMessage.cs +27 -27
- package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
- package/Runtime/Core/Messages.meta +8 -8
- package/Runtime/Core/MessagingDebug.cs +70 -70
- package/Runtime/Core/MessagingDebug.cs.meta +11 -11
- package/Runtime/Core.meta +8 -8
- package/Runtime/Unity/MessageAwareComponent.cs +77 -77
- package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
- package/Runtime/Unity/MessagingComponent.cs +99 -99
- package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
- package/Runtime/Unity.meta +8 -8
- package/Runtime/WallstopStudios.DxMessaging.asmdef +15 -15
- package/Runtime.meta +8 -8
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs +92 -92
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs.meta +11 -11
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs +94 -94
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs.meta +2 -2
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +21 -21
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
- package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
- package/SourceGenerators.meta +8 -8
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs +373 -310
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Benchmarks.meta +8 -8
- package/Tests/Runtime/Core/BroadcastTests.cs +899 -899
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +190 -190
- package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -11
- package/Tests/Runtime/Core/MessagingTestBase.cs +185 -185
- package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -11
- package/Tests/Runtime/Core/NominalTests.cs +1740 -1740
- package/Tests/Runtime/Core/PostProcessorTests.cs +1236 -1236
- package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -11
- package/Tests/Runtime/Core/RegistrationTests.cs +1266 -1266
- package/Tests/Runtime/Core/RegistrationTests.cs.meta +11 -11
- package/Tests/Runtime/Core/TargetedTests.cs +888 -888
- package/Tests/Runtime/Core/TargetedTests.cs.meta +11 -11
- package/Tests/Runtime/Core/UntargetedTests.cs +272 -272
- package/Tests/Runtime/Core/UntargetedTests.cs.meta +11 -11
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +9 -9
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +11 -11
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +186 -186
- package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +30 -30
- package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +8 -8
- package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +8 -8
- package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +8 -8
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -7
- package/Tests.meta +8 -8
- package/Third Party Notices.md.meta +7 -7
- package/package.json +36 -36
- package/package.json.meta +7 -7
|
@@ -1,1740 +1,1740 @@
|
|
|
1
|
-
namespace DxMessaging.Tests.Runtime.Core
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Collections;
|
|
5
|
-
using System.Collections.Generic;
|
|
6
|
-
using DxMessaging.Core;
|
|
7
|
-
using DxMessaging.Core.Extensions;
|
|
8
|
-
using DxMessaging.Core.MessageBus;
|
|
9
|
-
using DxMessaging.Core.Messages;
|
|
10
|
-
using NUnit.Framework;
|
|
11
|
-
using Scripts.Components;
|
|
12
|
-
using Scripts.Messages;
|
|
13
|
-
using UnityEngine;
|
|
14
|
-
using UnityEngine.TestTools;
|
|
15
|
-
using Object = UnityEngine.Object;
|
|
16
|
-
|
|
17
|
-
public sealed class NominalTests : MessagingTestBase
|
|
18
|
-
{
|
|
19
|
-
[UnityTest]
|
|
20
|
-
public IEnumerator Nominal()
|
|
21
|
-
{
|
|
22
|
-
GameObject test = new(nameof(Nominal), typeof(SimpleMessageAwareComponent));
|
|
23
|
-
_spawned.Add(test);
|
|
24
|
-
GameObject nonTest = new("Non-Test", typeof(SimpleMessageAwareComponent));
|
|
25
|
-
_spawned.Add(nonTest);
|
|
26
|
-
|
|
27
|
-
SimpleMessageAwareComponent firstComponent =
|
|
28
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
29
|
-
|
|
30
|
-
int untargetedWorks = 0;
|
|
31
|
-
int targetedWorks = 0;
|
|
32
|
-
int targetedWithoutTargetingWorks = 0;
|
|
33
|
-
int broadcastWorks = 0;
|
|
34
|
-
int broadcastWithoutSourceWorks = 0;
|
|
35
|
-
Dictionary<object, int> componentTargetedWorks = new();
|
|
36
|
-
Dictionary<object, int> componentBroadcastWorks = new();
|
|
37
|
-
|
|
38
|
-
void SetupComponent(SimpleMessageAwareComponent toSetup)
|
|
39
|
-
{
|
|
40
|
-
toSetup.untargetedHandler = () => ++untargetedWorks;
|
|
41
|
-
toSetup.targetedHandler = () => ++targetedWorks;
|
|
42
|
-
toSetup.targetedWithoutTargetingHandler = () => ++targetedWithoutTargetingWorks;
|
|
43
|
-
toSetup.broadcastHandler = () => ++broadcastWorks;
|
|
44
|
-
toSetup.broadcastWithoutSourceHandler = () => ++broadcastWithoutSourceWorks;
|
|
45
|
-
toSetup.componentTargetedHandler = () =>
|
|
46
|
-
{
|
|
47
|
-
if (!componentTargetedWorks.TryGetValue(toSetup, out int existing))
|
|
48
|
-
{
|
|
49
|
-
existing = 0;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
componentTargetedWorks[toSetup] = ++existing;
|
|
53
|
-
};
|
|
54
|
-
toSetup.componentBroadcastHandler = () =>
|
|
55
|
-
{
|
|
56
|
-
if (!componentBroadcastWorks.TryGetValue(toSetup, out int existing))
|
|
57
|
-
{
|
|
58
|
-
existing = 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
componentBroadcastWorks[toSetup] = ++existing;
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
SetupComponent(firstComponent);
|
|
66
|
-
|
|
67
|
-
// Generate non-component targeted methods
|
|
68
|
-
SimpleUntargetedMessage untargetedMessage = new();
|
|
69
|
-
untargetedMessage.EmitUntargeted();
|
|
70
|
-
Assert.AreEqual(1, untargetedWorks);
|
|
71
|
-
Assert.AreEqual(0, targetedWorks);
|
|
72
|
-
Assert.AreEqual(0, broadcastWorks);
|
|
73
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
74
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
75
|
-
Assert.AreEqual(0, targetedWithoutTargetingWorks);
|
|
76
|
-
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
77
|
-
|
|
78
|
-
untargetedMessage.EmitUntargeted();
|
|
79
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
80
|
-
Assert.AreEqual(0, targetedWorks);
|
|
81
|
-
Assert.AreEqual(0, broadcastWorks);
|
|
82
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
83
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
84
|
-
Assert.AreEqual(0, targetedWithoutTargetingWorks);
|
|
85
|
-
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
86
|
-
|
|
87
|
-
SimpleTargetedMessage targetedMessage = new();
|
|
88
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
89
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
90
|
-
Assert.AreEqual(1, targetedWorks);
|
|
91
|
-
Assert.AreEqual(0, broadcastWorks);
|
|
92
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
93
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
94
|
-
Assert.AreEqual(1, targetedWithoutTargetingWorks);
|
|
95
|
-
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
96
|
-
|
|
97
|
-
SimpleBroadcastMessage broadcastMessage = new();
|
|
98
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
99
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
100
|
-
Assert.AreEqual(1, targetedWorks);
|
|
101
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
102
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
103
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
104
|
-
Assert.AreEqual(1, targetedWithoutTargetingWorks);
|
|
105
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
106
|
-
|
|
107
|
-
yield return null;
|
|
108
|
-
|
|
109
|
-
/*
|
|
110
|
-
If we add a second component, our Untargeted, GameObjectTargeted,
|
|
111
|
-
and GameObjectBroadcast receivers will be called *twice* for each
|
|
112
|
-
message emission, once per component.
|
|
113
|
-
*/
|
|
114
|
-
SimpleMessageAwareComponent secondComponent =
|
|
115
|
-
test.AddComponent<SimpleMessageAwareComponent>();
|
|
116
|
-
SetupComponent(secondComponent);
|
|
117
|
-
|
|
118
|
-
// Targeted
|
|
119
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
120
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
121
|
-
Assert.AreEqual(3, targetedWorks);
|
|
122
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
123
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
124
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
125
|
-
Assert.AreEqual(3, targetedWithoutTargetingWorks);
|
|
126
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
127
|
-
|
|
128
|
-
targetedMessage.EmitGameObjectTargeted(nonTest);
|
|
129
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
130
|
-
Assert.AreEqual(3, targetedWorks);
|
|
131
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
132
|
-
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
133
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
134
|
-
Assert.AreEqual(5, targetedWithoutTargetingWorks);
|
|
135
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
136
|
-
|
|
137
|
-
// Component Targeted
|
|
138
|
-
targetedMessage.EmitComponentTargeted(firstComponent);
|
|
139
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
140
|
-
Assert.AreEqual(3, targetedWorks);
|
|
141
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
142
|
-
Assert.AreEqual(1, componentTargetedWorks.Count);
|
|
143
|
-
Assert.AreEqual(1, componentTargetedWorks[firstComponent]);
|
|
144
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
145
|
-
Assert.AreEqual(7, targetedWithoutTargetingWorks);
|
|
146
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
147
|
-
|
|
148
|
-
targetedMessage.EmitComponentTargeted(secondComponent);
|
|
149
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
150
|
-
Assert.AreEqual(3, targetedWorks);
|
|
151
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
152
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
153
|
-
Assert.AreEqual(1, componentTargetedWorks[firstComponent]);
|
|
154
|
-
Assert.AreEqual(1, componentTargetedWorks[secondComponent]);
|
|
155
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
156
|
-
Assert.AreEqual(9, targetedWithoutTargetingWorks);
|
|
157
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
158
|
-
|
|
159
|
-
targetedMessage.EmitComponentTargeted(firstComponent);
|
|
160
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
161
|
-
Assert.AreEqual(3, targetedWorks);
|
|
162
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
163
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
164
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
165
|
-
Assert.AreEqual(1, componentTargetedWorks[secondComponent]);
|
|
166
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
167
|
-
Assert.AreEqual(11, targetedWithoutTargetingWorks);
|
|
168
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
169
|
-
|
|
170
|
-
targetedMessage.EmitComponentTargeted(secondComponent);
|
|
171
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
172
|
-
Assert.AreEqual(3, targetedWorks);
|
|
173
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
174
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
175
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
176
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
177
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
178
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
179
|
-
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
180
|
-
|
|
181
|
-
// Broadcast
|
|
182
|
-
broadcastMessage.EmitGameObjectBroadcast(nonTest);
|
|
183
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
184
|
-
Assert.AreEqual(3, targetedWorks);
|
|
185
|
-
Assert.AreEqual(1, broadcastWorks);
|
|
186
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
187
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
188
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
189
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
190
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
191
|
-
Assert.AreEqual(3, broadcastWithoutSourceWorks);
|
|
192
|
-
|
|
193
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
194
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
195
|
-
Assert.AreEqual(3, targetedWorks);
|
|
196
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
197
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
198
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
199
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
200
|
-
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
201
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
202
|
-
Assert.AreEqual(5, broadcastWithoutSourceWorks);
|
|
203
|
-
|
|
204
|
-
// Component Broadcast
|
|
205
|
-
broadcastMessage.EmitComponentBroadcast(firstComponent);
|
|
206
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
207
|
-
Assert.AreEqual(3, targetedWorks);
|
|
208
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
209
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
210
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
211
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
212
|
-
Assert.AreEqual(1, componentBroadcastWorks.Count);
|
|
213
|
-
Assert.AreEqual(1, componentBroadcastWorks[firstComponent]);
|
|
214
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
215
|
-
Assert.AreEqual(7, broadcastWithoutSourceWorks);
|
|
216
|
-
|
|
217
|
-
broadcastMessage.EmitComponentBroadcast(secondComponent);
|
|
218
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
219
|
-
Assert.AreEqual(3, targetedWorks);
|
|
220
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
221
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
222
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
223
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
224
|
-
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
225
|
-
Assert.AreEqual(1, componentBroadcastWorks[firstComponent]);
|
|
226
|
-
Assert.AreEqual(1, componentBroadcastWorks[secondComponent]);
|
|
227
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
228
|
-
Assert.AreEqual(9, broadcastWithoutSourceWorks);
|
|
229
|
-
|
|
230
|
-
broadcastMessage.EmitComponentBroadcast(firstComponent);
|
|
231
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
232
|
-
Assert.AreEqual(3, targetedWorks);
|
|
233
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
234
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
235
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
236
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
237
|
-
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
238
|
-
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
239
|
-
Assert.AreEqual(1, componentBroadcastWorks[secondComponent]);
|
|
240
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
241
|
-
Assert.AreEqual(11, broadcastWithoutSourceWorks);
|
|
242
|
-
|
|
243
|
-
broadcastMessage.EmitComponentBroadcast(secondComponent);
|
|
244
|
-
Assert.AreEqual(2, untargetedWorks);
|
|
245
|
-
Assert.AreEqual(3, targetedWorks);
|
|
246
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
247
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
248
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
249
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
250
|
-
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
251
|
-
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
252
|
-
Assert.AreEqual(2, componentBroadcastWorks[secondComponent]);
|
|
253
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
254
|
-
Assert.AreEqual(13, broadcastWithoutSourceWorks);
|
|
255
|
-
|
|
256
|
-
// Finally, re-emit the targeted message - it should be received by both components
|
|
257
|
-
untargetedMessage.EmitUntargeted();
|
|
258
|
-
Assert.AreEqual(4, untargetedWorks);
|
|
259
|
-
Assert.AreEqual(3, targetedWorks);
|
|
260
|
-
Assert.AreEqual(3, broadcastWorks);
|
|
261
|
-
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
262
|
-
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
263
|
-
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
264
|
-
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
265
|
-
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
266
|
-
Assert.AreEqual(2, componentBroadcastWorks[secondComponent]);
|
|
267
|
-
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
268
|
-
Assert.AreEqual(13, broadcastWithoutSourceWorks);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
[UnityTest]
|
|
272
|
-
public IEnumerator Lifetime()
|
|
273
|
-
{
|
|
274
|
-
MessageBus messageBus = MessageHandler.MessageBus;
|
|
275
|
-
Assert.IsNotNull(messageBus);
|
|
276
|
-
|
|
277
|
-
GameObject test = new(nameof(Lifetime), typeof(SimpleMessageAwareComponent));
|
|
278
|
-
_spawned.Add(test);
|
|
279
|
-
|
|
280
|
-
SimpleMessageAwareComponent firstComponent =
|
|
281
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
282
|
-
|
|
283
|
-
// One for the untargeted message, one for the targeted without targeting, one for broadcast without source
|
|
284
|
-
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
285
|
-
// One for the game object, one for each targeted message type (simple + complex)
|
|
286
|
-
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
287
|
-
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
288
|
-
|
|
289
|
-
yield return null;
|
|
290
|
-
|
|
291
|
-
SimpleMessageAwareComponent secondComponent =
|
|
292
|
-
test.AddComponent<SimpleMessageAwareComponent>();
|
|
293
|
-
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
294
|
-
// One for the game object, one for the first component, one for the second component = 3
|
|
295
|
-
Assert.AreEqual(6, messageBus.RegisteredTargeted);
|
|
296
|
-
Assert.AreEqual(3, messageBus.RegisteredBroadcast);
|
|
297
|
-
|
|
298
|
-
secondComponent.enabled = false;
|
|
299
|
-
yield return null;
|
|
300
|
-
|
|
301
|
-
// 3 - one component (disabled)
|
|
302
|
-
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
303
|
-
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
304
|
-
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
305
|
-
|
|
306
|
-
firstComponent.enabled = false;
|
|
307
|
-
yield return null;
|
|
308
|
-
|
|
309
|
-
// No active scripts, no active handlers
|
|
310
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
311
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
312
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
313
|
-
|
|
314
|
-
test.SetActive(false);
|
|
315
|
-
yield return null;
|
|
316
|
-
|
|
317
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
318
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
319
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
320
|
-
|
|
321
|
-
firstComponent.enabled = true;
|
|
322
|
-
yield return null;
|
|
323
|
-
|
|
324
|
-
// Game object is still disabled - shouldn't have active child scripts
|
|
325
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
326
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
327
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
328
|
-
|
|
329
|
-
test.SetActive(true);
|
|
330
|
-
yield return null;
|
|
331
|
-
|
|
332
|
-
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
333
|
-
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
334
|
-
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
335
|
-
|
|
336
|
-
Object.Destroy(firstComponent);
|
|
337
|
-
yield return null;
|
|
338
|
-
|
|
339
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
340
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
341
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
342
|
-
|
|
343
|
-
secondComponent.enabled = true;
|
|
344
|
-
yield return null;
|
|
345
|
-
|
|
346
|
-
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
347
|
-
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
348
|
-
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
349
|
-
|
|
350
|
-
Object.Destroy(test);
|
|
351
|
-
yield return null;
|
|
352
|
-
|
|
353
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
354
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
355
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
[UnityTest]
|
|
359
|
-
public IEnumerator NonMessagingObjects()
|
|
360
|
-
{
|
|
361
|
-
MessageBus messageBus = MessageHandler.MessageBus;
|
|
362
|
-
Assert.IsNotNull(messageBus);
|
|
363
|
-
|
|
364
|
-
GameObject test1 = new("NonMessaging1");
|
|
365
|
-
_spawned.Add(test1);
|
|
366
|
-
|
|
367
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
368
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
369
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
370
|
-
|
|
371
|
-
GameObject test2 = new("NonMessaging1", typeof(SpriteRenderer), typeof(MessageHandler));
|
|
372
|
-
_spawned.Add(test2);
|
|
373
|
-
|
|
374
|
-
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
375
|
-
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
376
|
-
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
377
|
-
yield break;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
[UnityTest]
|
|
381
|
-
public IEnumerator DedupedRegistration()
|
|
382
|
-
{
|
|
383
|
-
GameObject test = new(nameof(DedupedRegistration), typeof(SimpleMessageAwareComponent));
|
|
384
|
-
_spawned.Add(test);
|
|
385
|
-
|
|
386
|
-
SimpleMessageAwareComponent component =
|
|
387
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
388
|
-
|
|
389
|
-
int unTargetedCount = 0;
|
|
390
|
-
int targetedCount = 0;
|
|
391
|
-
int broadcastCount = 0;
|
|
392
|
-
int componentTargetedCount = 0;
|
|
393
|
-
int componentBroadcastCount = 0;
|
|
394
|
-
component.untargetedHandler = () => ++unTargetedCount;
|
|
395
|
-
component.targetedHandler = () => ++targetedCount;
|
|
396
|
-
component.broadcastHandler = () => ++broadcastCount;
|
|
397
|
-
component.componentTargetedHandler = () => ++componentTargetedCount;
|
|
398
|
-
component.componentBroadcastHandler = () => ++componentBroadcastCount;
|
|
399
|
-
|
|
400
|
-
MessageRegistrationToken token = GetToken(component);
|
|
401
|
-
HashSet<MessageRegistrationHandle> handles = new();
|
|
402
|
-
try
|
|
403
|
-
{
|
|
404
|
-
IEnumerator TestLifecycle(
|
|
405
|
-
Action emitMessage,
|
|
406
|
-
MessageRegistrationHandle handle,
|
|
407
|
-
Func<int> count
|
|
408
|
-
)
|
|
409
|
-
{
|
|
410
|
-
_ = handles.Add(handle);
|
|
411
|
-
emitMessage();
|
|
412
|
-
Assert.AreEqual(1, count());
|
|
413
|
-
|
|
414
|
-
component.enabled = false;
|
|
415
|
-
yield return null;
|
|
416
|
-
|
|
417
|
-
emitMessage();
|
|
418
|
-
Assert.AreEqual(1, count());
|
|
419
|
-
emitMessage();
|
|
420
|
-
Assert.AreEqual(1, count());
|
|
421
|
-
component.enabled = true;
|
|
422
|
-
yield return null;
|
|
423
|
-
|
|
424
|
-
emitMessage();
|
|
425
|
-
Assert.AreEqual(2, count());
|
|
426
|
-
|
|
427
|
-
_ = handles.Remove(handle);
|
|
428
|
-
token.RemoveRegistration(handle);
|
|
429
|
-
|
|
430
|
-
emitMessage();
|
|
431
|
-
// The existing handler should have picked it up
|
|
432
|
-
Assert.AreEqual(3, count());
|
|
433
|
-
|
|
434
|
-
emitMessage();
|
|
435
|
-
// The existing handler should have picked it up
|
|
436
|
-
Assert.AreEqual(4, count());
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
// Untargeted
|
|
440
|
-
SimpleUntargetedMessage untargetedMessage = new();
|
|
441
|
-
MessageRegistrationHandle untargetedHandle =
|
|
442
|
-
token.RegisterUntargeted<SimpleUntargetedMessage>(
|
|
443
|
-
component.HandleSimpleUntargetedMessage
|
|
444
|
-
);
|
|
445
|
-
IEnumerator untargetedLifecycle = TestLifecycle(
|
|
446
|
-
() => untargetedMessage.EmitUntargeted(),
|
|
447
|
-
untargetedHandle,
|
|
448
|
-
() => unTargetedCount
|
|
449
|
-
);
|
|
450
|
-
while (untargetedLifecycle.MoveNext())
|
|
451
|
-
{
|
|
452
|
-
yield return untargetedLifecycle.Current;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
// Targeted
|
|
456
|
-
MessageRegistrationHandle targetedHandle =
|
|
457
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
458
|
-
test,
|
|
459
|
-
component.HandleSimpleTargetedMessage
|
|
460
|
-
);
|
|
461
|
-
SimpleTargetedMessage targetedMessage = new();
|
|
462
|
-
IEnumerator targetedLifecycle = TestLifecycle(
|
|
463
|
-
() => targetedMessage.EmitGameObjectTargeted(test),
|
|
464
|
-
targetedHandle,
|
|
465
|
-
() => targetedCount
|
|
466
|
-
);
|
|
467
|
-
while (targetedLifecycle.MoveNext())
|
|
468
|
-
{
|
|
469
|
-
yield return targetedLifecycle.Current;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
// Broadcast
|
|
473
|
-
MessageRegistrationHandle broadcastHandle =
|
|
474
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
475
|
-
test,
|
|
476
|
-
component.HandleSimpleBroadcastMessage
|
|
477
|
-
);
|
|
478
|
-
SimpleBroadcastMessage broadcastMessage = new();
|
|
479
|
-
IEnumerator broadcastLifecycle = TestLifecycle(
|
|
480
|
-
() => broadcastMessage.EmitGameObjectBroadcast(test),
|
|
481
|
-
broadcastHandle,
|
|
482
|
-
() => broadcastCount
|
|
483
|
-
);
|
|
484
|
-
while (broadcastLifecycle.MoveNext())
|
|
485
|
-
{
|
|
486
|
-
yield return broadcastLifecycle.Current;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
// Component Targeted
|
|
490
|
-
MessageRegistrationHandle componentTargetedHandle =
|
|
491
|
-
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
492
|
-
component,
|
|
493
|
-
component.HandleSimpleComponentTargetedMessage
|
|
494
|
-
);
|
|
495
|
-
IEnumerator componentTargetedLifecycle = TestLifecycle(
|
|
496
|
-
() => targetedMessage.EmitComponentTargeted(component),
|
|
497
|
-
componentTargetedHandle,
|
|
498
|
-
() => componentTargetedCount
|
|
499
|
-
);
|
|
500
|
-
while (componentTargetedLifecycle.MoveNext())
|
|
501
|
-
{
|
|
502
|
-
yield return componentTargetedLifecycle.Current;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
// Component Broadcast
|
|
506
|
-
MessageRegistrationHandle componentBroadcastHandle =
|
|
507
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
508
|
-
test,
|
|
509
|
-
component.HandleSimpleBroadcastMessage
|
|
510
|
-
);
|
|
511
|
-
IEnumerator componentBroadcastLifecycle = TestLifecycle(
|
|
512
|
-
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
513
|
-
componentBroadcastHandle,
|
|
514
|
-
() => componentBroadcastCount
|
|
515
|
-
);
|
|
516
|
-
while (componentBroadcastLifecycle.MoveNext())
|
|
517
|
-
{
|
|
518
|
-
yield return componentBroadcastLifecycle.Current;
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
finally
|
|
522
|
-
{
|
|
523
|
-
foreach (MessageRegistrationHandle handle in handles)
|
|
524
|
-
{
|
|
525
|
-
token.RemoveRegistration(handle);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
[UnityTest]
|
|
531
|
-
public IEnumerator Interceptors()
|
|
532
|
-
{
|
|
533
|
-
GameObject test = new(nameof(Interceptors), typeof(SimpleMessageAwareComponent));
|
|
534
|
-
_spawned.Add(test);
|
|
535
|
-
|
|
536
|
-
SimpleMessageAwareComponent component =
|
|
537
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
538
|
-
|
|
539
|
-
int unTargetedCount = 0;
|
|
540
|
-
int targetedCount = 0;
|
|
541
|
-
int broadcastCount = 0;
|
|
542
|
-
int componentTargetedCount = 0;
|
|
543
|
-
int componentBroadcastCount = 0;
|
|
544
|
-
component.untargetedHandler = () => ++unTargetedCount;
|
|
545
|
-
component.targetedHandler = () => ++targetedCount;
|
|
546
|
-
component.broadcastHandler = () => ++broadcastCount;
|
|
547
|
-
component.componentTargetedHandler = () => ++componentTargetedCount;
|
|
548
|
-
component.componentBroadcastHandler = () => ++componentBroadcastCount;
|
|
549
|
-
|
|
550
|
-
MessageRegistrationToken token = GetToken(component);
|
|
551
|
-
HashSet<MessageRegistrationHandle> handles = new();
|
|
552
|
-
try
|
|
553
|
-
{
|
|
554
|
-
bool allowed = true;
|
|
555
|
-
|
|
556
|
-
bool UntargetedInterceptor(ref SimpleUntargetedMessage message)
|
|
557
|
-
{
|
|
558
|
-
return allowed;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
bool TargetedInterceptor(ref InstanceId target, ref SimpleTargetedMessage message)
|
|
562
|
-
{
|
|
563
|
-
return allowed;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
bool BroadcastInterceptor(ref InstanceId source, ref SimpleBroadcastMessage message)
|
|
567
|
-
{
|
|
568
|
-
return allowed;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
// Double register to ensure no bugs
|
|
572
|
-
MessageRegistrationHandle untargetedInterceptor1 =
|
|
573
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
574
|
-
UntargetedInterceptor
|
|
575
|
-
);
|
|
576
|
-
handles.Add(untargetedInterceptor1);
|
|
577
|
-
MessageRegistrationHandle untargetedInterceptor2 =
|
|
578
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
579
|
-
UntargetedInterceptor
|
|
580
|
-
);
|
|
581
|
-
handles.Add(untargetedInterceptor2);
|
|
582
|
-
MessageRegistrationHandle targetedInterceptor1 =
|
|
583
|
-
token.RegisterTargetedInterceptor<SimpleTargetedMessage>(TargetedInterceptor);
|
|
584
|
-
handles.Add(targetedInterceptor1);
|
|
585
|
-
MessageRegistrationHandle targetedInterceptor2 =
|
|
586
|
-
token.RegisterTargetedInterceptor<SimpleTargetedMessage>(TargetedInterceptor);
|
|
587
|
-
handles.Add(targetedInterceptor2);
|
|
588
|
-
MessageRegistrationHandle broadcastInterceptor1 =
|
|
589
|
-
token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(
|
|
590
|
-
BroadcastInterceptor
|
|
591
|
-
);
|
|
592
|
-
handles.Add(broadcastInterceptor1);
|
|
593
|
-
MessageRegistrationHandle broadcastInterceptor2 =
|
|
594
|
-
token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(
|
|
595
|
-
BroadcastInterceptor
|
|
596
|
-
);
|
|
597
|
-
handles.Add(broadcastInterceptor2);
|
|
598
|
-
|
|
599
|
-
void RunTest(Action emitMessage, Func<int> count)
|
|
600
|
-
{
|
|
601
|
-
allowed = true;
|
|
602
|
-
emitMessage();
|
|
603
|
-
Assert.AreEqual(1, count());
|
|
604
|
-
allowed = false;
|
|
605
|
-
emitMessage();
|
|
606
|
-
Assert.AreEqual(1, count());
|
|
607
|
-
emitMessage();
|
|
608
|
-
Assert.AreEqual(1, count());
|
|
609
|
-
allowed = true;
|
|
610
|
-
emitMessage();
|
|
611
|
-
Assert.AreEqual(2, count());
|
|
612
|
-
emitMessage();
|
|
613
|
-
Assert.AreEqual(3, count());
|
|
614
|
-
allowed = false;
|
|
615
|
-
emitMessage();
|
|
616
|
-
Assert.AreEqual(3, count());
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
SimpleUntargetedMessage untargetedMessage = new();
|
|
620
|
-
RunTest(() => untargetedMessage.EmitUntargeted(), () => unTargetedCount);
|
|
621
|
-
SimpleTargetedMessage targetedMessage = new();
|
|
622
|
-
RunTest(() => targetedMessage.EmitGameObjectTargeted(test), () => targetedCount);
|
|
623
|
-
RunTest(
|
|
624
|
-
() => targetedMessage.EmitComponentTargeted(component),
|
|
625
|
-
() => componentTargetedCount
|
|
626
|
-
);
|
|
627
|
-
SimpleBroadcastMessage broadcastMessage = new();
|
|
628
|
-
RunTest(() => broadcastMessage.EmitGameObjectBroadcast(test), () => broadcastCount);
|
|
629
|
-
RunTest(
|
|
630
|
-
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
631
|
-
() => componentBroadcastCount
|
|
632
|
-
);
|
|
633
|
-
}
|
|
634
|
-
finally
|
|
635
|
-
{
|
|
636
|
-
foreach (MessageRegistrationHandle handle in handles)
|
|
637
|
-
{
|
|
638
|
-
token.RemoveRegistration(handle);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
yield break;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
[UnityTest]
|
|
646
|
-
public IEnumerator PostProcessors()
|
|
647
|
-
{
|
|
648
|
-
GameObject test = new(nameof(PostProcessors), typeof(SimpleMessageAwareComponent));
|
|
649
|
-
_spawned.Add(test);
|
|
650
|
-
|
|
651
|
-
SimpleMessageAwareComponent component =
|
|
652
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
653
|
-
|
|
654
|
-
int unTargetedCount = 0;
|
|
655
|
-
int targetedCount = 0;
|
|
656
|
-
int broadcastCount = 0;
|
|
657
|
-
int componentTargetedCount = 0;
|
|
658
|
-
int componentBroadcastCount = 0;
|
|
659
|
-
int expectedTargetedWithoutTargetingCount = 0;
|
|
660
|
-
int expectedBroadcastWithoutSourceCount = 0;
|
|
661
|
-
int? lastSeenUntargetedCount = null;
|
|
662
|
-
int? lastSeenTargetedCount = null;
|
|
663
|
-
int? lastSeenComponentTargetedCount = null;
|
|
664
|
-
int? lastSeenBroadcastCount = null;
|
|
665
|
-
int? lastSeenComponentBroadcastCount = null;
|
|
666
|
-
component.untargetedHandler = () => ++unTargetedCount;
|
|
667
|
-
component.targetedHandler = () =>
|
|
668
|
-
{
|
|
669
|
-
++targetedCount;
|
|
670
|
-
++expectedTargetedWithoutTargetingCount;
|
|
671
|
-
};
|
|
672
|
-
component.broadcastHandler = () =>
|
|
673
|
-
{
|
|
674
|
-
++broadcastCount;
|
|
675
|
-
++expectedBroadcastWithoutSourceCount;
|
|
676
|
-
};
|
|
677
|
-
component.componentTargetedHandler = () =>
|
|
678
|
-
{
|
|
679
|
-
++componentTargetedCount;
|
|
680
|
-
++expectedTargetedWithoutTargetingCount;
|
|
681
|
-
};
|
|
682
|
-
component.componentBroadcastHandler = () =>
|
|
683
|
-
{
|
|
684
|
-
++componentBroadcastCount;
|
|
685
|
-
++expectedBroadcastWithoutSourceCount;
|
|
686
|
-
};
|
|
687
|
-
|
|
688
|
-
MessageRegistrationToken token = GetToken(component);
|
|
689
|
-
HashSet<MessageRegistrationHandle> handles = new();
|
|
690
|
-
try
|
|
691
|
-
{
|
|
692
|
-
void UntargetedPostProcessor(ref SimpleUntargetedMessage message)
|
|
693
|
-
{
|
|
694
|
-
if (lastSeenUntargetedCount == null)
|
|
695
|
-
{
|
|
696
|
-
lastSeenUntargetedCount = unTargetedCount;
|
|
697
|
-
return;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
Assert.AreEqual(lastSeenUntargetedCount + 1, unTargetedCount);
|
|
701
|
-
lastSeenUntargetedCount = unTargetedCount;
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
void GameObjectTargetedPostProcessor(ref SimpleTargetedMessage message)
|
|
705
|
-
{
|
|
706
|
-
if (lastSeenTargetedCount == null)
|
|
707
|
-
{
|
|
708
|
-
return;
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
Assert.AreEqual(lastSeenTargetedCount + 1, targetedCount);
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
void ComponentTargetedPostProcessor(ref SimpleTargetedMessage message)
|
|
715
|
-
{
|
|
716
|
-
if (lastSeenComponentTargetedCount == null)
|
|
717
|
-
{
|
|
718
|
-
return;
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
Assert.AreEqual(lastSeenComponentTargetedCount + 1, componentTargetedCount);
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
void TargetedWithoutTargetingPostProcessor(
|
|
725
|
-
ref InstanceId target,
|
|
726
|
-
ref SimpleTargetedMessage message
|
|
727
|
-
)
|
|
728
|
-
{
|
|
729
|
-
switch (target.Object)
|
|
730
|
-
{
|
|
731
|
-
case GameObject _:
|
|
732
|
-
{
|
|
733
|
-
if (lastSeenTargetedCount != null)
|
|
734
|
-
{
|
|
735
|
-
Assert.AreEqual(lastSeenTargetedCount + 1, targetedCount);
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
lastSeenTargetedCount = targetedCount;
|
|
739
|
-
break;
|
|
740
|
-
}
|
|
741
|
-
case Component _:
|
|
742
|
-
{
|
|
743
|
-
if (lastSeenComponentTargetedCount != null)
|
|
744
|
-
{
|
|
745
|
-
Assert.AreEqual(
|
|
746
|
-
lastSeenComponentTargetedCount + 1,
|
|
747
|
-
componentTargetedCount
|
|
748
|
-
);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
lastSeenComponentTargetedCount = componentTargetedCount;
|
|
752
|
-
break;
|
|
753
|
-
}
|
|
754
|
-
default:
|
|
755
|
-
Assert.Fail("Unexpected Object type - {0}.", target.Object?.GetType());
|
|
756
|
-
break;
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
Assert.AreEqual(
|
|
760
|
-
expectedTargetedWithoutTargetingCount,
|
|
761
|
-
targetedCount + componentTargetedCount
|
|
762
|
-
);
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
void GameObjectBroadcastPostProcessor(ref SimpleBroadcastMessage message)
|
|
766
|
-
{
|
|
767
|
-
if (lastSeenBroadcastCount == null)
|
|
768
|
-
{
|
|
769
|
-
return;
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
Assert.AreEqual(lastSeenBroadcastCount + 1, broadcastCount);
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
void ComponentBroadcastPostProcessor(ref SimpleBroadcastMessage message)
|
|
776
|
-
{
|
|
777
|
-
if (lastSeenComponentBroadcastCount == null)
|
|
778
|
-
{
|
|
779
|
-
return;
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
Assert.AreEqual(lastSeenComponentBroadcastCount + 1, componentBroadcastCount);
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
void BroadcastWithoutSourcePostProcessor(
|
|
786
|
-
ref InstanceId source,
|
|
787
|
-
ref SimpleBroadcastMessage message
|
|
788
|
-
)
|
|
789
|
-
{
|
|
790
|
-
switch (source.Object)
|
|
791
|
-
{
|
|
792
|
-
case GameObject _:
|
|
793
|
-
{
|
|
794
|
-
if (lastSeenBroadcastCount != null)
|
|
795
|
-
{
|
|
796
|
-
Assert.AreEqual(lastSeenBroadcastCount + 1, broadcastCount);
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
lastSeenBroadcastCount = broadcastCount;
|
|
800
|
-
break;
|
|
801
|
-
}
|
|
802
|
-
case Component _:
|
|
803
|
-
{
|
|
804
|
-
if (lastSeenComponentBroadcastCount != null)
|
|
805
|
-
{
|
|
806
|
-
Assert.AreEqual(
|
|
807
|
-
lastSeenComponentBroadcastCount + 1,
|
|
808
|
-
componentBroadcastCount
|
|
809
|
-
);
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
lastSeenComponentBroadcastCount = componentBroadcastCount;
|
|
813
|
-
break;
|
|
814
|
-
}
|
|
815
|
-
default:
|
|
816
|
-
Assert.Fail("Unexpected Object type - {0}.", source.Object?.GetType());
|
|
817
|
-
break;
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
Assert.AreEqual(
|
|
821
|
-
expectedBroadcastWithoutSourceCount,
|
|
822
|
-
broadcastCount + componentBroadcastCount
|
|
823
|
-
);
|
|
824
|
-
}
|
|
825
|
-
|
|
826
|
-
MessageRegistrationHandle untargetedPostProcessor =
|
|
827
|
-
token.RegisterUntargetedPostProcessor<SimpleUntargetedMessage>(
|
|
828
|
-
UntargetedPostProcessor
|
|
829
|
-
);
|
|
830
|
-
handles.Add(untargetedPostProcessor);
|
|
831
|
-
MessageRegistrationHandle gameObjectTargetedPostProcessor =
|
|
832
|
-
token.RegisterGameObjectTargetedPostProcessor<SimpleTargetedMessage>(
|
|
833
|
-
test,
|
|
834
|
-
GameObjectTargetedPostProcessor
|
|
835
|
-
);
|
|
836
|
-
handles.Add(gameObjectTargetedPostProcessor);
|
|
837
|
-
MessageRegistrationHandle componentTargetedPostProcessor =
|
|
838
|
-
token.RegisterComponentTargetedPostProcessor<SimpleTargetedMessage>(
|
|
839
|
-
component,
|
|
840
|
-
ComponentTargetedPostProcessor
|
|
841
|
-
);
|
|
842
|
-
handles.Add(componentTargetedPostProcessor);
|
|
843
|
-
MessageRegistrationHandle targetedWithoutTargetingPostProcessor =
|
|
844
|
-
token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(
|
|
845
|
-
TargetedWithoutTargetingPostProcessor
|
|
846
|
-
);
|
|
847
|
-
handles.Add(targetedWithoutTargetingPostProcessor);
|
|
848
|
-
MessageRegistrationHandle gameObjectBroadcastPostProcessor =
|
|
849
|
-
token.RegisterGameObjectBroadcastPostProcessor<SimpleBroadcastMessage>(
|
|
850
|
-
test,
|
|
851
|
-
GameObjectBroadcastPostProcessor
|
|
852
|
-
);
|
|
853
|
-
handles.Add(gameObjectBroadcastPostProcessor);
|
|
854
|
-
MessageRegistrationHandle componentBroadcastPostProcessor =
|
|
855
|
-
token.RegisterComponentBroadcastPostProcessor<SimpleBroadcastMessage>(
|
|
856
|
-
component,
|
|
857
|
-
ComponentBroadcastPostProcessor
|
|
858
|
-
);
|
|
859
|
-
handles.Add(componentBroadcastPostProcessor);
|
|
860
|
-
MessageRegistrationHandle broadcastWithoutSourcePostProcessor =
|
|
861
|
-
token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(
|
|
862
|
-
BroadcastWithoutSourcePostProcessor
|
|
863
|
-
);
|
|
864
|
-
handles.Add(broadcastWithoutSourcePostProcessor);
|
|
865
|
-
|
|
866
|
-
void RunTest(Action emitMessage, Func<int> count)
|
|
867
|
-
{
|
|
868
|
-
Assert.AreEqual(0, count());
|
|
869
|
-
component.enabled = true;
|
|
870
|
-
emitMessage();
|
|
871
|
-
Assert.AreEqual(1, count());
|
|
872
|
-
component.enabled = false;
|
|
873
|
-
emitMessage();
|
|
874
|
-
Assert.AreEqual(1, count());
|
|
875
|
-
emitMessage();
|
|
876
|
-
Assert.AreEqual(1, count());
|
|
877
|
-
component.enabled = true;
|
|
878
|
-
emitMessage();
|
|
879
|
-
Assert.AreEqual(2, count());
|
|
880
|
-
emitMessage();
|
|
881
|
-
Assert.AreEqual(3, count());
|
|
882
|
-
component.enabled = false;
|
|
883
|
-
emitMessage();
|
|
884
|
-
Assert.AreEqual(3, count());
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
SimpleUntargetedMessage untargetedMessage = new();
|
|
888
|
-
RunTest(() => untargetedMessage.EmitUntargeted(), () => unTargetedCount);
|
|
889
|
-
SimpleTargetedMessage targetedMessage = new();
|
|
890
|
-
RunTest(() => targetedMessage.EmitGameObjectTargeted(test), () => targetedCount);
|
|
891
|
-
RunTest(
|
|
892
|
-
() => targetedMessage.EmitComponentTargeted(component),
|
|
893
|
-
() => componentTargetedCount
|
|
894
|
-
);
|
|
895
|
-
SimpleBroadcastMessage broadcastMessage = new();
|
|
896
|
-
RunTest(() => broadcastMessage.EmitGameObjectBroadcast(test), () => broadcastCount);
|
|
897
|
-
RunTest(
|
|
898
|
-
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
899
|
-
() => componentBroadcastCount
|
|
900
|
-
);
|
|
901
|
-
}
|
|
902
|
-
finally
|
|
903
|
-
{
|
|
904
|
-
foreach (MessageRegistrationHandle handle in handles)
|
|
905
|
-
{
|
|
906
|
-
token.RemoveRegistration(handle);
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
yield break;
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
[UnityTest]
|
|
914
|
-
public IEnumerator InstanceId()
|
|
915
|
-
{
|
|
916
|
-
GameObject test = new(nameof(InstanceId), typeof(SimpleMessageAwareComponent));
|
|
917
|
-
_spawned.Add(test);
|
|
918
|
-
|
|
919
|
-
// Message-aware instance ids
|
|
920
|
-
SimpleMessageAwareComponent component =
|
|
921
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
922
|
-
Assert.AreEqual((InstanceId)test, (InstanceId)test);
|
|
923
|
-
Assert.AreEqual((InstanceId)component, (InstanceId)component);
|
|
924
|
-
Assert.AreNotEqual((InstanceId)test, (InstanceId)component);
|
|
925
|
-
Assert.AreNotEqual((InstanceId)component, (InstanceId)test);
|
|
926
|
-
|
|
927
|
-
// Non-message-aware instance ids
|
|
928
|
-
GameObject test2 = new(nameof(InstanceId) + " - 2");
|
|
929
|
-
_spawned.Add(test2);
|
|
930
|
-
Assert.AreNotEqual((InstanceId)test2, (InstanceId)test2.transform);
|
|
931
|
-
Assert.AreNotEqual((InstanceId)test2.transform, (InstanceId)test2);
|
|
932
|
-
|
|
933
|
-
// Null checks
|
|
934
|
-
bool caught = false;
|
|
935
|
-
try
|
|
936
|
-
{
|
|
937
|
-
_ = (InstanceId)(GameObject)null;
|
|
938
|
-
}
|
|
939
|
-
catch
|
|
940
|
-
{
|
|
941
|
-
caught = true;
|
|
942
|
-
}
|
|
943
|
-
|
|
944
|
-
Assert.IsTrue(caught);
|
|
945
|
-
|
|
946
|
-
caught = false;
|
|
947
|
-
try
|
|
948
|
-
{
|
|
949
|
-
_ = (InstanceId)(Component)null;
|
|
950
|
-
}
|
|
951
|
-
catch
|
|
952
|
-
{
|
|
953
|
-
caught = true;
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
Assert.IsTrue(caught);
|
|
957
|
-
yield break;
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
[UnityTest]
|
|
961
|
-
public IEnumerator GlobalAcceptAll()
|
|
962
|
-
{
|
|
963
|
-
GameObject test = new(nameof(GlobalAcceptAll), typeof(SimpleMessageAwareComponent));
|
|
964
|
-
_spawned.Add(test);
|
|
965
|
-
SimpleMessageAwareComponent component =
|
|
966
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
967
|
-
|
|
968
|
-
MessageRegistrationToken token = GetToken(component);
|
|
969
|
-
|
|
970
|
-
int untargetedCount = 0;
|
|
971
|
-
int targetedCount = 0;
|
|
972
|
-
int broadcastCount = 0;
|
|
973
|
-
int fastUntargetedCount = 0;
|
|
974
|
-
int fastTargetedCount = 0;
|
|
975
|
-
int fastBroadcastCount = 0;
|
|
976
|
-
|
|
977
|
-
void HandleUntargeted(IUntargetedMessage message)
|
|
978
|
-
{
|
|
979
|
-
++untargetedCount;
|
|
980
|
-
}
|
|
981
|
-
|
|
982
|
-
void HandleFastUntargeted(ref IUntargetedMessage message)
|
|
983
|
-
{
|
|
984
|
-
++fastUntargetedCount;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
void HandleTargeted(InstanceId target, ITargetedMessage message)
|
|
988
|
-
{
|
|
989
|
-
++targetedCount;
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
void HandleFastTargeted(ref InstanceId target, ref ITargetedMessage message)
|
|
993
|
-
{
|
|
994
|
-
++fastTargetedCount;
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
void HandleBroadcast(InstanceId source, IBroadcastMessage message)
|
|
998
|
-
{
|
|
999
|
-
++broadcastCount;
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
void HandleFastBroadcast(ref InstanceId source, ref IBroadcastMessage message)
|
|
1003
|
-
{
|
|
1004
|
-
++fastBroadcastCount;
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
HashSet<MessageRegistrationHandle> handles = new();
|
|
1008
|
-
try
|
|
1009
|
-
{
|
|
1010
|
-
MessageRegistrationHandle firstHandle = token.RegisterGlobalAcceptAll(
|
|
1011
|
-
HandleUntargeted,
|
|
1012
|
-
HandleTargeted,
|
|
1013
|
-
HandleBroadcast
|
|
1014
|
-
);
|
|
1015
|
-
_ = handles.Add(firstHandle);
|
|
1016
|
-
|
|
1017
|
-
// Untargeted
|
|
1018
|
-
SimpleUntargetedMessage untargetedMessage = new();
|
|
1019
|
-
untargetedMessage.EmitUntargeted();
|
|
1020
|
-
Assert.AreEqual(1, untargetedCount);
|
|
1021
|
-
Assert.AreEqual(0, targetedCount);
|
|
1022
|
-
Assert.AreEqual(0, broadcastCount);
|
|
1023
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1024
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1025
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1026
|
-
untargetedMessage.EmitUntargeted();
|
|
1027
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1028
|
-
Assert.AreEqual(0, targetedCount);
|
|
1029
|
-
Assert.AreEqual(0, broadcastCount);
|
|
1030
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1031
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1032
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1033
|
-
|
|
1034
|
-
// Targeted
|
|
1035
|
-
SimpleTargetedMessage targetedMessage = new();
|
|
1036
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
1037
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1038
|
-
Assert.AreEqual(1, targetedCount);
|
|
1039
|
-
Assert.AreEqual(0, broadcastCount);
|
|
1040
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1041
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1042
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1043
|
-
targetedMessage.EmitComponentTargeted(component);
|
|
1044
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1045
|
-
Assert.AreEqual(2, targetedCount);
|
|
1046
|
-
Assert.AreEqual(0, broadcastCount);
|
|
1047
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1048
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1049
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1050
|
-
|
|
1051
|
-
// Broadcast
|
|
1052
|
-
SimpleBroadcastMessage broadcastMessage = new();
|
|
1053
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1054
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1055
|
-
Assert.AreEqual(2, targetedCount);
|
|
1056
|
-
Assert.AreEqual(1, broadcastCount);
|
|
1057
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1058
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1059
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1060
|
-
broadcastMessage.EmitComponentBroadcast(component);
|
|
1061
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1062
|
-
Assert.AreEqual(2, targetedCount);
|
|
1063
|
-
Assert.AreEqual(2, broadcastCount);
|
|
1064
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1065
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1066
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1067
|
-
|
|
1068
|
-
component.enabled = false;
|
|
1069
|
-
int noMatchingCount = 0;
|
|
1070
|
-
Action<LogLevel, string> previousLog = MessagingDebug.LogFunction;
|
|
1071
|
-
try
|
|
1072
|
-
{
|
|
1073
|
-
MessagingDebug.LogFunction = (level, logMessage) =>
|
|
1074
|
-
{
|
|
1075
|
-
if (logMessage.Contains("matching"))
|
|
1076
|
-
{
|
|
1077
|
-
++noMatchingCount;
|
|
1078
|
-
}
|
|
1079
|
-
};
|
|
1080
|
-
untargetedMessage.EmitUntargeted();
|
|
1081
|
-
Assert.AreEqual(1, noMatchingCount);
|
|
1082
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
1083
|
-
Assert.AreEqual(2, noMatchingCount);
|
|
1084
|
-
targetedMessage.EmitComponentTargeted(component);
|
|
1085
|
-
Assert.AreEqual(3, noMatchingCount);
|
|
1086
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1087
|
-
Assert.AreEqual(4, noMatchingCount);
|
|
1088
|
-
broadcastMessage.EmitComponentBroadcast(component);
|
|
1089
|
-
Assert.AreEqual(5, noMatchingCount);
|
|
1090
|
-
}
|
|
1091
|
-
finally
|
|
1092
|
-
{
|
|
1093
|
-
MessagingDebug.LogFunction = previousLog;
|
|
1094
|
-
}
|
|
1095
|
-
|
|
1096
|
-
Assert.AreEqual(2, untargetedCount);
|
|
1097
|
-
Assert.AreEqual(2, targetedCount);
|
|
1098
|
-
Assert.AreEqual(2, broadcastCount);
|
|
1099
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1100
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1101
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1102
|
-
|
|
1103
|
-
component.enabled = true;
|
|
1104
|
-
MessageRegistrationHandle secondHandle = token.RegisterGlobalAcceptAll(
|
|
1105
|
-
HandleUntargeted,
|
|
1106
|
-
HandleTargeted,
|
|
1107
|
-
HandleBroadcast
|
|
1108
|
-
);
|
|
1109
|
-
_ = handles.Add(secondHandle);
|
|
1110
|
-
untargetedMessage.EmitUntargeted();
|
|
1111
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
1112
|
-
targetedMessage.EmitComponentTargeted(component);
|
|
1113
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1114
|
-
broadcastMessage.EmitComponentBroadcast(component);
|
|
1115
|
-
Assert.AreEqual(3, untargetedCount);
|
|
1116
|
-
Assert.AreEqual(4, targetedCount);
|
|
1117
|
-
Assert.AreEqual(4, broadcastCount);
|
|
1118
|
-
Assert.AreEqual(0, fastUntargetedCount);
|
|
1119
|
-
Assert.AreEqual(0, fastTargetedCount);
|
|
1120
|
-
Assert.AreEqual(0, fastBroadcastCount);
|
|
1121
|
-
|
|
1122
|
-
MessageRegistrationHandle thirdHandle = token.RegisterGlobalAcceptAll(
|
|
1123
|
-
HandleFastUntargeted,
|
|
1124
|
-
HandleFastTargeted,
|
|
1125
|
-
HandleFastBroadcast
|
|
1126
|
-
);
|
|
1127
|
-
_ = handles.Add(thirdHandle);
|
|
1128
|
-
untargetedMessage.EmitUntargeted();
|
|
1129
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
1130
|
-
targetedMessage.EmitComponentTargeted(component);
|
|
1131
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1132
|
-
broadcastMessage.EmitComponentBroadcast(component);
|
|
1133
|
-
Assert.AreEqual(4, untargetedCount);
|
|
1134
|
-
Assert.AreEqual(6, targetedCount);
|
|
1135
|
-
Assert.AreEqual(6, broadcastCount);
|
|
1136
|
-
Assert.AreEqual(1, fastUntargetedCount);
|
|
1137
|
-
Assert.AreEqual(2, fastTargetedCount);
|
|
1138
|
-
Assert.AreEqual(2, fastBroadcastCount);
|
|
1139
|
-
|
|
1140
|
-
MessageRegistrationHandle fourthHandle = token.RegisterGlobalAcceptAll(
|
|
1141
|
-
HandleFastUntargeted,
|
|
1142
|
-
HandleFastTargeted,
|
|
1143
|
-
HandleFastBroadcast
|
|
1144
|
-
);
|
|
1145
|
-
_ = handles.Add(fourthHandle);
|
|
1146
|
-
untargetedMessage.EmitUntargeted();
|
|
1147
|
-
targetedMessage.EmitGameObjectTargeted(test);
|
|
1148
|
-
targetedMessage.EmitComponentTargeted(component);
|
|
1149
|
-
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1150
|
-
broadcastMessage.EmitComponentBroadcast(component);
|
|
1151
|
-
Assert.AreEqual(5, untargetedCount);
|
|
1152
|
-
Assert.AreEqual(8, targetedCount);
|
|
1153
|
-
Assert.AreEqual(8, broadcastCount);
|
|
1154
|
-
Assert.AreEqual(2, fastUntargetedCount);
|
|
1155
|
-
Assert.AreEqual(4, fastTargetedCount);
|
|
1156
|
-
Assert.AreEqual(4, fastBroadcastCount);
|
|
1157
|
-
}
|
|
1158
|
-
finally
|
|
1159
|
-
{
|
|
1160
|
-
foreach (MessageRegistrationHandle handle in handles)
|
|
1161
|
-
{
|
|
1162
|
-
token.RemoveRegistration(handle);
|
|
1163
|
-
}
|
|
1164
|
-
}
|
|
1165
|
-
|
|
1166
|
-
yield break;
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
|
-
[UnityTest]
|
|
1170
|
-
public IEnumerator InterceptorOrder()
|
|
1171
|
-
{
|
|
1172
|
-
GameObject test = new(nameof(InterceptorOrder), typeof(SimpleMessageAwareComponent));
|
|
1173
|
-
_spawned.Add(test);
|
|
1174
|
-
|
|
1175
|
-
SimpleMessageAwareComponent component =
|
|
1176
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1177
|
-
|
|
1178
|
-
bool seen = false;
|
|
1179
|
-
component.untargetedHandler = () =>
|
|
1180
|
-
{
|
|
1181
|
-
// ReSharper disable once AccessToModifiedClosure
|
|
1182
|
-
Assert.IsFalse(seen);
|
|
1183
|
-
seen = true;
|
|
1184
|
-
};
|
|
1185
|
-
|
|
1186
|
-
MessageRegistrationToken token = GetToken(component);
|
|
1187
|
-
HashSet<MessageRegistrationHandle> handles = new();
|
|
1188
|
-
try
|
|
1189
|
-
{
|
|
1190
|
-
int seenCount = 0;
|
|
1191
|
-
|
|
1192
|
-
bool UntargetedInterceptorFirstPriority(ref SimpleUntargetedMessage message)
|
|
1193
|
-
{
|
|
1194
|
-
return seenCount++ % 3 == 0;
|
|
1195
|
-
}
|
|
1196
|
-
|
|
1197
|
-
bool UntargetedInterceptorSecondPriority(ref SimpleUntargetedMessage message)
|
|
1198
|
-
{
|
|
1199
|
-
return seenCount++ % 3 == 1;
|
|
1200
|
-
}
|
|
1201
|
-
|
|
1202
|
-
bool UntargetedInterceptorThirdPriority(ref SimpleUntargetedMessage message)
|
|
1203
|
-
{
|
|
1204
|
-
return seenCount++ % 3 == 2;
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
int interceptorRunCount = 0;
|
|
1208
|
-
|
|
1209
|
-
bool UntargetedInterceptorFourthPriority(ref SimpleUntargetedMessage message)
|
|
1210
|
-
{
|
|
1211
|
-
// We should be running close to first and last
|
|
1212
|
-
if (++interceptorRunCount % 2 == 0)
|
|
1213
|
-
{
|
|
1214
|
-
return seenCount % 3 == 0;
|
|
1215
|
-
}
|
|
1216
|
-
|
|
1217
|
-
return true;
|
|
1218
|
-
}
|
|
1219
|
-
|
|
1220
|
-
MessageRegistrationHandle secondInterceptor =
|
|
1221
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1222
|
-
UntargetedInterceptorSecondPriority,
|
|
1223
|
-
100
|
|
1224
|
-
);
|
|
1225
|
-
_ = handles.Add(secondInterceptor);
|
|
1226
|
-
MessageRegistrationHandle thirdInterceptor =
|
|
1227
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1228
|
-
UntargetedInterceptorThirdPriority,
|
|
1229
|
-
101
|
|
1230
|
-
);
|
|
1231
|
-
_ = handles.Add(thirdInterceptor);
|
|
1232
|
-
MessageRegistrationHandle firstInterceptor =
|
|
1233
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1234
|
-
UntargetedInterceptorFirstPriority,
|
|
1235
|
-
-1
|
|
1236
|
-
);
|
|
1237
|
-
_ = handles.Add(firstInterceptor);
|
|
1238
|
-
MessageRegistrationHandle fourthInterceptorFirstPriority =
|
|
1239
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1240
|
-
UntargetedInterceptorFourthPriority,
|
|
1241
|
-
-1
|
|
1242
|
-
);
|
|
1243
|
-
_ = handles.Add(fourthInterceptorFirstPriority);
|
|
1244
|
-
MessageRegistrationHandle fourthInterceptorSecondPriority =
|
|
1245
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1246
|
-
UntargetedInterceptorFourthPriority,
|
|
1247
|
-
102
|
|
1248
|
-
);
|
|
1249
|
-
_ = handles.Add(fourthInterceptorSecondPriority);
|
|
1250
|
-
|
|
1251
|
-
SimpleUntargetedMessage message = new();
|
|
1252
|
-
message.EmitUntargeted();
|
|
1253
|
-
Assert.IsTrue(seen);
|
|
1254
|
-
Assert.AreEqual(2, interceptorRunCount);
|
|
1255
|
-
seen = false;
|
|
1256
|
-
|
|
1257
|
-
message.EmitUntargeted();
|
|
1258
|
-
Assert.IsTrue(seen);
|
|
1259
|
-
Assert.AreEqual(4, interceptorRunCount);
|
|
1260
|
-
seen = false;
|
|
1261
|
-
|
|
1262
|
-
MessageRegistrationHandle doubleRegistrationOne =
|
|
1263
|
-
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1264
|
-
UntargetedInterceptorFirstPriority,
|
|
1265
|
-
-1
|
|
1266
|
-
);
|
|
1267
|
-
_ = handles.Add(doubleRegistrationOne);
|
|
1268
|
-
message.EmitUntargeted();
|
|
1269
|
-
Assert.IsTrue(seen);
|
|
1270
|
-
Assert.AreEqual(6, interceptorRunCount);
|
|
1271
|
-
seen = false;
|
|
1272
|
-
|
|
1273
|
-
_ = handles.Remove(firstInterceptor);
|
|
1274
|
-
token.RemoveRegistration(firstInterceptor);
|
|
1275
|
-
message.EmitUntargeted();
|
|
1276
|
-
Assert.IsTrue(seen);
|
|
1277
|
-
Assert.AreEqual(8, interceptorRunCount);
|
|
1278
|
-
seen = false;
|
|
1279
|
-
|
|
1280
|
-
// Double remove
|
|
1281
|
-
token.RemoveRegistration(firstInterceptor);
|
|
1282
|
-
token.RemoveRegistration(firstInterceptor);
|
|
1283
|
-
message.EmitUntargeted();
|
|
1284
|
-
Assert.IsTrue(seen);
|
|
1285
|
-
Assert.AreEqual(10, interceptorRunCount);
|
|
1286
|
-
}
|
|
1287
|
-
finally
|
|
1288
|
-
{
|
|
1289
|
-
foreach (MessageRegistrationHandle handle in handles)
|
|
1290
|
-
{
|
|
1291
|
-
token.RemoveRegistration(handle);
|
|
1292
|
-
}
|
|
1293
|
-
}
|
|
1294
|
-
|
|
1295
|
-
yield break;
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
|
-
[UnityTest]
|
|
1299
|
-
public IEnumerator UntargetedRemoveOrder()
|
|
1300
|
-
{
|
|
1301
|
-
GameObject test = new(
|
|
1302
|
-
nameof(UntargetedRemoveOrder),
|
|
1303
|
-
typeof(SimpleMessageAwareComponent)
|
|
1304
|
-
);
|
|
1305
|
-
_spawned.Add(test);
|
|
1306
|
-
|
|
1307
|
-
SimpleMessageAwareComponent component =
|
|
1308
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1309
|
-
|
|
1310
|
-
MessageRegistrationToken token = GetToken(component);
|
|
1311
|
-
|
|
1312
|
-
int callCount = 0;
|
|
1313
|
-
int fastCallCount = 0;
|
|
1314
|
-
|
|
1315
|
-
void HandleUntargeted(SimpleUntargetedMessage message)
|
|
1316
|
-
{
|
|
1317
|
-
++callCount;
|
|
1318
|
-
}
|
|
1319
|
-
|
|
1320
|
-
void HandleFastUntargeted(ref SimpleUntargetedMessage message)
|
|
1321
|
-
{
|
|
1322
|
-
++fastCallCount;
|
|
1323
|
-
}
|
|
1324
|
-
|
|
1325
|
-
SimpleUntargetedMessage message = new();
|
|
1326
|
-
int expectedCallCount = 0;
|
|
1327
|
-
Run(
|
|
1328
|
-
() => new[] { token.RegisterUntargeted<SimpleUntargetedMessage>(HandleUntargeted) },
|
|
1329
|
-
() => message.EmitUntargeted(),
|
|
1330
|
-
() =>
|
|
1331
|
-
{
|
|
1332
|
-
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1333
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1334
|
-
},
|
|
1335
|
-
() =>
|
|
1336
|
-
{
|
|
1337
|
-
Assert.AreEqual(expectedCallCount, callCount);
|
|
1338
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1339
|
-
},
|
|
1340
|
-
token
|
|
1341
|
-
);
|
|
1342
|
-
|
|
1343
|
-
callCount = 0;
|
|
1344
|
-
expectedCallCount = 0;
|
|
1345
|
-
Run(
|
|
1346
|
-
() =>
|
|
1347
|
-
new[]
|
|
1348
|
-
{
|
|
1349
|
-
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleFastUntargeted),
|
|
1350
|
-
},
|
|
1351
|
-
() => message.EmitUntargeted(),
|
|
1352
|
-
() =>
|
|
1353
|
-
{
|
|
1354
|
-
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1355
|
-
Assert.AreEqual(0, callCount);
|
|
1356
|
-
},
|
|
1357
|
-
() =>
|
|
1358
|
-
{
|
|
1359
|
-
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1360
|
-
Assert.AreEqual(0, callCount);
|
|
1361
|
-
},
|
|
1362
|
-
token
|
|
1363
|
-
);
|
|
1364
|
-
|
|
1365
|
-
callCount = 0;
|
|
1366
|
-
fastCallCount = 0;
|
|
1367
|
-
Run(
|
|
1368
|
-
() =>
|
|
1369
|
-
{
|
|
1370
|
-
return new[]
|
|
1371
|
-
{
|
|
1372
|
-
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleFastUntargeted),
|
|
1373
|
-
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleUntargeted),
|
|
1374
|
-
};
|
|
1375
|
-
},
|
|
1376
|
-
() => message.EmitUntargeted(),
|
|
1377
|
-
() => { },
|
|
1378
|
-
() =>
|
|
1379
|
-
{
|
|
1380
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1381
|
-
},
|
|
1382
|
-
token
|
|
1383
|
-
);
|
|
1384
|
-
|
|
1385
|
-
yield break;
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
|
-
[UnityTest]
|
|
1389
|
-
public IEnumerator TargetedRemoveOrder()
|
|
1390
|
-
{
|
|
1391
|
-
GameObject test = new(nameof(TargetedRemoveOrder), typeof(SimpleMessageAwareComponent));
|
|
1392
|
-
_spawned.Add(test);
|
|
1393
|
-
|
|
1394
|
-
SimpleMessageAwareComponent component =
|
|
1395
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1396
|
-
|
|
1397
|
-
MessageRegistrationToken token = GetToken(component);
|
|
1398
|
-
|
|
1399
|
-
int callCount = 0;
|
|
1400
|
-
int fastCallCount = 0;
|
|
1401
|
-
|
|
1402
|
-
void HandleTargeted(SimpleTargetedMessage message)
|
|
1403
|
-
{
|
|
1404
|
-
++callCount;
|
|
1405
|
-
}
|
|
1406
|
-
|
|
1407
|
-
void HandleFastTargeted(ref SimpleTargetedMessage message)
|
|
1408
|
-
{
|
|
1409
|
-
++fastCallCount;
|
|
1410
|
-
}
|
|
1411
|
-
|
|
1412
|
-
SimpleTargetedMessage message = new();
|
|
1413
|
-
int expectedCallCount = 0;
|
|
1414
|
-
Run(
|
|
1415
|
-
() =>
|
|
1416
|
-
new[]
|
|
1417
|
-
{
|
|
1418
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1419
|
-
test,
|
|
1420
|
-
HandleTargeted
|
|
1421
|
-
),
|
|
1422
|
-
},
|
|
1423
|
-
() =>
|
|
1424
|
-
{
|
|
1425
|
-
message.EmitComponentTargeted(component);
|
|
1426
|
-
message.EmitGameObjectTargeted(test);
|
|
1427
|
-
},
|
|
1428
|
-
() =>
|
|
1429
|
-
{
|
|
1430
|
-
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1431
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1432
|
-
},
|
|
1433
|
-
() =>
|
|
1434
|
-
{
|
|
1435
|
-
Assert.AreEqual(expectedCallCount, callCount);
|
|
1436
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1437
|
-
},
|
|
1438
|
-
token
|
|
1439
|
-
);
|
|
1440
|
-
|
|
1441
|
-
callCount = 0;
|
|
1442
|
-
expectedCallCount = 0;
|
|
1443
|
-
Run(
|
|
1444
|
-
() =>
|
|
1445
|
-
new[]
|
|
1446
|
-
{
|
|
1447
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1448
|
-
test,
|
|
1449
|
-
HandleFastTargeted
|
|
1450
|
-
),
|
|
1451
|
-
},
|
|
1452
|
-
() =>
|
|
1453
|
-
{
|
|
1454
|
-
message.EmitComponentTargeted(component);
|
|
1455
|
-
message.EmitGameObjectTargeted(test);
|
|
1456
|
-
},
|
|
1457
|
-
() =>
|
|
1458
|
-
{
|
|
1459
|
-
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1460
|
-
Assert.AreEqual(0, callCount);
|
|
1461
|
-
},
|
|
1462
|
-
() =>
|
|
1463
|
-
{
|
|
1464
|
-
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1465
|
-
Assert.AreEqual(0, callCount);
|
|
1466
|
-
},
|
|
1467
|
-
token
|
|
1468
|
-
);
|
|
1469
|
-
|
|
1470
|
-
callCount = 0;
|
|
1471
|
-
fastCallCount = 0;
|
|
1472
|
-
Run(
|
|
1473
|
-
() =>
|
|
1474
|
-
{
|
|
1475
|
-
return new[]
|
|
1476
|
-
{
|
|
1477
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1478
|
-
test,
|
|
1479
|
-
HandleFastTargeted
|
|
1480
|
-
),
|
|
1481
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1482
|
-
test,
|
|
1483
|
-
HandleTargeted
|
|
1484
|
-
),
|
|
1485
|
-
};
|
|
1486
|
-
},
|
|
1487
|
-
() =>
|
|
1488
|
-
{
|
|
1489
|
-
message.EmitComponentTargeted(component);
|
|
1490
|
-
message.EmitGameObjectTargeted(test);
|
|
1491
|
-
},
|
|
1492
|
-
() => { },
|
|
1493
|
-
() =>
|
|
1494
|
-
{
|
|
1495
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1496
|
-
},
|
|
1497
|
-
token
|
|
1498
|
-
);
|
|
1499
|
-
|
|
1500
|
-
callCount = 0;
|
|
1501
|
-
fastCallCount = 0;
|
|
1502
|
-
Run(
|
|
1503
|
-
() =>
|
|
1504
|
-
{
|
|
1505
|
-
return new[]
|
|
1506
|
-
{
|
|
1507
|
-
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1508
|
-
component,
|
|
1509
|
-
HandleFastTargeted
|
|
1510
|
-
),
|
|
1511
|
-
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1512
|
-
test,
|
|
1513
|
-
HandleTargeted
|
|
1514
|
-
),
|
|
1515
|
-
};
|
|
1516
|
-
},
|
|
1517
|
-
() =>
|
|
1518
|
-
{
|
|
1519
|
-
message.EmitComponentTargeted(component);
|
|
1520
|
-
message.EmitGameObjectTargeted(test);
|
|
1521
|
-
},
|
|
1522
|
-
() => { },
|
|
1523
|
-
() =>
|
|
1524
|
-
{
|
|
1525
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1526
|
-
},
|
|
1527
|
-
token
|
|
1528
|
-
);
|
|
1529
|
-
|
|
1530
|
-
callCount = 0;
|
|
1531
|
-
fastCallCount = 0;
|
|
1532
|
-
Run(
|
|
1533
|
-
() =>
|
|
1534
|
-
{
|
|
1535
|
-
return new[]
|
|
1536
|
-
{
|
|
1537
|
-
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1538
|
-
component,
|
|
1539
|
-
HandleFastTargeted
|
|
1540
|
-
),
|
|
1541
|
-
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1542
|
-
component,
|
|
1543
|
-
HandleTargeted
|
|
1544
|
-
),
|
|
1545
|
-
};
|
|
1546
|
-
},
|
|
1547
|
-
() =>
|
|
1548
|
-
{
|
|
1549
|
-
message.EmitComponentTargeted(component);
|
|
1550
|
-
message.EmitGameObjectTargeted(test);
|
|
1551
|
-
},
|
|
1552
|
-
() => { },
|
|
1553
|
-
() =>
|
|
1554
|
-
{
|
|
1555
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1556
|
-
},
|
|
1557
|
-
token
|
|
1558
|
-
);
|
|
1559
|
-
|
|
1560
|
-
yield break;
|
|
1561
|
-
}
|
|
1562
|
-
|
|
1563
|
-
[UnityTest]
|
|
1564
|
-
public IEnumerator BroadcastRemoveOrder()
|
|
1565
|
-
{
|
|
1566
|
-
GameObject test = new(
|
|
1567
|
-
nameof(BroadcastRemoveOrder),
|
|
1568
|
-
typeof(SimpleMessageAwareComponent)
|
|
1569
|
-
);
|
|
1570
|
-
_spawned.Add(test);
|
|
1571
|
-
|
|
1572
|
-
SimpleMessageAwareComponent component =
|
|
1573
|
-
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1574
|
-
|
|
1575
|
-
MessageRegistrationToken token = GetToken(component);
|
|
1576
|
-
int callCount = 0;
|
|
1577
|
-
int fastCallCount = 0;
|
|
1578
|
-
|
|
1579
|
-
void HandleBroadcast(SimpleBroadcastMessage message)
|
|
1580
|
-
{
|
|
1581
|
-
++callCount;
|
|
1582
|
-
}
|
|
1583
|
-
|
|
1584
|
-
void HandleFastBroadcast(ref SimpleBroadcastMessage message)
|
|
1585
|
-
{
|
|
1586
|
-
++fastCallCount;
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1589
|
-
SimpleBroadcastMessage message = new();
|
|
1590
|
-
int expectedCallCount = 0;
|
|
1591
|
-
Run(
|
|
1592
|
-
() =>
|
|
1593
|
-
new[]
|
|
1594
|
-
{
|
|
1595
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1596
|
-
test,
|
|
1597
|
-
HandleBroadcast
|
|
1598
|
-
),
|
|
1599
|
-
},
|
|
1600
|
-
() =>
|
|
1601
|
-
{
|
|
1602
|
-
message.EmitComponentBroadcast(component);
|
|
1603
|
-
message.EmitGameObjectBroadcast(test);
|
|
1604
|
-
},
|
|
1605
|
-
() =>
|
|
1606
|
-
{
|
|
1607
|
-
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1608
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1609
|
-
},
|
|
1610
|
-
() =>
|
|
1611
|
-
{
|
|
1612
|
-
Assert.AreEqual(expectedCallCount, callCount);
|
|
1613
|
-
Assert.AreEqual(0, fastCallCount);
|
|
1614
|
-
},
|
|
1615
|
-
token
|
|
1616
|
-
);
|
|
1617
|
-
|
|
1618
|
-
callCount = 0;
|
|
1619
|
-
expectedCallCount = 0;
|
|
1620
|
-
Run(
|
|
1621
|
-
() =>
|
|
1622
|
-
new[]
|
|
1623
|
-
{
|
|
1624
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1625
|
-
test,
|
|
1626
|
-
HandleFastBroadcast
|
|
1627
|
-
),
|
|
1628
|
-
},
|
|
1629
|
-
() =>
|
|
1630
|
-
{
|
|
1631
|
-
message.EmitComponentBroadcast(component);
|
|
1632
|
-
message.EmitGameObjectBroadcast(test);
|
|
1633
|
-
},
|
|
1634
|
-
() =>
|
|
1635
|
-
{
|
|
1636
|
-
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1637
|
-
Assert.AreEqual(0, callCount);
|
|
1638
|
-
},
|
|
1639
|
-
() =>
|
|
1640
|
-
{
|
|
1641
|
-
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1642
|
-
Assert.AreEqual(0, callCount);
|
|
1643
|
-
},
|
|
1644
|
-
token
|
|
1645
|
-
);
|
|
1646
|
-
|
|
1647
|
-
callCount = 0;
|
|
1648
|
-
fastCallCount = 0;
|
|
1649
|
-
Run(
|
|
1650
|
-
() =>
|
|
1651
|
-
{
|
|
1652
|
-
return new[]
|
|
1653
|
-
{
|
|
1654
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1655
|
-
test,
|
|
1656
|
-
HandleFastBroadcast
|
|
1657
|
-
),
|
|
1658
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1659
|
-
test,
|
|
1660
|
-
HandleBroadcast
|
|
1661
|
-
),
|
|
1662
|
-
};
|
|
1663
|
-
},
|
|
1664
|
-
() =>
|
|
1665
|
-
{
|
|
1666
|
-
message.EmitComponentBroadcast(component);
|
|
1667
|
-
message.EmitGameObjectBroadcast(test);
|
|
1668
|
-
},
|
|
1669
|
-
() => { },
|
|
1670
|
-
() =>
|
|
1671
|
-
{
|
|
1672
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1673
|
-
},
|
|
1674
|
-
token
|
|
1675
|
-
);
|
|
1676
|
-
|
|
1677
|
-
callCount = 0;
|
|
1678
|
-
fastCallCount = 0;
|
|
1679
|
-
Run(
|
|
1680
|
-
() =>
|
|
1681
|
-
{
|
|
1682
|
-
return new[]
|
|
1683
|
-
{
|
|
1684
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1685
|
-
test,
|
|
1686
|
-
HandleFastBroadcast
|
|
1687
|
-
),
|
|
1688
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1689
|
-
test,
|
|
1690
|
-
HandleBroadcast
|
|
1691
|
-
),
|
|
1692
|
-
};
|
|
1693
|
-
},
|
|
1694
|
-
() =>
|
|
1695
|
-
{
|
|
1696
|
-
message.EmitComponentBroadcast(component);
|
|
1697
|
-
message.EmitGameObjectBroadcast(test);
|
|
1698
|
-
},
|
|
1699
|
-
() => { },
|
|
1700
|
-
() =>
|
|
1701
|
-
{
|
|
1702
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1703
|
-
},
|
|
1704
|
-
token
|
|
1705
|
-
);
|
|
1706
|
-
|
|
1707
|
-
callCount = 0;
|
|
1708
|
-
fastCallCount = 0;
|
|
1709
|
-
Run(
|
|
1710
|
-
() =>
|
|
1711
|
-
{
|
|
1712
|
-
return new[]
|
|
1713
|
-
{
|
|
1714
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1715
|
-
test,
|
|
1716
|
-
HandleFastBroadcast
|
|
1717
|
-
),
|
|
1718
|
-
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1719
|
-
test,
|
|
1720
|
-
HandleBroadcast
|
|
1721
|
-
),
|
|
1722
|
-
};
|
|
1723
|
-
},
|
|
1724
|
-
() =>
|
|
1725
|
-
{
|
|
1726
|
-
message.EmitComponentBroadcast(component);
|
|
1727
|
-
message.EmitGameObjectBroadcast(test);
|
|
1728
|
-
},
|
|
1729
|
-
() => { },
|
|
1730
|
-
() =>
|
|
1731
|
-
{
|
|
1732
|
-
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1733
|
-
},
|
|
1734
|
-
token
|
|
1735
|
-
);
|
|
1736
|
-
|
|
1737
|
-
yield break;
|
|
1738
|
-
}
|
|
1739
|
-
}
|
|
1740
|
-
}
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Core
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
using DxMessaging.Core;
|
|
7
|
+
using DxMessaging.Core.Extensions;
|
|
8
|
+
using DxMessaging.Core.MessageBus;
|
|
9
|
+
using DxMessaging.Core.Messages;
|
|
10
|
+
using NUnit.Framework;
|
|
11
|
+
using Scripts.Components;
|
|
12
|
+
using Scripts.Messages;
|
|
13
|
+
using UnityEngine;
|
|
14
|
+
using UnityEngine.TestTools;
|
|
15
|
+
using Object = UnityEngine.Object;
|
|
16
|
+
|
|
17
|
+
public sealed class NominalTests : MessagingTestBase
|
|
18
|
+
{
|
|
19
|
+
[UnityTest]
|
|
20
|
+
public IEnumerator Nominal()
|
|
21
|
+
{
|
|
22
|
+
GameObject test = new(nameof(Nominal), typeof(SimpleMessageAwareComponent));
|
|
23
|
+
_spawned.Add(test);
|
|
24
|
+
GameObject nonTest = new("Non-Test", typeof(SimpleMessageAwareComponent));
|
|
25
|
+
_spawned.Add(nonTest);
|
|
26
|
+
|
|
27
|
+
SimpleMessageAwareComponent firstComponent =
|
|
28
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
29
|
+
|
|
30
|
+
int untargetedWorks = 0;
|
|
31
|
+
int targetedWorks = 0;
|
|
32
|
+
int targetedWithoutTargetingWorks = 0;
|
|
33
|
+
int broadcastWorks = 0;
|
|
34
|
+
int broadcastWithoutSourceWorks = 0;
|
|
35
|
+
Dictionary<object, int> componentTargetedWorks = new();
|
|
36
|
+
Dictionary<object, int> componentBroadcastWorks = new();
|
|
37
|
+
|
|
38
|
+
void SetupComponent(SimpleMessageAwareComponent toSetup)
|
|
39
|
+
{
|
|
40
|
+
toSetup.untargetedHandler = () => ++untargetedWorks;
|
|
41
|
+
toSetup.targetedHandler = () => ++targetedWorks;
|
|
42
|
+
toSetup.targetedWithoutTargetingHandler = () => ++targetedWithoutTargetingWorks;
|
|
43
|
+
toSetup.broadcastHandler = () => ++broadcastWorks;
|
|
44
|
+
toSetup.broadcastWithoutSourceHandler = () => ++broadcastWithoutSourceWorks;
|
|
45
|
+
toSetup.componentTargetedHandler = () =>
|
|
46
|
+
{
|
|
47
|
+
if (!componentTargetedWorks.TryGetValue(toSetup, out int existing))
|
|
48
|
+
{
|
|
49
|
+
existing = 0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
componentTargetedWorks[toSetup] = ++existing;
|
|
53
|
+
};
|
|
54
|
+
toSetup.componentBroadcastHandler = () =>
|
|
55
|
+
{
|
|
56
|
+
if (!componentBroadcastWorks.TryGetValue(toSetup, out int existing))
|
|
57
|
+
{
|
|
58
|
+
existing = 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
componentBroadcastWorks[toSetup] = ++existing;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
SetupComponent(firstComponent);
|
|
66
|
+
|
|
67
|
+
// Generate non-component targeted methods
|
|
68
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
69
|
+
untargetedMessage.EmitUntargeted();
|
|
70
|
+
Assert.AreEqual(1, untargetedWorks);
|
|
71
|
+
Assert.AreEqual(0, targetedWorks);
|
|
72
|
+
Assert.AreEqual(0, broadcastWorks);
|
|
73
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
74
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
75
|
+
Assert.AreEqual(0, targetedWithoutTargetingWorks);
|
|
76
|
+
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
77
|
+
|
|
78
|
+
untargetedMessage.EmitUntargeted();
|
|
79
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
80
|
+
Assert.AreEqual(0, targetedWorks);
|
|
81
|
+
Assert.AreEqual(0, broadcastWorks);
|
|
82
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
83
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
84
|
+
Assert.AreEqual(0, targetedWithoutTargetingWorks);
|
|
85
|
+
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
86
|
+
|
|
87
|
+
SimpleTargetedMessage targetedMessage = new();
|
|
88
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
89
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
90
|
+
Assert.AreEqual(1, targetedWorks);
|
|
91
|
+
Assert.AreEqual(0, broadcastWorks);
|
|
92
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
93
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
94
|
+
Assert.AreEqual(1, targetedWithoutTargetingWorks);
|
|
95
|
+
Assert.AreEqual(0, broadcastWithoutSourceWorks);
|
|
96
|
+
|
|
97
|
+
SimpleBroadcastMessage broadcastMessage = new();
|
|
98
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
99
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
100
|
+
Assert.AreEqual(1, targetedWorks);
|
|
101
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
102
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
103
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
104
|
+
Assert.AreEqual(1, targetedWithoutTargetingWorks);
|
|
105
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
106
|
+
|
|
107
|
+
yield return null;
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
If we add a second component, our Untargeted, GameObjectTargeted,
|
|
111
|
+
and GameObjectBroadcast receivers will be called *twice* for each
|
|
112
|
+
message emission, once per component.
|
|
113
|
+
*/
|
|
114
|
+
SimpleMessageAwareComponent secondComponent =
|
|
115
|
+
test.AddComponent<SimpleMessageAwareComponent>();
|
|
116
|
+
SetupComponent(secondComponent);
|
|
117
|
+
|
|
118
|
+
// Targeted
|
|
119
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
120
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
121
|
+
Assert.AreEqual(3, targetedWorks);
|
|
122
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
123
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
124
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
125
|
+
Assert.AreEqual(3, targetedWithoutTargetingWorks);
|
|
126
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
127
|
+
|
|
128
|
+
targetedMessage.EmitGameObjectTargeted(nonTest);
|
|
129
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
130
|
+
Assert.AreEqual(3, targetedWorks);
|
|
131
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
132
|
+
Assert.AreEqual(0, componentTargetedWorks.Count);
|
|
133
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
134
|
+
Assert.AreEqual(5, targetedWithoutTargetingWorks);
|
|
135
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
136
|
+
|
|
137
|
+
// Component Targeted
|
|
138
|
+
targetedMessage.EmitComponentTargeted(firstComponent);
|
|
139
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
140
|
+
Assert.AreEqual(3, targetedWorks);
|
|
141
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
142
|
+
Assert.AreEqual(1, componentTargetedWorks.Count);
|
|
143
|
+
Assert.AreEqual(1, componentTargetedWorks[firstComponent]);
|
|
144
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
145
|
+
Assert.AreEqual(7, targetedWithoutTargetingWorks);
|
|
146
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
147
|
+
|
|
148
|
+
targetedMessage.EmitComponentTargeted(secondComponent);
|
|
149
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
150
|
+
Assert.AreEqual(3, targetedWorks);
|
|
151
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
152
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
153
|
+
Assert.AreEqual(1, componentTargetedWorks[firstComponent]);
|
|
154
|
+
Assert.AreEqual(1, componentTargetedWorks[secondComponent]);
|
|
155
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
156
|
+
Assert.AreEqual(9, targetedWithoutTargetingWorks);
|
|
157
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
158
|
+
|
|
159
|
+
targetedMessage.EmitComponentTargeted(firstComponent);
|
|
160
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
161
|
+
Assert.AreEqual(3, targetedWorks);
|
|
162
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
163
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
164
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
165
|
+
Assert.AreEqual(1, componentTargetedWorks[secondComponent]);
|
|
166
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
167
|
+
Assert.AreEqual(11, targetedWithoutTargetingWorks);
|
|
168
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
169
|
+
|
|
170
|
+
targetedMessage.EmitComponentTargeted(secondComponent);
|
|
171
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
172
|
+
Assert.AreEqual(3, targetedWorks);
|
|
173
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
174
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
175
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
176
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
177
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
178
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
179
|
+
Assert.AreEqual(1, broadcastWithoutSourceWorks);
|
|
180
|
+
|
|
181
|
+
// Broadcast
|
|
182
|
+
broadcastMessage.EmitGameObjectBroadcast(nonTest);
|
|
183
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
184
|
+
Assert.AreEqual(3, targetedWorks);
|
|
185
|
+
Assert.AreEqual(1, broadcastWorks);
|
|
186
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
187
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
188
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
189
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
190
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
191
|
+
Assert.AreEqual(3, broadcastWithoutSourceWorks);
|
|
192
|
+
|
|
193
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
194
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
195
|
+
Assert.AreEqual(3, targetedWorks);
|
|
196
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
197
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
198
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
199
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
200
|
+
Assert.AreEqual(0, componentBroadcastWorks.Count);
|
|
201
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
202
|
+
Assert.AreEqual(5, broadcastWithoutSourceWorks);
|
|
203
|
+
|
|
204
|
+
// Component Broadcast
|
|
205
|
+
broadcastMessage.EmitComponentBroadcast(firstComponent);
|
|
206
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
207
|
+
Assert.AreEqual(3, targetedWorks);
|
|
208
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
209
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
210
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
211
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
212
|
+
Assert.AreEqual(1, componentBroadcastWorks.Count);
|
|
213
|
+
Assert.AreEqual(1, componentBroadcastWorks[firstComponent]);
|
|
214
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
215
|
+
Assert.AreEqual(7, broadcastWithoutSourceWorks);
|
|
216
|
+
|
|
217
|
+
broadcastMessage.EmitComponentBroadcast(secondComponent);
|
|
218
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
219
|
+
Assert.AreEqual(3, targetedWorks);
|
|
220
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
221
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
222
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
223
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
224
|
+
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
225
|
+
Assert.AreEqual(1, componentBroadcastWorks[firstComponent]);
|
|
226
|
+
Assert.AreEqual(1, componentBroadcastWorks[secondComponent]);
|
|
227
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
228
|
+
Assert.AreEqual(9, broadcastWithoutSourceWorks);
|
|
229
|
+
|
|
230
|
+
broadcastMessage.EmitComponentBroadcast(firstComponent);
|
|
231
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
232
|
+
Assert.AreEqual(3, targetedWorks);
|
|
233
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
234
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
235
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
236
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
237
|
+
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
238
|
+
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
239
|
+
Assert.AreEqual(1, componentBroadcastWorks[secondComponent]);
|
|
240
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
241
|
+
Assert.AreEqual(11, broadcastWithoutSourceWorks);
|
|
242
|
+
|
|
243
|
+
broadcastMessage.EmitComponentBroadcast(secondComponent);
|
|
244
|
+
Assert.AreEqual(2, untargetedWorks);
|
|
245
|
+
Assert.AreEqual(3, targetedWorks);
|
|
246
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
247
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
248
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
249
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
250
|
+
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
251
|
+
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
252
|
+
Assert.AreEqual(2, componentBroadcastWorks[secondComponent]);
|
|
253
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
254
|
+
Assert.AreEqual(13, broadcastWithoutSourceWorks);
|
|
255
|
+
|
|
256
|
+
// Finally, re-emit the targeted message - it should be received by both components
|
|
257
|
+
untargetedMessage.EmitUntargeted();
|
|
258
|
+
Assert.AreEqual(4, untargetedWorks);
|
|
259
|
+
Assert.AreEqual(3, targetedWorks);
|
|
260
|
+
Assert.AreEqual(3, broadcastWorks);
|
|
261
|
+
Assert.AreEqual(2, componentTargetedWorks.Count);
|
|
262
|
+
Assert.AreEqual(2, componentTargetedWorks[firstComponent]);
|
|
263
|
+
Assert.AreEqual(2, componentTargetedWorks[secondComponent]);
|
|
264
|
+
Assert.AreEqual(2, componentBroadcastWorks.Count);
|
|
265
|
+
Assert.AreEqual(2, componentBroadcastWorks[firstComponent]);
|
|
266
|
+
Assert.AreEqual(2, componentBroadcastWorks[secondComponent]);
|
|
267
|
+
Assert.AreEqual(13, targetedWithoutTargetingWorks);
|
|
268
|
+
Assert.AreEqual(13, broadcastWithoutSourceWorks);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
[UnityTest]
|
|
272
|
+
public IEnumerator Lifetime()
|
|
273
|
+
{
|
|
274
|
+
MessageBus messageBus = MessageHandler.MessageBus;
|
|
275
|
+
Assert.IsNotNull(messageBus);
|
|
276
|
+
|
|
277
|
+
GameObject test = new(nameof(Lifetime), typeof(SimpleMessageAwareComponent));
|
|
278
|
+
_spawned.Add(test);
|
|
279
|
+
|
|
280
|
+
SimpleMessageAwareComponent firstComponent =
|
|
281
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
282
|
+
|
|
283
|
+
// One for the untargeted message, one for the targeted without targeting, one for broadcast without source
|
|
284
|
+
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
285
|
+
// One for the game object, one for each targeted message type (simple + complex)
|
|
286
|
+
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
287
|
+
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
288
|
+
|
|
289
|
+
yield return null;
|
|
290
|
+
|
|
291
|
+
SimpleMessageAwareComponent secondComponent =
|
|
292
|
+
test.AddComponent<SimpleMessageAwareComponent>();
|
|
293
|
+
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
294
|
+
// One for the game object, one for the first component, one for the second component = 3
|
|
295
|
+
Assert.AreEqual(6, messageBus.RegisteredTargeted);
|
|
296
|
+
Assert.AreEqual(3, messageBus.RegisteredBroadcast);
|
|
297
|
+
|
|
298
|
+
secondComponent.enabled = false;
|
|
299
|
+
yield return null;
|
|
300
|
+
|
|
301
|
+
// 3 - one component (disabled)
|
|
302
|
+
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
303
|
+
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
304
|
+
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
305
|
+
|
|
306
|
+
firstComponent.enabled = false;
|
|
307
|
+
yield return null;
|
|
308
|
+
|
|
309
|
+
// No active scripts, no active handlers
|
|
310
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
311
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
312
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
313
|
+
|
|
314
|
+
test.SetActive(false);
|
|
315
|
+
yield return null;
|
|
316
|
+
|
|
317
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
318
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
319
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
320
|
+
|
|
321
|
+
firstComponent.enabled = true;
|
|
322
|
+
yield return null;
|
|
323
|
+
|
|
324
|
+
// Game object is still disabled - shouldn't have active child scripts
|
|
325
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
326
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
327
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
328
|
+
|
|
329
|
+
test.SetActive(true);
|
|
330
|
+
yield return null;
|
|
331
|
+
|
|
332
|
+
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
333
|
+
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
334
|
+
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
335
|
+
|
|
336
|
+
Object.Destroy(firstComponent);
|
|
337
|
+
yield return null;
|
|
338
|
+
|
|
339
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
340
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
341
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
342
|
+
|
|
343
|
+
secondComponent.enabled = true;
|
|
344
|
+
yield return null;
|
|
345
|
+
|
|
346
|
+
Assert.AreEqual(3, messageBus.RegisteredUntargeted);
|
|
347
|
+
Assert.AreEqual(4, messageBus.RegisteredTargeted);
|
|
348
|
+
Assert.AreEqual(2, messageBus.RegisteredBroadcast);
|
|
349
|
+
|
|
350
|
+
Object.Destroy(test);
|
|
351
|
+
yield return null;
|
|
352
|
+
|
|
353
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
354
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
355
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
[UnityTest]
|
|
359
|
+
public IEnumerator NonMessagingObjects()
|
|
360
|
+
{
|
|
361
|
+
MessageBus messageBus = MessageHandler.MessageBus;
|
|
362
|
+
Assert.IsNotNull(messageBus);
|
|
363
|
+
|
|
364
|
+
GameObject test1 = new("NonMessaging1");
|
|
365
|
+
_spawned.Add(test1);
|
|
366
|
+
|
|
367
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
368
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
369
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
370
|
+
|
|
371
|
+
GameObject test2 = new("NonMessaging1", typeof(SpriteRenderer), typeof(MessageHandler));
|
|
372
|
+
_spawned.Add(test2);
|
|
373
|
+
|
|
374
|
+
Assert.AreEqual(0, messageBus.RegisteredUntargeted);
|
|
375
|
+
Assert.AreEqual(0, messageBus.RegisteredTargeted);
|
|
376
|
+
Assert.AreEqual(0, messageBus.RegisteredBroadcast);
|
|
377
|
+
yield break;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
[UnityTest]
|
|
381
|
+
public IEnumerator DedupedRegistration()
|
|
382
|
+
{
|
|
383
|
+
GameObject test = new(nameof(DedupedRegistration), typeof(SimpleMessageAwareComponent));
|
|
384
|
+
_spawned.Add(test);
|
|
385
|
+
|
|
386
|
+
SimpleMessageAwareComponent component =
|
|
387
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
388
|
+
|
|
389
|
+
int unTargetedCount = 0;
|
|
390
|
+
int targetedCount = 0;
|
|
391
|
+
int broadcastCount = 0;
|
|
392
|
+
int componentTargetedCount = 0;
|
|
393
|
+
int componentBroadcastCount = 0;
|
|
394
|
+
component.untargetedHandler = () => ++unTargetedCount;
|
|
395
|
+
component.targetedHandler = () => ++targetedCount;
|
|
396
|
+
component.broadcastHandler = () => ++broadcastCount;
|
|
397
|
+
component.componentTargetedHandler = () => ++componentTargetedCount;
|
|
398
|
+
component.componentBroadcastHandler = () => ++componentBroadcastCount;
|
|
399
|
+
|
|
400
|
+
MessageRegistrationToken token = GetToken(component);
|
|
401
|
+
HashSet<MessageRegistrationHandle> handles = new();
|
|
402
|
+
try
|
|
403
|
+
{
|
|
404
|
+
IEnumerator TestLifecycle(
|
|
405
|
+
Action emitMessage,
|
|
406
|
+
MessageRegistrationHandle handle,
|
|
407
|
+
Func<int> count
|
|
408
|
+
)
|
|
409
|
+
{
|
|
410
|
+
_ = handles.Add(handle);
|
|
411
|
+
emitMessage();
|
|
412
|
+
Assert.AreEqual(1, count());
|
|
413
|
+
|
|
414
|
+
component.enabled = false;
|
|
415
|
+
yield return null;
|
|
416
|
+
|
|
417
|
+
emitMessage();
|
|
418
|
+
Assert.AreEqual(1, count());
|
|
419
|
+
emitMessage();
|
|
420
|
+
Assert.AreEqual(1, count());
|
|
421
|
+
component.enabled = true;
|
|
422
|
+
yield return null;
|
|
423
|
+
|
|
424
|
+
emitMessage();
|
|
425
|
+
Assert.AreEqual(2, count());
|
|
426
|
+
|
|
427
|
+
_ = handles.Remove(handle);
|
|
428
|
+
token.RemoveRegistration(handle);
|
|
429
|
+
|
|
430
|
+
emitMessage();
|
|
431
|
+
// The existing handler should have picked it up
|
|
432
|
+
Assert.AreEqual(3, count());
|
|
433
|
+
|
|
434
|
+
emitMessage();
|
|
435
|
+
// The existing handler should have picked it up
|
|
436
|
+
Assert.AreEqual(4, count());
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// Untargeted
|
|
440
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
441
|
+
MessageRegistrationHandle untargetedHandle =
|
|
442
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(
|
|
443
|
+
component.HandleSimpleUntargetedMessage
|
|
444
|
+
);
|
|
445
|
+
IEnumerator untargetedLifecycle = TestLifecycle(
|
|
446
|
+
() => untargetedMessage.EmitUntargeted(),
|
|
447
|
+
untargetedHandle,
|
|
448
|
+
() => unTargetedCount
|
|
449
|
+
);
|
|
450
|
+
while (untargetedLifecycle.MoveNext())
|
|
451
|
+
{
|
|
452
|
+
yield return untargetedLifecycle.Current;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Targeted
|
|
456
|
+
MessageRegistrationHandle targetedHandle =
|
|
457
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
458
|
+
test,
|
|
459
|
+
component.HandleSimpleTargetedMessage
|
|
460
|
+
);
|
|
461
|
+
SimpleTargetedMessage targetedMessage = new();
|
|
462
|
+
IEnumerator targetedLifecycle = TestLifecycle(
|
|
463
|
+
() => targetedMessage.EmitGameObjectTargeted(test),
|
|
464
|
+
targetedHandle,
|
|
465
|
+
() => targetedCount
|
|
466
|
+
);
|
|
467
|
+
while (targetedLifecycle.MoveNext())
|
|
468
|
+
{
|
|
469
|
+
yield return targetedLifecycle.Current;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Broadcast
|
|
473
|
+
MessageRegistrationHandle broadcastHandle =
|
|
474
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
475
|
+
test,
|
|
476
|
+
component.HandleSimpleBroadcastMessage
|
|
477
|
+
);
|
|
478
|
+
SimpleBroadcastMessage broadcastMessage = new();
|
|
479
|
+
IEnumerator broadcastLifecycle = TestLifecycle(
|
|
480
|
+
() => broadcastMessage.EmitGameObjectBroadcast(test),
|
|
481
|
+
broadcastHandle,
|
|
482
|
+
() => broadcastCount
|
|
483
|
+
);
|
|
484
|
+
while (broadcastLifecycle.MoveNext())
|
|
485
|
+
{
|
|
486
|
+
yield return broadcastLifecycle.Current;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// Component Targeted
|
|
490
|
+
MessageRegistrationHandle componentTargetedHandle =
|
|
491
|
+
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
492
|
+
component,
|
|
493
|
+
component.HandleSimpleComponentTargetedMessage
|
|
494
|
+
);
|
|
495
|
+
IEnumerator componentTargetedLifecycle = TestLifecycle(
|
|
496
|
+
() => targetedMessage.EmitComponentTargeted(component),
|
|
497
|
+
componentTargetedHandle,
|
|
498
|
+
() => componentTargetedCount
|
|
499
|
+
);
|
|
500
|
+
while (componentTargetedLifecycle.MoveNext())
|
|
501
|
+
{
|
|
502
|
+
yield return componentTargetedLifecycle.Current;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Component Broadcast
|
|
506
|
+
MessageRegistrationHandle componentBroadcastHandle =
|
|
507
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
508
|
+
test,
|
|
509
|
+
component.HandleSimpleBroadcastMessage
|
|
510
|
+
);
|
|
511
|
+
IEnumerator componentBroadcastLifecycle = TestLifecycle(
|
|
512
|
+
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
513
|
+
componentBroadcastHandle,
|
|
514
|
+
() => componentBroadcastCount
|
|
515
|
+
);
|
|
516
|
+
while (componentBroadcastLifecycle.MoveNext())
|
|
517
|
+
{
|
|
518
|
+
yield return componentBroadcastLifecycle.Current;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
finally
|
|
522
|
+
{
|
|
523
|
+
foreach (MessageRegistrationHandle handle in handles)
|
|
524
|
+
{
|
|
525
|
+
token.RemoveRegistration(handle);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
[UnityTest]
|
|
531
|
+
public IEnumerator Interceptors()
|
|
532
|
+
{
|
|
533
|
+
GameObject test = new(nameof(Interceptors), typeof(SimpleMessageAwareComponent));
|
|
534
|
+
_spawned.Add(test);
|
|
535
|
+
|
|
536
|
+
SimpleMessageAwareComponent component =
|
|
537
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
538
|
+
|
|
539
|
+
int unTargetedCount = 0;
|
|
540
|
+
int targetedCount = 0;
|
|
541
|
+
int broadcastCount = 0;
|
|
542
|
+
int componentTargetedCount = 0;
|
|
543
|
+
int componentBroadcastCount = 0;
|
|
544
|
+
component.untargetedHandler = () => ++unTargetedCount;
|
|
545
|
+
component.targetedHandler = () => ++targetedCount;
|
|
546
|
+
component.broadcastHandler = () => ++broadcastCount;
|
|
547
|
+
component.componentTargetedHandler = () => ++componentTargetedCount;
|
|
548
|
+
component.componentBroadcastHandler = () => ++componentBroadcastCount;
|
|
549
|
+
|
|
550
|
+
MessageRegistrationToken token = GetToken(component);
|
|
551
|
+
HashSet<MessageRegistrationHandle> handles = new();
|
|
552
|
+
try
|
|
553
|
+
{
|
|
554
|
+
bool allowed = true;
|
|
555
|
+
|
|
556
|
+
bool UntargetedInterceptor(ref SimpleUntargetedMessage message)
|
|
557
|
+
{
|
|
558
|
+
return allowed;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
bool TargetedInterceptor(ref InstanceId target, ref SimpleTargetedMessage message)
|
|
562
|
+
{
|
|
563
|
+
return allowed;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
bool BroadcastInterceptor(ref InstanceId source, ref SimpleBroadcastMessage message)
|
|
567
|
+
{
|
|
568
|
+
return allowed;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// Double register to ensure no bugs
|
|
572
|
+
MessageRegistrationHandle untargetedInterceptor1 =
|
|
573
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
574
|
+
UntargetedInterceptor
|
|
575
|
+
);
|
|
576
|
+
handles.Add(untargetedInterceptor1);
|
|
577
|
+
MessageRegistrationHandle untargetedInterceptor2 =
|
|
578
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
579
|
+
UntargetedInterceptor
|
|
580
|
+
);
|
|
581
|
+
handles.Add(untargetedInterceptor2);
|
|
582
|
+
MessageRegistrationHandle targetedInterceptor1 =
|
|
583
|
+
token.RegisterTargetedInterceptor<SimpleTargetedMessage>(TargetedInterceptor);
|
|
584
|
+
handles.Add(targetedInterceptor1);
|
|
585
|
+
MessageRegistrationHandle targetedInterceptor2 =
|
|
586
|
+
token.RegisterTargetedInterceptor<SimpleTargetedMessage>(TargetedInterceptor);
|
|
587
|
+
handles.Add(targetedInterceptor2);
|
|
588
|
+
MessageRegistrationHandle broadcastInterceptor1 =
|
|
589
|
+
token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(
|
|
590
|
+
BroadcastInterceptor
|
|
591
|
+
);
|
|
592
|
+
handles.Add(broadcastInterceptor1);
|
|
593
|
+
MessageRegistrationHandle broadcastInterceptor2 =
|
|
594
|
+
token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(
|
|
595
|
+
BroadcastInterceptor
|
|
596
|
+
);
|
|
597
|
+
handles.Add(broadcastInterceptor2);
|
|
598
|
+
|
|
599
|
+
void RunTest(Action emitMessage, Func<int> count)
|
|
600
|
+
{
|
|
601
|
+
allowed = true;
|
|
602
|
+
emitMessage();
|
|
603
|
+
Assert.AreEqual(1, count());
|
|
604
|
+
allowed = false;
|
|
605
|
+
emitMessage();
|
|
606
|
+
Assert.AreEqual(1, count());
|
|
607
|
+
emitMessage();
|
|
608
|
+
Assert.AreEqual(1, count());
|
|
609
|
+
allowed = true;
|
|
610
|
+
emitMessage();
|
|
611
|
+
Assert.AreEqual(2, count());
|
|
612
|
+
emitMessage();
|
|
613
|
+
Assert.AreEqual(3, count());
|
|
614
|
+
allowed = false;
|
|
615
|
+
emitMessage();
|
|
616
|
+
Assert.AreEqual(3, count());
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
620
|
+
RunTest(() => untargetedMessage.EmitUntargeted(), () => unTargetedCount);
|
|
621
|
+
SimpleTargetedMessage targetedMessage = new();
|
|
622
|
+
RunTest(() => targetedMessage.EmitGameObjectTargeted(test), () => targetedCount);
|
|
623
|
+
RunTest(
|
|
624
|
+
() => targetedMessage.EmitComponentTargeted(component),
|
|
625
|
+
() => componentTargetedCount
|
|
626
|
+
);
|
|
627
|
+
SimpleBroadcastMessage broadcastMessage = new();
|
|
628
|
+
RunTest(() => broadcastMessage.EmitGameObjectBroadcast(test), () => broadcastCount);
|
|
629
|
+
RunTest(
|
|
630
|
+
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
631
|
+
() => componentBroadcastCount
|
|
632
|
+
);
|
|
633
|
+
}
|
|
634
|
+
finally
|
|
635
|
+
{
|
|
636
|
+
foreach (MessageRegistrationHandle handle in handles)
|
|
637
|
+
{
|
|
638
|
+
token.RemoveRegistration(handle);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
yield break;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
[UnityTest]
|
|
646
|
+
public IEnumerator PostProcessors()
|
|
647
|
+
{
|
|
648
|
+
GameObject test = new(nameof(PostProcessors), typeof(SimpleMessageAwareComponent));
|
|
649
|
+
_spawned.Add(test);
|
|
650
|
+
|
|
651
|
+
SimpleMessageAwareComponent component =
|
|
652
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
653
|
+
|
|
654
|
+
int unTargetedCount = 0;
|
|
655
|
+
int targetedCount = 0;
|
|
656
|
+
int broadcastCount = 0;
|
|
657
|
+
int componentTargetedCount = 0;
|
|
658
|
+
int componentBroadcastCount = 0;
|
|
659
|
+
int expectedTargetedWithoutTargetingCount = 0;
|
|
660
|
+
int expectedBroadcastWithoutSourceCount = 0;
|
|
661
|
+
int? lastSeenUntargetedCount = null;
|
|
662
|
+
int? lastSeenTargetedCount = null;
|
|
663
|
+
int? lastSeenComponentTargetedCount = null;
|
|
664
|
+
int? lastSeenBroadcastCount = null;
|
|
665
|
+
int? lastSeenComponentBroadcastCount = null;
|
|
666
|
+
component.untargetedHandler = () => ++unTargetedCount;
|
|
667
|
+
component.targetedHandler = () =>
|
|
668
|
+
{
|
|
669
|
+
++targetedCount;
|
|
670
|
+
++expectedTargetedWithoutTargetingCount;
|
|
671
|
+
};
|
|
672
|
+
component.broadcastHandler = () =>
|
|
673
|
+
{
|
|
674
|
+
++broadcastCount;
|
|
675
|
+
++expectedBroadcastWithoutSourceCount;
|
|
676
|
+
};
|
|
677
|
+
component.componentTargetedHandler = () =>
|
|
678
|
+
{
|
|
679
|
+
++componentTargetedCount;
|
|
680
|
+
++expectedTargetedWithoutTargetingCount;
|
|
681
|
+
};
|
|
682
|
+
component.componentBroadcastHandler = () =>
|
|
683
|
+
{
|
|
684
|
+
++componentBroadcastCount;
|
|
685
|
+
++expectedBroadcastWithoutSourceCount;
|
|
686
|
+
};
|
|
687
|
+
|
|
688
|
+
MessageRegistrationToken token = GetToken(component);
|
|
689
|
+
HashSet<MessageRegistrationHandle> handles = new();
|
|
690
|
+
try
|
|
691
|
+
{
|
|
692
|
+
void UntargetedPostProcessor(ref SimpleUntargetedMessage message)
|
|
693
|
+
{
|
|
694
|
+
if (lastSeenUntargetedCount == null)
|
|
695
|
+
{
|
|
696
|
+
lastSeenUntargetedCount = unTargetedCount;
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
Assert.AreEqual(lastSeenUntargetedCount + 1, unTargetedCount);
|
|
701
|
+
lastSeenUntargetedCount = unTargetedCount;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
void GameObjectTargetedPostProcessor(ref SimpleTargetedMessage message)
|
|
705
|
+
{
|
|
706
|
+
if (lastSeenTargetedCount == null)
|
|
707
|
+
{
|
|
708
|
+
return;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
Assert.AreEqual(lastSeenTargetedCount + 1, targetedCount);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
void ComponentTargetedPostProcessor(ref SimpleTargetedMessage message)
|
|
715
|
+
{
|
|
716
|
+
if (lastSeenComponentTargetedCount == null)
|
|
717
|
+
{
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
Assert.AreEqual(lastSeenComponentTargetedCount + 1, componentTargetedCount);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
void TargetedWithoutTargetingPostProcessor(
|
|
725
|
+
ref InstanceId target,
|
|
726
|
+
ref SimpleTargetedMessage message
|
|
727
|
+
)
|
|
728
|
+
{
|
|
729
|
+
switch (target.Object)
|
|
730
|
+
{
|
|
731
|
+
case GameObject _:
|
|
732
|
+
{
|
|
733
|
+
if (lastSeenTargetedCount != null)
|
|
734
|
+
{
|
|
735
|
+
Assert.AreEqual(lastSeenTargetedCount + 1, targetedCount);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
lastSeenTargetedCount = targetedCount;
|
|
739
|
+
break;
|
|
740
|
+
}
|
|
741
|
+
case Component _:
|
|
742
|
+
{
|
|
743
|
+
if (lastSeenComponentTargetedCount != null)
|
|
744
|
+
{
|
|
745
|
+
Assert.AreEqual(
|
|
746
|
+
lastSeenComponentTargetedCount + 1,
|
|
747
|
+
componentTargetedCount
|
|
748
|
+
);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
lastSeenComponentTargetedCount = componentTargetedCount;
|
|
752
|
+
break;
|
|
753
|
+
}
|
|
754
|
+
default:
|
|
755
|
+
Assert.Fail("Unexpected Object type - {0}.", target.Object?.GetType());
|
|
756
|
+
break;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
Assert.AreEqual(
|
|
760
|
+
expectedTargetedWithoutTargetingCount,
|
|
761
|
+
targetedCount + componentTargetedCount
|
|
762
|
+
);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
void GameObjectBroadcastPostProcessor(ref SimpleBroadcastMessage message)
|
|
766
|
+
{
|
|
767
|
+
if (lastSeenBroadcastCount == null)
|
|
768
|
+
{
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
Assert.AreEqual(lastSeenBroadcastCount + 1, broadcastCount);
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
void ComponentBroadcastPostProcessor(ref SimpleBroadcastMessage message)
|
|
776
|
+
{
|
|
777
|
+
if (lastSeenComponentBroadcastCount == null)
|
|
778
|
+
{
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
Assert.AreEqual(lastSeenComponentBroadcastCount + 1, componentBroadcastCount);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
void BroadcastWithoutSourcePostProcessor(
|
|
786
|
+
ref InstanceId source,
|
|
787
|
+
ref SimpleBroadcastMessage message
|
|
788
|
+
)
|
|
789
|
+
{
|
|
790
|
+
switch (source.Object)
|
|
791
|
+
{
|
|
792
|
+
case GameObject _:
|
|
793
|
+
{
|
|
794
|
+
if (lastSeenBroadcastCount != null)
|
|
795
|
+
{
|
|
796
|
+
Assert.AreEqual(lastSeenBroadcastCount + 1, broadcastCount);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
lastSeenBroadcastCount = broadcastCount;
|
|
800
|
+
break;
|
|
801
|
+
}
|
|
802
|
+
case Component _:
|
|
803
|
+
{
|
|
804
|
+
if (lastSeenComponentBroadcastCount != null)
|
|
805
|
+
{
|
|
806
|
+
Assert.AreEqual(
|
|
807
|
+
lastSeenComponentBroadcastCount + 1,
|
|
808
|
+
componentBroadcastCount
|
|
809
|
+
);
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
lastSeenComponentBroadcastCount = componentBroadcastCount;
|
|
813
|
+
break;
|
|
814
|
+
}
|
|
815
|
+
default:
|
|
816
|
+
Assert.Fail("Unexpected Object type - {0}.", source.Object?.GetType());
|
|
817
|
+
break;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
Assert.AreEqual(
|
|
821
|
+
expectedBroadcastWithoutSourceCount,
|
|
822
|
+
broadcastCount + componentBroadcastCount
|
|
823
|
+
);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
MessageRegistrationHandle untargetedPostProcessor =
|
|
827
|
+
token.RegisterUntargetedPostProcessor<SimpleUntargetedMessage>(
|
|
828
|
+
UntargetedPostProcessor
|
|
829
|
+
);
|
|
830
|
+
handles.Add(untargetedPostProcessor);
|
|
831
|
+
MessageRegistrationHandle gameObjectTargetedPostProcessor =
|
|
832
|
+
token.RegisterGameObjectTargetedPostProcessor<SimpleTargetedMessage>(
|
|
833
|
+
test,
|
|
834
|
+
GameObjectTargetedPostProcessor
|
|
835
|
+
);
|
|
836
|
+
handles.Add(gameObjectTargetedPostProcessor);
|
|
837
|
+
MessageRegistrationHandle componentTargetedPostProcessor =
|
|
838
|
+
token.RegisterComponentTargetedPostProcessor<SimpleTargetedMessage>(
|
|
839
|
+
component,
|
|
840
|
+
ComponentTargetedPostProcessor
|
|
841
|
+
);
|
|
842
|
+
handles.Add(componentTargetedPostProcessor);
|
|
843
|
+
MessageRegistrationHandle targetedWithoutTargetingPostProcessor =
|
|
844
|
+
token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(
|
|
845
|
+
TargetedWithoutTargetingPostProcessor
|
|
846
|
+
);
|
|
847
|
+
handles.Add(targetedWithoutTargetingPostProcessor);
|
|
848
|
+
MessageRegistrationHandle gameObjectBroadcastPostProcessor =
|
|
849
|
+
token.RegisterGameObjectBroadcastPostProcessor<SimpleBroadcastMessage>(
|
|
850
|
+
test,
|
|
851
|
+
GameObjectBroadcastPostProcessor
|
|
852
|
+
);
|
|
853
|
+
handles.Add(gameObjectBroadcastPostProcessor);
|
|
854
|
+
MessageRegistrationHandle componentBroadcastPostProcessor =
|
|
855
|
+
token.RegisterComponentBroadcastPostProcessor<SimpleBroadcastMessage>(
|
|
856
|
+
component,
|
|
857
|
+
ComponentBroadcastPostProcessor
|
|
858
|
+
);
|
|
859
|
+
handles.Add(componentBroadcastPostProcessor);
|
|
860
|
+
MessageRegistrationHandle broadcastWithoutSourcePostProcessor =
|
|
861
|
+
token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(
|
|
862
|
+
BroadcastWithoutSourcePostProcessor
|
|
863
|
+
);
|
|
864
|
+
handles.Add(broadcastWithoutSourcePostProcessor);
|
|
865
|
+
|
|
866
|
+
void RunTest(Action emitMessage, Func<int> count)
|
|
867
|
+
{
|
|
868
|
+
Assert.AreEqual(0, count());
|
|
869
|
+
component.enabled = true;
|
|
870
|
+
emitMessage();
|
|
871
|
+
Assert.AreEqual(1, count());
|
|
872
|
+
component.enabled = false;
|
|
873
|
+
emitMessage();
|
|
874
|
+
Assert.AreEqual(1, count());
|
|
875
|
+
emitMessage();
|
|
876
|
+
Assert.AreEqual(1, count());
|
|
877
|
+
component.enabled = true;
|
|
878
|
+
emitMessage();
|
|
879
|
+
Assert.AreEqual(2, count());
|
|
880
|
+
emitMessage();
|
|
881
|
+
Assert.AreEqual(3, count());
|
|
882
|
+
component.enabled = false;
|
|
883
|
+
emitMessage();
|
|
884
|
+
Assert.AreEqual(3, count());
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
888
|
+
RunTest(() => untargetedMessage.EmitUntargeted(), () => unTargetedCount);
|
|
889
|
+
SimpleTargetedMessage targetedMessage = new();
|
|
890
|
+
RunTest(() => targetedMessage.EmitGameObjectTargeted(test), () => targetedCount);
|
|
891
|
+
RunTest(
|
|
892
|
+
() => targetedMessage.EmitComponentTargeted(component),
|
|
893
|
+
() => componentTargetedCount
|
|
894
|
+
);
|
|
895
|
+
SimpleBroadcastMessage broadcastMessage = new();
|
|
896
|
+
RunTest(() => broadcastMessage.EmitGameObjectBroadcast(test), () => broadcastCount);
|
|
897
|
+
RunTest(
|
|
898
|
+
() => broadcastMessage.EmitComponentBroadcast(component),
|
|
899
|
+
() => componentBroadcastCount
|
|
900
|
+
);
|
|
901
|
+
}
|
|
902
|
+
finally
|
|
903
|
+
{
|
|
904
|
+
foreach (MessageRegistrationHandle handle in handles)
|
|
905
|
+
{
|
|
906
|
+
token.RemoveRegistration(handle);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
yield break;
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
[UnityTest]
|
|
914
|
+
public IEnumerator InstanceId()
|
|
915
|
+
{
|
|
916
|
+
GameObject test = new(nameof(InstanceId), typeof(SimpleMessageAwareComponent));
|
|
917
|
+
_spawned.Add(test);
|
|
918
|
+
|
|
919
|
+
// Message-aware instance ids
|
|
920
|
+
SimpleMessageAwareComponent component =
|
|
921
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
922
|
+
Assert.AreEqual((InstanceId)test, (InstanceId)test);
|
|
923
|
+
Assert.AreEqual((InstanceId)component, (InstanceId)component);
|
|
924
|
+
Assert.AreNotEqual((InstanceId)test, (InstanceId)component);
|
|
925
|
+
Assert.AreNotEqual((InstanceId)component, (InstanceId)test);
|
|
926
|
+
|
|
927
|
+
// Non-message-aware instance ids
|
|
928
|
+
GameObject test2 = new(nameof(InstanceId) + " - 2");
|
|
929
|
+
_spawned.Add(test2);
|
|
930
|
+
Assert.AreNotEqual((InstanceId)test2, (InstanceId)test2.transform);
|
|
931
|
+
Assert.AreNotEqual((InstanceId)test2.transform, (InstanceId)test2);
|
|
932
|
+
|
|
933
|
+
// Null checks
|
|
934
|
+
bool caught = false;
|
|
935
|
+
try
|
|
936
|
+
{
|
|
937
|
+
_ = (InstanceId)(GameObject)null;
|
|
938
|
+
}
|
|
939
|
+
catch
|
|
940
|
+
{
|
|
941
|
+
caught = true;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
Assert.IsTrue(caught);
|
|
945
|
+
|
|
946
|
+
caught = false;
|
|
947
|
+
try
|
|
948
|
+
{
|
|
949
|
+
_ = (InstanceId)(Component)null;
|
|
950
|
+
}
|
|
951
|
+
catch
|
|
952
|
+
{
|
|
953
|
+
caught = true;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
Assert.IsTrue(caught);
|
|
957
|
+
yield break;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
[UnityTest]
|
|
961
|
+
public IEnumerator GlobalAcceptAll()
|
|
962
|
+
{
|
|
963
|
+
GameObject test = new(nameof(GlobalAcceptAll), typeof(SimpleMessageAwareComponent));
|
|
964
|
+
_spawned.Add(test);
|
|
965
|
+
SimpleMessageAwareComponent component =
|
|
966
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
967
|
+
|
|
968
|
+
MessageRegistrationToken token = GetToken(component);
|
|
969
|
+
|
|
970
|
+
int untargetedCount = 0;
|
|
971
|
+
int targetedCount = 0;
|
|
972
|
+
int broadcastCount = 0;
|
|
973
|
+
int fastUntargetedCount = 0;
|
|
974
|
+
int fastTargetedCount = 0;
|
|
975
|
+
int fastBroadcastCount = 0;
|
|
976
|
+
|
|
977
|
+
void HandleUntargeted(IUntargetedMessage message)
|
|
978
|
+
{
|
|
979
|
+
++untargetedCount;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
void HandleFastUntargeted(ref IUntargetedMessage message)
|
|
983
|
+
{
|
|
984
|
+
++fastUntargetedCount;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
void HandleTargeted(InstanceId target, ITargetedMessage message)
|
|
988
|
+
{
|
|
989
|
+
++targetedCount;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
void HandleFastTargeted(ref InstanceId target, ref ITargetedMessage message)
|
|
993
|
+
{
|
|
994
|
+
++fastTargetedCount;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
void HandleBroadcast(InstanceId source, IBroadcastMessage message)
|
|
998
|
+
{
|
|
999
|
+
++broadcastCount;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
void HandleFastBroadcast(ref InstanceId source, ref IBroadcastMessage message)
|
|
1003
|
+
{
|
|
1004
|
+
++fastBroadcastCount;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
HashSet<MessageRegistrationHandle> handles = new();
|
|
1008
|
+
try
|
|
1009
|
+
{
|
|
1010
|
+
MessageRegistrationHandle firstHandle = token.RegisterGlobalAcceptAll(
|
|
1011
|
+
HandleUntargeted,
|
|
1012
|
+
HandleTargeted,
|
|
1013
|
+
HandleBroadcast
|
|
1014
|
+
);
|
|
1015
|
+
_ = handles.Add(firstHandle);
|
|
1016
|
+
|
|
1017
|
+
// Untargeted
|
|
1018
|
+
SimpleUntargetedMessage untargetedMessage = new();
|
|
1019
|
+
untargetedMessage.EmitUntargeted();
|
|
1020
|
+
Assert.AreEqual(1, untargetedCount);
|
|
1021
|
+
Assert.AreEqual(0, targetedCount);
|
|
1022
|
+
Assert.AreEqual(0, broadcastCount);
|
|
1023
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1024
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1025
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1026
|
+
untargetedMessage.EmitUntargeted();
|
|
1027
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1028
|
+
Assert.AreEqual(0, targetedCount);
|
|
1029
|
+
Assert.AreEqual(0, broadcastCount);
|
|
1030
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1031
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1032
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1033
|
+
|
|
1034
|
+
// Targeted
|
|
1035
|
+
SimpleTargetedMessage targetedMessage = new();
|
|
1036
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
1037
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1038
|
+
Assert.AreEqual(1, targetedCount);
|
|
1039
|
+
Assert.AreEqual(0, broadcastCount);
|
|
1040
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1041
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1042
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1043
|
+
targetedMessage.EmitComponentTargeted(component);
|
|
1044
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1045
|
+
Assert.AreEqual(2, targetedCount);
|
|
1046
|
+
Assert.AreEqual(0, broadcastCount);
|
|
1047
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1048
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1049
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1050
|
+
|
|
1051
|
+
// Broadcast
|
|
1052
|
+
SimpleBroadcastMessage broadcastMessage = new();
|
|
1053
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1054
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1055
|
+
Assert.AreEqual(2, targetedCount);
|
|
1056
|
+
Assert.AreEqual(1, broadcastCount);
|
|
1057
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1058
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1059
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1060
|
+
broadcastMessage.EmitComponentBroadcast(component);
|
|
1061
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1062
|
+
Assert.AreEqual(2, targetedCount);
|
|
1063
|
+
Assert.AreEqual(2, broadcastCount);
|
|
1064
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1065
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1066
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1067
|
+
|
|
1068
|
+
component.enabled = false;
|
|
1069
|
+
int noMatchingCount = 0;
|
|
1070
|
+
Action<LogLevel, string> previousLog = MessagingDebug.LogFunction;
|
|
1071
|
+
try
|
|
1072
|
+
{
|
|
1073
|
+
MessagingDebug.LogFunction = (level, logMessage) =>
|
|
1074
|
+
{
|
|
1075
|
+
if (logMessage.Contains("matching"))
|
|
1076
|
+
{
|
|
1077
|
+
++noMatchingCount;
|
|
1078
|
+
}
|
|
1079
|
+
};
|
|
1080
|
+
untargetedMessage.EmitUntargeted();
|
|
1081
|
+
Assert.AreEqual(1, noMatchingCount);
|
|
1082
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
1083
|
+
Assert.AreEqual(2, noMatchingCount);
|
|
1084
|
+
targetedMessage.EmitComponentTargeted(component);
|
|
1085
|
+
Assert.AreEqual(3, noMatchingCount);
|
|
1086
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1087
|
+
Assert.AreEqual(4, noMatchingCount);
|
|
1088
|
+
broadcastMessage.EmitComponentBroadcast(component);
|
|
1089
|
+
Assert.AreEqual(5, noMatchingCount);
|
|
1090
|
+
}
|
|
1091
|
+
finally
|
|
1092
|
+
{
|
|
1093
|
+
MessagingDebug.LogFunction = previousLog;
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
Assert.AreEqual(2, untargetedCount);
|
|
1097
|
+
Assert.AreEqual(2, targetedCount);
|
|
1098
|
+
Assert.AreEqual(2, broadcastCount);
|
|
1099
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1100
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1101
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1102
|
+
|
|
1103
|
+
component.enabled = true;
|
|
1104
|
+
MessageRegistrationHandle secondHandle = token.RegisterGlobalAcceptAll(
|
|
1105
|
+
HandleUntargeted,
|
|
1106
|
+
HandleTargeted,
|
|
1107
|
+
HandleBroadcast
|
|
1108
|
+
);
|
|
1109
|
+
_ = handles.Add(secondHandle);
|
|
1110
|
+
untargetedMessage.EmitUntargeted();
|
|
1111
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
1112
|
+
targetedMessage.EmitComponentTargeted(component);
|
|
1113
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1114
|
+
broadcastMessage.EmitComponentBroadcast(component);
|
|
1115
|
+
Assert.AreEqual(3, untargetedCount);
|
|
1116
|
+
Assert.AreEqual(4, targetedCount);
|
|
1117
|
+
Assert.AreEqual(4, broadcastCount);
|
|
1118
|
+
Assert.AreEqual(0, fastUntargetedCount);
|
|
1119
|
+
Assert.AreEqual(0, fastTargetedCount);
|
|
1120
|
+
Assert.AreEqual(0, fastBroadcastCount);
|
|
1121
|
+
|
|
1122
|
+
MessageRegistrationHandle thirdHandle = token.RegisterGlobalAcceptAll(
|
|
1123
|
+
HandleFastUntargeted,
|
|
1124
|
+
HandleFastTargeted,
|
|
1125
|
+
HandleFastBroadcast
|
|
1126
|
+
);
|
|
1127
|
+
_ = handles.Add(thirdHandle);
|
|
1128
|
+
untargetedMessage.EmitUntargeted();
|
|
1129
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
1130
|
+
targetedMessage.EmitComponentTargeted(component);
|
|
1131
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1132
|
+
broadcastMessage.EmitComponentBroadcast(component);
|
|
1133
|
+
Assert.AreEqual(4, untargetedCount);
|
|
1134
|
+
Assert.AreEqual(6, targetedCount);
|
|
1135
|
+
Assert.AreEqual(6, broadcastCount);
|
|
1136
|
+
Assert.AreEqual(1, fastUntargetedCount);
|
|
1137
|
+
Assert.AreEqual(2, fastTargetedCount);
|
|
1138
|
+
Assert.AreEqual(2, fastBroadcastCount);
|
|
1139
|
+
|
|
1140
|
+
MessageRegistrationHandle fourthHandle = token.RegisterGlobalAcceptAll(
|
|
1141
|
+
HandleFastUntargeted,
|
|
1142
|
+
HandleFastTargeted,
|
|
1143
|
+
HandleFastBroadcast
|
|
1144
|
+
);
|
|
1145
|
+
_ = handles.Add(fourthHandle);
|
|
1146
|
+
untargetedMessage.EmitUntargeted();
|
|
1147
|
+
targetedMessage.EmitGameObjectTargeted(test);
|
|
1148
|
+
targetedMessage.EmitComponentTargeted(component);
|
|
1149
|
+
broadcastMessage.EmitGameObjectBroadcast(test);
|
|
1150
|
+
broadcastMessage.EmitComponentBroadcast(component);
|
|
1151
|
+
Assert.AreEqual(5, untargetedCount);
|
|
1152
|
+
Assert.AreEqual(8, targetedCount);
|
|
1153
|
+
Assert.AreEqual(8, broadcastCount);
|
|
1154
|
+
Assert.AreEqual(2, fastUntargetedCount);
|
|
1155
|
+
Assert.AreEqual(4, fastTargetedCount);
|
|
1156
|
+
Assert.AreEqual(4, fastBroadcastCount);
|
|
1157
|
+
}
|
|
1158
|
+
finally
|
|
1159
|
+
{
|
|
1160
|
+
foreach (MessageRegistrationHandle handle in handles)
|
|
1161
|
+
{
|
|
1162
|
+
token.RemoveRegistration(handle);
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
yield break;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
[UnityTest]
|
|
1170
|
+
public IEnumerator InterceptorOrder()
|
|
1171
|
+
{
|
|
1172
|
+
GameObject test = new(nameof(InterceptorOrder), typeof(SimpleMessageAwareComponent));
|
|
1173
|
+
_spawned.Add(test);
|
|
1174
|
+
|
|
1175
|
+
SimpleMessageAwareComponent component =
|
|
1176
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1177
|
+
|
|
1178
|
+
bool seen = false;
|
|
1179
|
+
component.untargetedHandler = () =>
|
|
1180
|
+
{
|
|
1181
|
+
// ReSharper disable once AccessToModifiedClosure
|
|
1182
|
+
Assert.IsFalse(seen);
|
|
1183
|
+
seen = true;
|
|
1184
|
+
};
|
|
1185
|
+
|
|
1186
|
+
MessageRegistrationToken token = GetToken(component);
|
|
1187
|
+
HashSet<MessageRegistrationHandle> handles = new();
|
|
1188
|
+
try
|
|
1189
|
+
{
|
|
1190
|
+
int seenCount = 0;
|
|
1191
|
+
|
|
1192
|
+
bool UntargetedInterceptorFirstPriority(ref SimpleUntargetedMessage message)
|
|
1193
|
+
{
|
|
1194
|
+
return seenCount++ % 3 == 0;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
bool UntargetedInterceptorSecondPriority(ref SimpleUntargetedMessage message)
|
|
1198
|
+
{
|
|
1199
|
+
return seenCount++ % 3 == 1;
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
bool UntargetedInterceptorThirdPriority(ref SimpleUntargetedMessage message)
|
|
1203
|
+
{
|
|
1204
|
+
return seenCount++ % 3 == 2;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
int interceptorRunCount = 0;
|
|
1208
|
+
|
|
1209
|
+
bool UntargetedInterceptorFourthPriority(ref SimpleUntargetedMessage message)
|
|
1210
|
+
{
|
|
1211
|
+
// We should be running close to first and last
|
|
1212
|
+
if (++interceptorRunCount % 2 == 0)
|
|
1213
|
+
{
|
|
1214
|
+
return seenCount % 3 == 0;
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
return true;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
MessageRegistrationHandle secondInterceptor =
|
|
1221
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1222
|
+
UntargetedInterceptorSecondPriority,
|
|
1223
|
+
100
|
|
1224
|
+
);
|
|
1225
|
+
_ = handles.Add(secondInterceptor);
|
|
1226
|
+
MessageRegistrationHandle thirdInterceptor =
|
|
1227
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1228
|
+
UntargetedInterceptorThirdPriority,
|
|
1229
|
+
101
|
|
1230
|
+
);
|
|
1231
|
+
_ = handles.Add(thirdInterceptor);
|
|
1232
|
+
MessageRegistrationHandle firstInterceptor =
|
|
1233
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1234
|
+
UntargetedInterceptorFirstPriority,
|
|
1235
|
+
-1
|
|
1236
|
+
);
|
|
1237
|
+
_ = handles.Add(firstInterceptor);
|
|
1238
|
+
MessageRegistrationHandle fourthInterceptorFirstPriority =
|
|
1239
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1240
|
+
UntargetedInterceptorFourthPriority,
|
|
1241
|
+
-1
|
|
1242
|
+
);
|
|
1243
|
+
_ = handles.Add(fourthInterceptorFirstPriority);
|
|
1244
|
+
MessageRegistrationHandle fourthInterceptorSecondPriority =
|
|
1245
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1246
|
+
UntargetedInterceptorFourthPriority,
|
|
1247
|
+
102
|
|
1248
|
+
);
|
|
1249
|
+
_ = handles.Add(fourthInterceptorSecondPriority);
|
|
1250
|
+
|
|
1251
|
+
SimpleUntargetedMessage message = new();
|
|
1252
|
+
message.EmitUntargeted();
|
|
1253
|
+
Assert.IsTrue(seen);
|
|
1254
|
+
Assert.AreEqual(2, interceptorRunCount);
|
|
1255
|
+
seen = false;
|
|
1256
|
+
|
|
1257
|
+
message.EmitUntargeted();
|
|
1258
|
+
Assert.IsTrue(seen);
|
|
1259
|
+
Assert.AreEqual(4, interceptorRunCount);
|
|
1260
|
+
seen = false;
|
|
1261
|
+
|
|
1262
|
+
MessageRegistrationHandle doubleRegistrationOne =
|
|
1263
|
+
token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(
|
|
1264
|
+
UntargetedInterceptorFirstPriority,
|
|
1265
|
+
-1
|
|
1266
|
+
);
|
|
1267
|
+
_ = handles.Add(doubleRegistrationOne);
|
|
1268
|
+
message.EmitUntargeted();
|
|
1269
|
+
Assert.IsTrue(seen);
|
|
1270
|
+
Assert.AreEqual(6, interceptorRunCount);
|
|
1271
|
+
seen = false;
|
|
1272
|
+
|
|
1273
|
+
_ = handles.Remove(firstInterceptor);
|
|
1274
|
+
token.RemoveRegistration(firstInterceptor);
|
|
1275
|
+
message.EmitUntargeted();
|
|
1276
|
+
Assert.IsTrue(seen);
|
|
1277
|
+
Assert.AreEqual(8, interceptorRunCount);
|
|
1278
|
+
seen = false;
|
|
1279
|
+
|
|
1280
|
+
// Double remove
|
|
1281
|
+
token.RemoveRegistration(firstInterceptor);
|
|
1282
|
+
token.RemoveRegistration(firstInterceptor);
|
|
1283
|
+
message.EmitUntargeted();
|
|
1284
|
+
Assert.IsTrue(seen);
|
|
1285
|
+
Assert.AreEqual(10, interceptorRunCount);
|
|
1286
|
+
}
|
|
1287
|
+
finally
|
|
1288
|
+
{
|
|
1289
|
+
foreach (MessageRegistrationHandle handle in handles)
|
|
1290
|
+
{
|
|
1291
|
+
token.RemoveRegistration(handle);
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
yield break;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
[UnityTest]
|
|
1299
|
+
public IEnumerator UntargetedRemoveOrder()
|
|
1300
|
+
{
|
|
1301
|
+
GameObject test = new(
|
|
1302
|
+
nameof(UntargetedRemoveOrder),
|
|
1303
|
+
typeof(SimpleMessageAwareComponent)
|
|
1304
|
+
);
|
|
1305
|
+
_spawned.Add(test);
|
|
1306
|
+
|
|
1307
|
+
SimpleMessageAwareComponent component =
|
|
1308
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1309
|
+
|
|
1310
|
+
MessageRegistrationToken token = GetToken(component);
|
|
1311
|
+
|
|
1312
|
+
int callCount = 0;
|
|
1313
|
+
int fastCallCount = 0;
|
|
1314
|
+
|
|
1315
|
+
void HandleUntargeted(SimpleUntargetedMessage message)
|
|
1316
|
+
{
|
|
1317
|
+
++callCount;
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
void HandleFastUntargeted(ref SimpleUntargetedMessage message)
|
|
1321
|
+
{
|
|
1322
|
+
++fastCallCount;
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
SimpleUntargetedMessage message = new();
|
|
1326
|
+
int expectedCallCount = 0;
|
|
1327
|
+
Run(
|
|
1328
|
+
() => new[] { token.RegisterUntargeted<SimpleUntargetedMessage>(HandleUntargeted) },
|
|
1329
|
+
() => message.EmitUntargeted(),
|
|
1330
|
+
() =>
|
|
1331
|
+
{
|
|
1332
|
+
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1333
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1334
|
+
},
|
|
1335
|
+
() =>
|
|
1336
|
+
{
|
|
1337
|
+
Assert.AreEqual(expectedCallCount, callCount);
|
|
1338
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1339
|
+
},
|
|
1340
|
+
token
|
|
1341
|
+
);
|
|
1342
|
+
|
|
1343
|
+
callCount = 0;
|
|
1344
|
+
expectedCallCount = 0;
|
|
1345
|
+
Run(
|
|
1346
|
+
() =>
|
|
1347
|
+
new[]
|
|
1348
|
+
{
|
|
1349
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleFastUntargeted),
|
|
1350
|
+
},
|
|
1351
|
+
() => message.EmitUntargeted(),
|
|
1352
|
+
() =>
|
|
1353
|
+
{
|
|
1354
|
+
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1355
|
+
Assert.AreEqual(0, callCount);
|
|
1356
|
+
},
|
|
1357
|
+
() =>
|
|
1358
|
+
{
|
|
1359
|
+
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1360
|
+
Assert.AreEqual(0, callCount);
|
|
1361
|
+
},
|
|
1362
|
+
token
|
|
1363
|
+
);
|
|
1364
|
+
|
|
1365
|
+
callCount = 0;
|
|
1366
|
+
fastCallCount = 0;
|
|
1367
|
+
Run(
|
|
1368
|
+
() =>
|
|
1369
|
+
{
|
|
1370
|
+
return new[]
|
|
1371
|
+
{
|
|
1372
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleFastUntargeted),
|
|
1373
|
+
token.RegisterUntargeted<SimpleUntargetedMessage>(HandleUntargeted),
|
|
1374
|
+
};
|
|
1375
|
+
},
|
|
1376
|
+
() => message.EmitUntargeted(),
|
|
1377
|
+
() => { },
|
|
1378
|
+
() =>
|
|
1379
|
+
{
|
|
1380
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1381
|
+
},
|
|
1382
|
+
token
|
|
1383
|
+
);
|
|
1384
|
+
|
|
1385
|
+
yield break;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
[UnityTest]
|
|
1389
|
+
public IEnumerator TargetedRemoveOrder()
|
|
1390
|
+
{
|
|
1391
|
+
GameObject test = new(nameof(TargetedRemoveOrder), typeof(SimpleMessageAwareComponent));
|
|
1392
|
+
_spawned.Add(test);
|
|
1393
|
+
|
|
1394
|
+
SimpleMessageAwareComponent component =
|
|
1395
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1396
|
+
|
|
1397
|
+
MessageRegistrationToken token = GetToken(component);
|
|
1398
|
+
|
|
1399
|
+
int callCount = 0;
|
|
1400
|
+
int fastCallCount = 0;
|
|
1401
|
+
|
|
1402
|
+
void HandleTargeted(SimpleTargetedMessage message)
|
|
1403
|
+
{
|
|
1404
|
+
++callCount;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
void HandleFastTargeted(ref SimpleTargetedMessage message)
|
|
1408
|
+
{
|
|
1409
|
+
++fastCallCount;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
SimpleTargetedMessage message = new();
|
|
1413
|
+
int expectedCallCount = 0;
|
|
1414
|
+
Run(
|
|
1415
|
+
() =>
|
|
1416
|
+
new[]
|
|
1417
|
+
{
|
|
1418
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1419
|
+
test,
|
|
1420
|
+
HandleTargeted
|
|
1421
|
+
),
|
|
1422
|
+
},
|
|
1423
|
+
() =>
|
|
1424
|
+
{
|
|
1425
|
+
message.EmitComponentTargeted(component);
|
|
1426
|
+
message.EmitGameObjectTargeted(test);
|
|
1427
|
+
},
|
|
1428
|
+
() =>
|
|
1429
|
+
{
|
|
1430
|
+
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1431
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1432
|
+
},
|
|
1433
|
+
() =>
|
|
1434
|
+
{
|
|
1435
|
+
Assert.AreEqual(expectedCallCount, callCount);
|
|
1436
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1437
|
+
},
|
|
1438
|
+
token
|
|
1439
|
+
);
|
|
1440
|
+
|
|
1441
|
+
callCount = 0;
|
|
1442
|
+
expectedCallCount = 0;
|
|
1443
|
+
Run(
|
|
1444
|
+
() =>
|
|
1445
|
+
new[]
|
|
1446
|
+
{
|
|
1447
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1448
|
+
test,
|
|
1449
|
+
HandleFastTargeted
|
|
1450
|
+
),
|
|
1451
|
+
},
|
|
1452
|
+
() =>
|
|
1453
|
+
{
|
|
1454
|
+
message.EmitComponentTargeted(component);
|
|
1455
|
+
message.EmitGameObjectTargeted(test);
|
|
1456
|
+
},
|
|
1457
|
+
() =>
|
|
1458
|
+
{
|
|
1459
|
+
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1460
|
+
Assert.AreEqual(0, callCount);
|
|
1461
|
+
},
|
|
1462
|
+
() =>
|
|
1463
|
+
{
|
|
1464
|
+
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1465
|
+
Assert.AreEqual(0, callCount);
|
|
1466
|
+
},
|
|
1467
|
+
token
|
|
1468
|
+
);
|
|
1469
|
+
|
|
1470
|
+
callCount = 0;
|
|
1471
|
+
fastCallCount = 0;
|
|
1472
|
+
Run(
|
|
1473
|
+
() =>
|
|
1474
|
+
{
|
|
1475
|
+
return new[]
|
|
1476
|
+
{
|
|
1477
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1478
|
+
test,
|
|
1479
|
+
HandleFastTargeted
|
|
1480
|
+
),
|
|
1481
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1482
|
+
test,
|
|
1483
|
+
HandleTargeted
|
|
1484
|
+
),
|
|
1485
|
+
};
|
|
1486
|
+
},
|
|
1487
|
+
() =>
|
|
1488
|
+
{
|
|
1489
|
+
message.EmitComponentTargeted(component);
|
|
1490
|
+
message.EmitGameObjectTargeted(test);
|
|
1491
|
+
},
|
|
1492
|
+
() => { },
|
|
1493
|
+
() =>
|
|
1494
|
+
{
|
|
1495
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1496
|
+
},
|
|
1497
|
+
token
|
|
1498
|
+
);
|
|
1499
|
+
|
|
1500
|
+
callCount = 0;
|
|
1501
|
+
fastCallCount = 0;
|
|
1502
|
+
Run(
|
|
1503
|
+
() =>
|
|
1504
|
+
{
|
|
1505
|
+
return new[]
|
|
1506
|
+
{
|
|
1507
|
+
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1508
|
+
component,
|
|
1509
|
+
HandleFastTargeted
|
|
1510
|
+
),
|
|
1511
|
+
token.RegisterGameObjectTargeted<SimpleTargetedMessage>(
|
|
1512
|
+
test,
|
|
1513
|
+
HandleTargeted
|
|
1514
|
+
),
|
|
1515
|
+
};
|
|
1516
|
+
},
|
|
1517
|
+
() =>
|
|
1518
|
+
{
|
|
1519
|
+
message.EmitComponentTargeted(component);
|
|
1520
|
+
message.EmitGameObjectTargeted(test);
|
|
1521
|
+
},
|
|
1522
|
+
() => { },
|
|
1523
|
+
() =>
|
|
1524
|
+
{
|
|
1525
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1526
|
+
},
|
|
1527
|
+
token
|
|
1528
|
+
);
|
|
1529
|
+
|
|
1530
|
+
callCount = 0;
|
|
1531
|
+
fastCallCount = 0;
|
|
1532
|
+
Run(
|
|
1533
|
+
() =>
|
|
1534
|
+
{
|
|
1535
|
+
return new[]
|
|
1536
|
+
{
|
|
1537
|
+
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1538
|
+
component,
|
|
1539
|
+
HandleFastTargeted
|
|
1540
|
+
),
|
|
1541
|
+
token.RegisterComponentTargeted<SimpleTargetedMessage>(
|
|
1542
|
+
component,
|
|
1543
|
+
HandleTargeted
|
|
1544
|
+
),
|
|
1545
|
+
};
|
|
1546
|
+
},
|
|
1547
|
+
() =>
|
|
1548
|
+
{
|
|
1549
|
+
message.EmitComponentTargeted(component);
|
|
1550
|
+
message.EmitGameObjectTargeted(test);
|
|
1551
|
+
},
|
|
1552
|
+
() => { },
|
|
1553
|
+
() =>
|
|
1554
|
+
{
|
|
1555
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1556
|
+
},
|
|
1557
|
+
token
|
|
1558
|
+
);
|
|
1559
|
+
|
|
1560
|
+
yield break;
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
[UnityTest]
|
|
1564
|
+
public IEnumerator BroadcastRemoveOrder()
|
|
1565
|
+
{
|
|
1566
|
+
GameObject test = new(
|
|
1567
|
+
nameof(BroadcastRemoveOrder),
|
|
1568
|
+
typeof(SimpleMessageAwareComponent)
|
|
1569
|
+
);
|
|
1570
|
+
_spawned.Add(test);
|
|
1571
|
+
|
|
1572
|
+
SimpleMessageAwareComponent component =
|
|
1573
|
+
test.GetComponent<SimpleMessageAwareComponent>();
|
|
1574
|
+
|
|
1575
|
+
MessageRegistrationToken token = GetToken(component);
|
|
1576
|
+
int callCount = 0;
|
|
1577
|
+
int fastCallCount = 0;
|
|
1578
|
+
|
|
1579
|
+
void HandleBroadcast(SimpleBroadcastMessage message)
|
|
1580
|
+
{
|
|
1581
|
+
++callCount;
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
void HandleFastBroadcast(ref SimpleBroadcastMessage message)
|
|
1585
|
+
{
|
|
1586
|
+
++fastCallCount;
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
SimpleBroadcastMessage message = new();
|
|
1590
|
+
int expectedCallCount = 0;
|
|
1591
|
+
Run(
|
|
1592
|
+
() =>
|
|
1593
|
+
new[]
|
|
1594
|
+
{
|
|
1595
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1596
|
+
test,
|
|
1597
|
+
HandleBroadcast
|
|
1598
|
+
),
|
|
1599
|
+
},
|
|
1600
|
+
() =>
|
|
1601
|
+
{
|
|
1602
|
+
message.EmitComponentBroadcast(component);
|
|
1603
|
+
message.EmitGameObjectBroadcast(test);
|
|
1604
|
+
},
|
|
1605
|
+
() =>
|
|
1606
|
+
{
|
|
1607
|
+
Assert.AreEqual(++expectedCallCount, callCount);
|
|
1608
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1609
|
+
},
|
|
1610
|
+
() =>
|
|
1611
|
+
{
|
|
1612
|
+
Assert.AreEqual(expectedCallCount, callCount);
|
|
1613
|
+
Assert.AreEqual(0, fastCallCount);
|
|
1614
|
+
},
|
|
1615
|
+
token
|
|
1616
|
+
);
|
|
1617
|
+
|
|
1618
|
+
callCount = 0;
|
|
1619
|
+
expectedCallCount = 0;
|
|
1620
|
+
Run(
|
|
1621
|
+
() =>
|
|
1622
|
+
new[]
|
|
1623
|
+
{
|
|
1624
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1625
|
+
test,
|
|
1626
|
+
HandleFastBroadcast
|
|
1627
|
+
),
|
|
1628
|
+
},
|
|
1629
|
+
() =>
|
|
1630
|
+
{
|
|
1631
|
+
message.EmitComponentBroadcast(component);
|
|
1632
|
+
message.EmitGameObjectBroadcast(test);
|
|
1633
|
+
},
|
|
1634
|
+
() =>
|
|
1635
|
+
{
|
|
1636
|
+
Assert.AreEqual(++expectedCallCount, fastCallCount);
|
|
1637
|
+
Assert.AreEqual(0, callCount);
|
|
1638
|
+
},
|
|
1639
|
+
() =>
|
|
1640
|
+
{
|
|
1641
|
+
Assert.AreEqual(expectedCallCount, fastCallCount);
|
|
1642
|
+
Assert.AreEqual(0, callCount);
|
|
1643
|
+
},
|
|
1644
|
+
token
|
|
1645
|
+
);
|
|
1646
|
+
|
|
1647
|
+
callCount = 0;
|
|
1648
|
+
fastCallCount = 0;
|
|
1649
|
+
Run(
|
|
1650
|
+
() =>
|
|
1651
|
+
{
|
|
1652
|
+
return new[]
|
|
1653
|
+
{
|
|
1654
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1655
|
+
test,
|
|
1656
|
+
HandleFastBroadcast
|
|
1657
|
+
),
|
|
1658
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1659
|
+
test,
|
|
1660
|
+
HandleBroadcast
|
|
1661
|
+
),
|
|
1662
|
+
};
|
|
1663
|
+
},
|
|
1664
|
+
() =>
|
|
1665
|
+
{
|
|
1666
|
+
message.EmitComponentBroadcast(component);
|
|
1667
|
+
message.EmitGameObjectBroadcast(test);
|
|
1668
|
+
},
|
|
1669
|
+
() => { },
|
|
1670
|
+
() =>
|
|
1671
|
+
{
|
|
1672
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1673
|
+
},
|
|
1674
|
+
token
|
|
1675
|
+
);
|
|
1676
|
+
|
|
1677
|
+
callCount = 0;
|
|
1678
|
+
fastCallCount = 0;
|
|
1679
|
+
Run(
|
|
1680
|
+
() =>
|
|
1681
|
+
{
|
|
1682
|
+
return new[]
|
|
1683
|
+
{
|
|
1684
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1685
|
+
test,
|
|
1686
|
+
HandleFastBroadcast
|
|
1687
|
+
),
|
|
1688
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1689
|
+
test,
|
|
1690
|
+
HandleBroadcast
|
|
1691
|
+
),
|
|
1692
|
+
};
|
|
1693
|
+
},
|
|
1694
|
+
() =>
|
|
1695
|
+
{
|
|
1696
|
+
message.EmitComponentBroadcast(component);
|
|
1697
|
+
message.EmitGameObjectBroadcast(test);
|
|
1698
|
+
},
|
|
1699
|
+
() => { },
|
|
1700
|
+
() =>
|
|
1701
|
+
{
|
|
1702
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1703
|
+
},
|
|
1704
|
+
token
|
|
1705
|
+
);
|
|
1706
|
+
|
|
1707
|
+
callCount = 0;
|
|
1708
|
+
fastCallCount = 0;
|
|
1709
|
+
Run(
|
|
1710
|
+
() =>
|
|
1711
|
+
{
|
|
1712
|
+
return new[]
|
|
1713
|
+
{
|
|
1714
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1715
|
+
test,
|
|
1716
|
+
HandleFastBroadcast
|
|
1717
|
+
),
|
|
1718
|
+
token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(
|
|
1719
|
+
test,
|
|
1720
|
+
HandleBroadcast
|
|
1721
|
+
),
|
|
1722
|
+
};
|
|
1723
|
+
},
|
|
1724
|
+
() =>
|
|
1725
|
+
{
|
|
1726
|
+
message.EmitComponentBroadcast(component);
|
|
1727
|
+
message.EmitGameObjectBroadcast(test);
|
|
1728
|
+
},
|
|
1729
|
+
() => { },
|
|
1730
|
+
() =>
|
|
1731
|
+
{
|
|
1732
|
+
Assert.AreNotEqual(callCount, fastCallCount);
|
|
1733
|
+
},
|
|
1734
|
+
token
|
|
1735
|
+
);
|
|
1736
|
+
|
|
1737
|
+
yield break;
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|