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.
Files changed (106) hide show
  1. package/.gitattributes +63 -63
  2. package/.github/workflows/npm-publish.yml +66 -0
  3. package/CHANGELOG.md.meta +7 -7
  4. package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +33 -33
  5. package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +33 -33
  6. package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +33 -33
  7. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +71 -71
  8. package/Editor/Analyzers.meta +8 -8
  9. package/Editor/SetupCscRsp.cs +162 -162
  10. package/Editor/SetupCscRsp.cs.meta +2 -2
  11. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +17 -17
  12. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
  13. package/Editor.meta +8 -8
  14. package/LICENSE.md +6 -6
  15. package/LICENSE.md.meta +7 -7
  16. package/README.md +387 -364
  17. package/README.md.meta +7 -7
  18. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs +7 -7
  19. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs.meta +2 -2
  20. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +7 -7
  21. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
  22. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +7 -7
  23. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
  24. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +7 -7
  25. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +2 -2
  26. package/Runtime/Core/Attributes.meta +2 -2
  27. package/Runtime/Core/Extensions/MessageExtensions.cs +342 -342
  28. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
  29. package/Runtime/Core/Extensions.meta +8 -8
  30. package/Runtime/Core/IMessage.cs +12 -12
  31. package/Runtime/Core/IMessage.cs.meta +11 -11
  32. package/Runtime/Core/InstanceId.cs +149 -149
  33. package/Runtime/Core/InstanceId.cs.meta +11 -11
  34. package/Runtime/Core/MessageBus/IMessageBus.cs +309 -309
  35. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
  36. package/Runtime/Core/MessageBus/MessageBus.cs +2243 -2084
  37. package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
  38. package/Runtime/Core/MessageBus/MessagingRegistration.cs +105 -105
  39. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
  40. package/Runtime/Core/MessageBus/RegistrationLog.cs +111 -111
  41. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
  42. package/Runtime/Core/MessageBus.meta +8 -8
  43. package/Runtime/Core/MessageHandler.cs +2778 -2759
  44. package/Runtime/Core/MessageHandler.cs.meta +11 -11
  45. package/Runtime/Core/MessageRegistrationHandle.cs +110 -110
  46. package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
  47. package/Runtime/Core/MessageRegistrationToken.cs +1234 -1234
  48. package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
  49. package/Runtime/Core/Messages/IBroadcastMessage.cs +27 -27
  50. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
  51. package/Runtime/Core/Messages/ITargetedMessage.cs +27 -27
  52. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  53. package/Runtime/Core/Messages/IUntargetedMessage.cs +27 -27
  54. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
  55. package/Runtime/Core/Messages.meta +8 -8
  56. package/Runtime/Core/MessagingDebug.cs +70 -70
  57. package/Runtime/Core/MessagingDebug.cs.meta +11 -11
  58. package/Runtime/Core.meta +8 -8
  59. package/Runtime/Unity/MessageAwareComponent.cs +77 -77
  60. package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
  61. package/Runtime/Unity/MessagingComponent.cs +99 -99
  62. package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
  63. package/Runtime/Unity.meta +8 -8
  64. package/Runtime/WallstopStudios.DxMessaging.asmdef +15 -15
  65. package/Runtime.meta +8 -8
  66. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs +92 -92
  67. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs.meta +11 -11
  68. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs +94 -94
  69. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs.meta +2 -2
  70. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs +94 -94
  71. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs.meta +2 -2
  72. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs +94 -94
  73. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs.meta +2 -2
  74. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +21 -21
  75. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
  76. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
  77. package/SourceGenerators.meta +8 -8
  78. package/Tests/Runtime/Benchmarks/PerformanceTests.cs +373 -310
  79. package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +11 -11
  80. package/Tests/Runtime/Benchmarks.meta +8 -8
  81. package/Tests/Runtime/Core/BroadcastTests.cs +899 -899
  82. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +190 -190
  83. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -11
  84. package/Tests/Runtime/Core/MessagingTestBase.cs +185 -185
  85. package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -11
  86. package/Tests/Runtime/Core/NominalTests.cs +1740 -1740
  87. package/Tests/Runtime/Core/PostProcessorTests.cs +1236 -1236
  88. package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -11
  89. package/Tests/Runtime/Core/RegistrationTests.cs +1266 -1266
  90. package/Tests/Runtime/Core/RegistrationTests.cs.meta +11 -11
  91. package/Tests/Runtime/Core/TargetedTests.cs +888 -888
  92. package/Tests/Runtime/Core/TargetedTests.cs.meta +11 -11
  93. package/Tests/Runtime/Core/UntargetedTests.cs +272 -272
  94. package/Tests/Runtime/Core/UntargetedTests.cs.meta +11 -11
  95. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +9 -9
  96. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +11 -11
  97. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +186 -186
  98. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +30 -30
  99. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +8 -8
  100. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +8 -8
  101. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +8 -8
  102. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -7
  103. package/Tests.meta +8 -8
  104. package/Third Party Notices.md.meta +7 -7
  105. package/package.json +36 -36
  106. package/package.json.meta +7 -7
@@ -1,888 +1,888 @@
1
- namespace DxMessaging.Tests.Runtime.Core
2
- {
3
- using System.Collections;
4
- using System.Linq;
5
- using DxMessaging.Core;
6
- using DxMessaging.Core.Extensions;
7
- using DxMessaging.Core.Messages;
8
- using NUnit.Framework;
9
- using Scripts.Components;
10
- using Scripts.Messages;
11
- using UnityEngine;
12
- using UnityEngine.TestTools;
13
-
14
- public sealed class TargetedTests : MessagingTestBase
15
- {
16
- [UnityTest]
17
- public IEnumerator SimpleGameObjectTargetedNormal()
18
- {
19
- GameObject test1 = new(
20
- nameof(SimpleGameObjectTargetedNormal) + "1",
21
- typeof(EmptyMessageAwareComponent)
22
- );
23
- _spawned.Add(test1);
24
- GameObject test2 = new(
25
- nameof(SimpleGameObjectTargetedNormal) + "2",
26
- typeof(EmptyMessageAwareComponent)
27
- );
28
- _spawned.Add(test2);
29
- EmptyMessageAwareComponent component1 =
30
- test1.GetComponent<EmptyMessageAwareComponent>();
31
- EmptyMessageAwareComponent component2 =
32
- test2.GetComponent<EmptyMessageAwareComponent>();
33
-
34
- int test1TargetedCount = 0;
35
- int test2TargetedCount = 0;
36
-
37
- MessageRegistrationToken token1 = GetToken(component1);
38
- MessageRegistrationToken token2 = GetToken(component2);
39
-
40
- _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(
41
- test1,
42
- _ => ++test1TargetedCount
43
- );
44
- _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(
45
- test2,
46
- _ => ++test2TargetedCount
47
- );
48
-
49
- SimpleTargetedMessage message = new();
50
- message.EmitGameObjectTargeted(test1);
51
- Assert.AreEqual(1, test1TargetedCount);
52
- Assert.AreEqual(0, test2TargetedCount);
53
-
54
- message.EmitGameObjectTargeted(test2);
55
- Assert.AreEqual(1, test1TargetedCount);
56
- Assert.AreEqual(1, test2TargetedCount);
57
-
58
- GameObject test3 = new(nameof(SimpleGameObjectTargetedNormal) + "3");
59
- _spawned.Add(test3);
60
- message.EmitGameObjectTargeted(test3);
61
- Assert.AreEqual(1, test1TargetedCount);
62
- Assert.AreEqual(1, test2TargetedCount);
63
-
64
- _ = test3.AddComponent<EmptyMessageAwareComponent>();
65
- message.EmitGameObjectTargeted(test3);
66
- Assert.AreEqual(1, test1TargetedCount);
67
- Assert.AreEqual(1, test2TargetedCount);
68
-
69
- for (int i = 0; i < 100; ++i)
70
- {
71
- message.EmitGameObjectTargeted(test1);
72
- Assert.AreEqual(2 + i, test1TargetedCount);
73
- Assert.AreEqual(1 + i, test2TargetedCount);
74
-
75
- message.EmitGameObjectTargeted(test2);
76
- Assert.AreEqual(2 + i, test1TargetedCount);
77
- Assert.AreEqual(2 + i, test2TargetedCount);
78
- }
79
-
80
- yield break;
81
- }
82
-
83
- [UnityTest]
84
- public IEnumerator SimpleGameObjectTargetedNoCopy()
85
- {
86
- GameObject test1 = new(
87
- nameof(SimpleGameObjectTargetedNoCopy) + "1",
88
- typeof(EmptyMessageAwareComponent)
89
- );
90
- _spawned.Add(test1);
91
- GameObject test2 = new(
92
- nameof(SimpleGameObjectTargetedNoCopy) + "2",
93
- typeof(EmptyMessageAwareComponent)
94
- );
95
- _spawned.Add(test2);
96
- EmptyMessageAwareComponent component1 =
97
- test1.GetComponent<EmptyMessageAwareComponent>();
98
- EmptyMessageAwareComponent component2 =
99
- test2.GetComponent<EmptyMessageAwareComponent>();
100
-
101
- int test1TargetedCount = 0;
102
- void Test1Receive(ref SimpleTargetedMessage message)
103
- {
104
- ++test1TargetedCount;
105
- }
106
-
107
- int test2TargetedCount = 0;
108
- void Test2Receive(ref SimpleTargetedMessage message)
109
- {
110
- ++test2TargetedCount;
111
- }
112
-
113
- MessageRegistrationToken token1 = GetToken(component1);
114
- MessageRegistrationToken token2 = GetToken(component2);
115
-
116
- _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(test1, Test1Receive);
117
- _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(test2, Test2Receive);
118
-
119
- SimpleTargetedMessage message = new();
120
- message.EmitGameObjectTargeted(test1);
121
- Assert.AreEqual(1, test1TargetedCount);
122
- Assert.AreEqual(0, test2TargetedCount);
123
-
124
- message.EmitGameObjectTargeted(test2);
125
- Assert.AreEqual(1, test1TargetedCount);
126
- Assert.AreEqual(1, test2TargetedCount);
127
-
128
- GameObject test3 = new(nameof(SimpleGameObjectTargetedNoCopy) + "3");
129
- message.EmitGameObjectTargeted(test3);
130
- Assert.AreEqual(1, test1TargetedCount);
131
- Assert.AreEqual(1, test2TargetedCount);
132
-
133
- _ = test3.AddComponent<EmptyMessageAwareComponent>();
134
- _spawned.Add(test3);
135
- message.EmitGameObjectTargeted(test3);
136
- Assert.AreEqual(1, test1TargetedCount);
137
- Assert.AreEqual(1, test2TargetedCount);
138
-
139
- for (int i = 0; i < 100; ++i)
140
- {
141
- message.EmitGameObjectTargeted(test1);
142
- Assert.AreEqual(2 + i, test1TargetedCount);
143
- Assert.AreEqual(1 + i, test2TargetedCount);
144
-
145
- message.EmitGameObjectTargeted(test2);
146
- Assert.AreEqual(2 + i, test1TargetedCount);
147
- Assert.AreEqual(2 + i, test2TargetedCount);
148
- }
149
- yield break;
150
- }
151
-
152
- [UnityTest]
153
- public IEnumerator SimpleGameObjectTargetedDualMode()
154
- {
155
- GameObject test1 = new(
156
- nameof(SimpleGameObjectTargetedDualMode) + "1",
157
- typeof(EmptyMessageAwareComponent)
158
- );
159
- _spawned.Add(test1);
160
- GameObject test2 = new(
161
- nameof(SimpleGameObjectTargetedDualMode) + "2",
162
- typeof(EmptyMessageAwareComponent)
163
- );
164
- _spawned.Add(test2);
165
- EmptyMessageAwareComponent component1 =
166
- test1.GetComponent<EmptyMessageAwareComponent>();
167
- EmptyMessageAwareComponent component2 =
168
- test2.GetComponent<EmptyMessageAwareComponent>();
169
-
170
- int test1ReceiveCount = 0;
171
- void Test1Receive(ref SimpleTargetedMessage message)
172
- {
173
- ++test1ReceiveCount;
174
- }
175
-
176
- int test2ReceiveCount = 0;
177
- void Test2Receive(ref SimpleTargetedMessage message)
178
- {
179
- ++test2ReceiveCount;
180
- }
181
-
182
- MessageRegistrationToken token1 = GetToken(component1);
183
- MessageRegistrationToken token2 = GetToken(component2);
184
-
185
- _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(test1, Test1Receive);
186
- _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(
187
- test1,
188
- _ => ++test1ReceiveCount
189
- );
190
- _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(test2, Test2Receive);
191
-
192
- SimpleTargetedMessage message = new();
193
- message.EmitGameObjectTargeted(test1);
194
- Assert.AreEqual(2, test1ReceiveCount);
195
- Assert.AreEqual(0, test2ReceiveCount);
196
-
197
- message.EmitGameObjectTargeted(test2);
198
- Assert.AreEqual(2, test1ReceiveCount);
199
- Assert.AreEqual(1, test2ReceiveCount);
200
-
201
- GameObject test3 = new(nameof(SimpleGameObjectTargetedDualMode) + "3");
202
- _spawned.Add(test3);
203
- message.EmitGameObjectTargeted(test3);
204
- Assert.AreEqual(2, test1ReceiveCount);
205
- Assert.AreEqual(1, test2ReceiveCount);
206
-
207
- _ = test3.AddComponent<EmptyMessageAwareComponent>();
208
- message.EmitGameObjectTargeted(test3);
209
- Assert.AreEqual(2, test1ReceiveCount);
210
- Assert.AreEqual(1, test2ReceiveCount);
211
-
212
- for (int i = 0; i < 100; ++i)
213
- {
214
- message.EmitGameObjectTargeted(test1);
215
- Assert.AreEqual(2 + (1 + i) * 2, test1ReceiveCount);
216
- Assert.AreEqual(1 + i, test2ReceiveCount);
217
-
218
- message.EmitGameObjectTargeted(test2);
219
- Assert.AreEqual(2 + (1 + i) * 2, test1ReceiveCount);
220
- Assert.AreEqual(2 + i, test2ReceiveCount);
221
- }
222
- yield break;
223
- }
224
-
225
- [UnityTest]
226
- public IEnumerator SimpleComponentTargetedNormal()
227
- {
228
- GameObject test1 = new(
229
- nameof(SimpleComponentTargetedNormal) + "1",
230
- typeof(EmptyMessageAwareComponent)
231
- );
232
- _spawned.Add(test1);
233
- GameObject test2 = new(
234
- nameof(SimpleComponentTargetedNormal) + "3",
235
- typeof(EmptyMessageAwareComponent)
236
- );
237
- _spawned.Add(test2);
238
- EmptyMessageAwareComponent component1 =
239
- test1.GetComponent<EmptyMessageAwareComponent>();
240
- EmptyMessageAwareComponent component2 =
241
- test2.GetComponent<EmptyMessageAwareComponent>();
242
-
243
- int test1ReceiveCount = 0;
244
- int test2ReceiveCount = 0;
245
-
246
- MessageRegistrationToken token1 = GetToken(component1);
247
- MessageRegistrationToken token2 = GetToken(component2);
248
-
249
- _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(
250
- component1,
251
- _ => ++test1ReceiveCount
252
- );
253
- _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(
254
- component2,
255
- _ => ++test2ReceiveCount
256
- );
257
-
258
- SimpleTargetedMessage message = new();
259
- message.EmitComponentTargeted(component1);
260
- Assert.AreEqual(1, test1ReceiveCount);
261
- Assert.AreEqual(0, test2ReceiveCount);
262
-
263
- message.EmitComponentTargeted(component2);
264
- Assert.AreEqual(1, test1ReceiveCount);
265
- Assert.AreEqual(1, test2ReceiveCount);
266
-
267
- GameObject test3 = new(nameof(SimpleComponentTargetedNormal) + "3");
268
- _spawned.Add(test3);
269
- message.EmitComponentTargeted(test3.transform);
270
- Assert.AreEqual(1, test1ReceiveCount);
271
- Assert.AreEqual(1, test2ReceiveCount);
272
-
273
- EmptyMessageAwareComponent component3 =
274
- test3.AddComponent<EmptyMessageAwareComponent>();
275
- message.EmitComponentTargeted(component3);
276
- Assert.AreEqual(1, test1ReceiveCount);
277
- Assert.AreEqual(1, test2ReceiveCount);
278
-
279
- for (int i = 0; i < 100; ++i)
280
- {
281
- message.EmitComponentTargeted(component1);
282
- Assert.AreEqual(2 + i, test1ReceiveCount);
283
- Assert.AreEqual(1 + i, test2ReceiveCount);
284
-
285
- message.EmitComponentTargeted(component2);
286
- Assert.AreEqual(2 + i, test1ReceiveCount);
287
- Assert.AreEqual(2 + i, test2ReceiveCount);
288
- }
289
-
290
- yield break;
291
- }
292
-
293
- [UnityTest]
294
- public IEnumerator SimpleComponentTargetedNoCopy()
295
- {
296
- GameObject test1 = new(
297
- nameof(SimpleComponentTargetedNoCopy) + "1",
298
- typeof(EmptyMessageAwareComponent)
299
- );
300
- _spawned.Add(test1);
301
- GameObject test2 = new(
302
- nameof(SimpleComponentTargetedNoCopy) + "2",
303
- typeof(EmptyMessageAwareComponent)
304
- );
305
- _spawned.Add(test2);
306
- EmptyMessageAwareComponent component1 =
307
- test1.GetComponent<EmptyMessageAwareComponent>();
308
- EmptyMessageAwareComponent component2 =
309
- test2.GetComponent<EmptyMessageAwareComponent>();
310
-
311
- int test1ReceiveCount = 0;
312
- void Test1Receive(ref SimpleTargetedMessage message)
313
- {
314
- ++test1ReceiveCount;
315
- }
316
-
317
- int test2ReceiveCount = 0;
318
- void Test2Receive(ref SimpleTargetedMessage message)
319
- {
320
- ++test2ReceiveCount;
321
- }
322
-
323
- MessageRegistrationToken token1 = GetToken(component1);
324
- MessageRegistrationToken token2 = GetToken(component2);
325
-
326
- _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(component1, Test1Receive);
327
- _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(component2, Test2Receive);
328
-
329
- SimpleTargetedMessage message = new();
330
- message.EmitComponentTargeted(component1);
331
- Assert.AreEqual(1, test1ReceiveCount);
332
- Assert.AreEqual(0, test2ReceiveCount);
333
-
334
- message.EmitComponentTargeted(component2);
335
- Assert.AreEqual(1, test1ReceiveCount);
336
- Assert.AreEqual(1, test2ReceiveCount);
337
-
338
- GameObject test3 = new(nameof(SimpleComponentTargetedNoCopy) + "3");
339
- _spawned.Add(test3);
340
- message.EmitComponentTargeted(test3.transform);
341
- Assert.AreEqual(1, test1ReceiveCount);
342
- Assert.AreEqual(1, test2ReceiveCount);
343
-
344
- EmptyMessageAwareComponent component3 =
345
- test3.AddComponent<EmptyMessageAwareComponent>();
346
- message.EmitComponentTargeted(component3);
347
- Assert.AreEqual(1, test1ReceiveCount);
348
- Assert.AreEqual(1, test2ReceiveCount);
349
-
350
- for (int i = 0; i < 100; ++i)
351
- {
352
- message.EmitComponentTargeted(component1);
353
- Assert.AreEqual(2 + i, test1ReceiveCount);
354
- Assert.AreEqual(1 + i, test2ReceiveCount);
355
-
356
- message.EmitComponentTargeted(component2);
357
- Assert.AreEqual(2 + i, test1ReceiveCount);
358
- Assert.AreEqual(2 + i, test2ReceiveCount);
359
- }
360
-
361
- yield break;
362
- }
363
-
364
- [UnityTest]
365
- public IEnumerator SimpleComponentTargetedDualMode()
366
- {
367
- GameObject test1 = new(
368
- nameof(SimpleComponentTargetedDualMode) + "1",
369
- typeof(EmptyMessageAwareComponent)
370
- );
371
- _spawned.Add(test1);
372
- GameObject test2 = new(
373
- nameof(SimpleComponentTargetedDualMode) + "2",
374
- typeof(EmptyMessageAwareComponent)
375
- );
376
- _spawned.Add(test2);
377
- EmptyMessageAwareComponent component1 =
378
- test1.GetComponent<EmptyMessageAwareComponent>();
379
- EmptyMessageAwareComponent component2 =
380
- test2.GetComponent<EmptyMessageAwareComponent>();
381
-
382
- int test1ReceiveCount = 0;
383
- void Test1Receive(ref SimpleTargetedMessage message)
384
- {
385
- ++test1ReceiveCount;
386
- }
387
-
388
- int test2ReceiveCount = 0;
389
- void Test2Receive(ref SimpleTargetedMessage message)
390
- {
391
- ++test2ReceiveCount;
392
- }
393
-
394
- MessageRegistrationToken token1 = GetToken(component1);
395
- MessageRegistrationToken token2 = GetToken(component2);
396
-
397
- _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(component1, Test1Receive);
398
- _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(
399
- component1,
400
- _ => ++test1ReceiveCount
401
- );
402
- _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(component2, Test2Receive);
403
-
404
- SimpleTargetedMessage message = new();
405
- message.EmitComponentTargeted(component1);
406
- Assert.AreEqual(2, test1ReceiveCount);
407
- Assert.AreEqual(0, test2ReceiveCount);
408
-
409
- message.EmitComponentTargeted(component2);
410
- Assert.AreEqual(2, test1ReceiveCount);
411
- Assert.AreEqual(1, test2ReceiveCount);
412
-
413
- GameObject test3 = new(nameof(SimpleComponentTargetedDualMode) + "3");
414
- _spawned.Add(test3);
415
- message.EmitComponentTargeted(test3.transform);
416
- Assert.AreEqual(2, test1ReceiveCount);
417
- Assert.AreEqual(1, test2ReceiveCount);
418
-
419
- EmptyMessageAwareComponent component3 =
420
- test3.AddComponent<EmptyMessageAwareComponent>();
421
- message.EmitComponentTargeted(component3);
422
- Assert.AreEqual(2, test1ReceiveCount);
423
- Assert.AreEqual(1, test2ReceiveCount);
424
-
425
- for (int i = 0; i < 100; ++i)
426
- {
427
- message.EmitComponentTargeted(component1);
428
- Assert.AreEqual(2 + (i + 1) * 2, test1ReceiveCount);
429
- Assert.AreEqual(1 + i, test2ReceiveCount);
430
-
431
- message.EmitComponentTargeted(component2);
432
- Assert.AreEqual(2 + (i + 1) * 2, test1ReceiveCount);
433
- Assert.AreEqual(2 + i, test2ReceiveCount);
434
- }
435
-
436
- yield break;
437
- }
438
-
439
- [UnityTest]
440
- public IEnumerator SimpleTargetedWithoutTargetingNormal()
441
- {
442
- GameObject test1 = new(
443
- nameof(SimpleTargetedWithoutTargetingNormal) + "1",
444
- typeof(EmptyMessageAwareComponent)
445
- );
446
- _spawned.Add(test1);
447
- GameObject test2 = new(
448
- nameof(SimpleTargetedWithoutTargetingNormal) + "2",
449
- typeof(EmptyMessageAwareComponent)
450
- );
451
- _spawned.Add(test2);
452
- EmptyMessageAwareComponent component1 =
453
- test1.GetComponent<EmptyMessageAwareComponent>();
454
- EmptyMessageAwareComponent component2 =
455
- test2.GetComponent<EmptyMessageAwareComponent>();
456
-
457
- int test1ReceiveCount = 0;
458
- void Test1Receive(InstanceId id, SimpleTargetedMessage message)
459
- {
460
- ++test1ReceiveCount;
461
- }
462
-
463
- int test2ReceiveCount = 0;
464
- void Test2Receive(InstanceId id, SimpleTargetedMessage message)
465
- {
466
- ++test2ReceiveCount;
467
- }
468
-
469
- MessageRegistrationToken token1 = GetToken(component1);
470
- MessageRegistrationToken token2 = GetToken(component2);
471
-
472
- _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
473
- _ = token2.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
474
-
475
- SimpleTargetedMessage message = new();
476
- message.EmitComponentTargeted(component1);
477
- Assert.AreEqual(1, test1ReceiveCount);
478
- Assert.AreEqual(1, test2ReceiveCount);
479
-
480
- message.EmitComponentTargeted(component2);
481
- Assert.AreEqual(2, test1ReceiveCount);
482
- Assert.AreEqual(2, test2ReceiveCount);
483
-
484
- GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingNormal) + "3");
485
- _spawned.Add(test3);
486
- message.EmitComponentTargeted(test3.transform);
487
- Assert.AreEqual(3, test1ReceiveCount);
488
- Assert.AreEqual(3, test2ReceiveCount);
489
-
490
- EmptyMessageAwareComponent component3 =
491
- test3.AddComponent<EmptyMessageAwareComponent>();
492
- message.EmitComponentTargeted(component3);
493
- Assert.AreEqual(4, test1ReceiveCount);
494
- Assert.AreEqual(4, test2ReceiveCount);
495
-
496
- for (int i = 0; i < 100; ++i)
497
- {
498
- message.EmitGameObjectTargeted(test1);
499
- Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
500
- Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
501
-
502
- message.EmitComponentTargeted(component2);
503
- Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
504
- Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
505
- }
506
-
507
- yield break;
508
- }
509
-
510
- [UnityTest]
511
- public IEnumerator SimpleTargetedWithoutTargetingNoCopy()
512
- {
513
- GameObject test1 = new(
514
- nameof(SimpleTargetedWithoutTargetingNoCopy) + "1",
515
- typeof(EmptyMessageAwareComponent)
516
- );
517
- _spawned.Add(test1);
518
- GameObject test2 = new(
519
- nameof(SimpleTargetedWithoutTargetingNoCopy) + "2",
520
- typeof(EmptyMessageAwareComponent)
521
- );
522
- _spawned.Add(test2);
523
- EmptyMessageAwareComponent component1 =
524
- test1.GetComponent<EmptyMessageAwareComponent>();
525
- EmptyMessageAwareComponent component2 =
526
- test2.GetComponent<EmptyMessageAwareComponent>();
527
-
528
- int test1ReceiveCount = 0;
529
- void Test1Receive(ref InstanceId id, ref SimpleTargetedMessage message)
530
- {
531
- ++test1ReceiveCount;
532
- }
533
-
534
- int test2ReceiveCount = 0;
535
- void Test2Receive(ref InstanceId id, ref SimpleTargetedMessage message)
536
- {
537
- ++test2ReceiveCount;
538
- }
539
-
540
- MessageRegistrationToken token1 = GetToken(component1);
541
- MessageRegistrationToken token2 = GetToken(component2);
542
-
543
- _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
544
- _ = token2.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
545
-
546
- SimpleTargetedMessage message = new();
547
- message.EmitComponentTargeted(component1);
548
- Assert.AreEqual(1, test1ReceiveCount);
549
- Assert.AreEqual(1, test2ReceiveCount);
550
-
551
- message.EmitComponentTargeted(component2);
552
- Assert.AreEqual(2, test1ReceiveCount);
553
- Assert.AreEqual(2, test2ReceiveCount);
554
-
555
- GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingNoCopy) + "3");
556
- _spawned.Add(test3);
557
- message.EmitComponentTargeted(test3.transform);
558
- Assert.AreEqual(3, test1ReceiveCount);
559
- Assert.AreEqual(3, test2ReceiveCount);
560
-
561
- EmptyMessageAwareComponent component3 =
562
- test3.AddComponent<EmptyMessageAwareComponent>();
563
- message.EmitComponentTargeted(component3);
564
- Assert.AreEqual(4, test1ReceiveCount);
565
- Assert.AreEqual(4, test2ReceiveCount);
566
-
567
- for (int i = 0; i < 100; ++i)
568
- {
569
- message.EmitGameObjectTargeted(test1);
570
- Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
571
- Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
572
-
573
- message.EmitComponentTargeted(component2);
574
- Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
575
- Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
576
- }
577
-
578
- yield break;
579
- }
580
-
581
- [UnityTest]
582
- public IEnumerator SimpleTargetedWithoutTargetingDualMode()
583
- {
584
- GameObject test1 = new(
585
- nameof(SimpleTargetedWithoutTargetingDualMode) + "1",
586
- typeof(EmptyMessageAwareComponent)
587
- );
588
- _spawned.Add(test1);
589
- GameObject test2 = new(
590
- nameof(SimpleTargetedWithoutTargetingDualMode) + "2",
591
- typeof(EmptyMessageAwareComponent)
592
- );
593
- _spawned.Add(test2);
594
- EmptyMessageAwareComponent component1 =
595
- test1.GetComponent<EmptyMessageAwareComponent>();
596
- EmptyMessageAwareComponent component2 =
597
- test2.GetComponent<EmptyMessageAwareComponent>();
598
-
599
- int test1ReceiveCount = 0;
600
- void Test1Receive(ref InstanceId id, ref SimpleTargetedMessage message)
601
- {
602
- ++test1ReceiveCount;
603
- }
604
-
605
- int test2ReceiveCount = 0;
606
- void Test2Receive(InstanceId id, SimpleTargetedMessage message)
607
- {
608
- ++test2ReceiveCount;
609
- }
610
-
611
- // Assign them to the same token for simplicity
612
- MessageRegistrationToken token1 = GetToken(component1);
613
-
614
- _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
615
- _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
616
-
617
- SimpleTargetedMessage message = new();
618
- message.EmitComponentTargeted(component1);
619
- Assert.AreEqual(1, test1ReceiveCount);
620
- Assert.AreEqual(1, test2ReceiveCount);
621
-
622
- message.EmitComponentTargeted(component2);
623
- Assert.AreEqual(2, test1ReceiveCount);
624
- Assert.AreEqual(2, test2ReceiveCount);
625
-
626
- GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingDualMode) + "3");
627
- _spawned.Add(test3);
628
- message.EmitComponentTargeted(test3.transform);
629
- Assert.AreEqual(3, test1ReceiveCount);
630
- Assert.AreEqual(3, test2ReceiveCount);
631
-
632
- EmptyMessageAwareComponent component3 =
633
- test3.AddComponent<EmptyMessageAwareComponent>();
634
- message.EmitComponentTargeted(component3);
635
- Assert.AreEqual(4, test1ReceiveCount);
636
- Assert.AreEqual(4, test2ReceiveCount);
637
-
638
- for (int i = 0; i < 100; ++i)
639
- {
640
- message.EmitGameObjectTargeted(test1);
641
- Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
642
- Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
643
-
644
- message.EmitComponentTargeted(component2);
645
- Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
646
- Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
647
- }
648
-
649
- yield break;
650
- }
651
-
652
- [UnityTest]
653
- public IEnumerator TargetedUntyped()
654
- {
655
- GameObject test = new(
656
- nameof(TargetedUntyped) + "1",
657
- typeof(EmptyMessageAwareComponent)
658
- );
659
- _spawned.Add(test);
660
-
661
- int gameObjectCount = 0;
662
- int componentCount = 0;
663
-
664
- void ReceiveGameObject(ref SimpleTargetedMessage message)
665
- {
666
- ++gameObjectCount;
667
- }
668
-
669
- void ReceiveComponent(ref SimpleTargetedMessage message)
670
- {
671
- ++componentCount;
672
- }
673
-
674
- EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
675
- MessageRegistrationToken token = GetToken(component);
676
- token.RegisterGameObjectTargeted<SimpleTargetedMessage>(test, ReceiveGameObject);
677
- token.RegisterComponentTargeted<SimpleTargetedMessage>(component, ReceiveComponent);
678
-
679
- ITargetedMessage message = new SimpleTargetedMessage();
680
- message.EmitComponentTargeted(component);
681
- Assert.AreEqual(1, componentCount);
682
- Assert.AreEqual(0, gameObjectCount);
683
- message.EmitGameObjectTargeted(test);
684
- Assert.AreEqual(1, componentCount);
685
- Assert.AreEqual(1, gameObjectCount);
686
- message.EmitComponentTargeted(component);
687
- Assert.AreEqual(2, componentCount);
688
- Assert.AreEqual(1, gameObjectCount);
689
- message.EmitGameObjectTargeted(test);
690
- Assert.AreEqual(2, componentCount);
691
- Assert.AreEqual(2, gameObjectCount);
692
-
693
- yield break;
694
- }
695
-
696
- [UnityTest]
697
- public IEnumerator PriorityGameObject()
698
- {
699
- GameObject test = new(
700
- nameof(PriorityGameObject) + "1",
701
- typeof(EmptyMessageAwareComponent)
702
- );
703
- _spawned.Add(test);
704
-
705
- int[] received = new int[100];
706
- EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
707
- MessageRegistrationToken token = GetToken(component);
708
- for (int i = 0; i < received.Length; ++i)
709
- {
710
- int priority = i;
711
- token.RegisterGameObjectTargeted(
712
- test,
713
- (ref SimpleTargetedMessage _) =>
714
- {
715
- int previous = received[priority]++;
716
- for (int j = priority - 1; j >= 0; --j)
717
- {
718
- Assert.AreEqual(previous + 1, received[j]);
719
- }
720
- for (int j = priority + 1; j < received.Length; ++j)
721
- {
722
- Assert.AreEqual(previous, received[j]);
723
- }
724
- },
725
- priority: priority
726
- );
727
- token.RegisterGameObjectTargetedPostProcessor(
728
- test,
729
- (ref SimpleTargetedMessage _) =>
730
- {
731
- int previous = received[priority]++;
732
- Assert.AreEqual(1, previous % 2);
733
- for (int j = priority - 1; j >= 0; --j)
734
- {
735
- Assert.AreEqual(previous + 1, received[j]);
736
- }
737
- for (int j = priority + 1; j < received.Length; ++j)
738
- {
739
- Assert.AreEqual(previous, received[j]);
740
- }
741
- },
742
- priority: priority
743
- );
744
- }
745
-
746
- SimpleTargetedMessage message = new();
747
- const int numRuns = 100;
748
- for (int i = 0; i < numRuns; ++i)
749
- {
750
- // Should do something
751
- message.EmitGameObjectTargeted(test);
752
- // Should do nothing
753
- message.EmitComponentTargeted(component);
754
- }
755
-
756
- Assert.AreEqual(
757
- 1,
758
- received.Distinct().Count(),
759
- "Expected received to be uniform, found: [{0}].",
760
- string.Join(",", received.Distinct().OrderBy(x => x))
761
- );
762
-
763
- Assert.AreEqual(numRuns * 2, received.Distinct().Single());
764
- yield break;
765
- }
766
-
767
- [UnityTest]
768
- public IEnumerator PriorityComponent()
769
- {
770
- GameObject test = new(
771
- nameof(PriorityComponent) + "1",
772
- typeof(EmptyMessageAwareComponent)
773
- );
774
- _spawned.Add(test);
775
-
776
- int[] received = new int[100];
777
- EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
778
- MessageRegistrationToken token = GetToken(component);
779
- for (int i = 0; i < received.Length; ++i)
780
- {
781
- int priority = i;
782
- token.RegisterComponentTargeted(
783
- component,
784
- (ref SimpleTargetedMessage _) =>
785
- {
786
- int previous = received[priority]++;
787
- for (int j = priority - 1; j >= 0; --j)
788
- {
789
- Assert.AreEqual(previous + 1, received[j]);
790
- }
791
- for (int j = priority + 1; j < received.Length; ++j)
792
- {
793
- Assert.AreEqual(previous, received[j]);
794
- }
795
- },
796
- priority: priority
797
- );
798
- token.RegisterComponentTargetedPostProcessor(
799
- component,
800
- (ref SimpleTargetedMessage _) =>
801
- {
802
- int previous = received[priority]++;
803
- Assert.AreEqual(1, previous % 2);
804
- for (int j = priority - 1; j >= 0; --j)
805
- {
806
- Assert.AreEqual(previous + 1, received[j]);
807
- }
808
- for (int j = priority + 1; j < received.Length; ++j)
809
- {
810
- Assert.AreEqual(previous, received[j]);
811
- }
812
- },
813
- priority: priority
814
- );
815
- }
816
-
817
- SimpleTargetedMessage message = new();
818
- const int numRuns = 100;
819
- for (int i = 0; i < numRuns; ++i)
820
- {
821
- // Should do something
822
- message.EmitComponentTargeted(component);
823
- // Should do nothing
824
- message.EmitGameObjectTargeted(test);
825
- }
826
-
827
- Assert.AreEqual(
828
- 1,
829
- received.Distinct().Count(),
830
- "Expected received to be uniform, found: [{0}].",
831
- string.Join(",", received.Distinct().OrderBy(x => x))
832
- );
833
-
834
- Assert.AreEqual(numRuns * 2, received.Distinct().Single());
835
- yield break;
836
- }
837
-
838
- [UnityTest]
839
- public IEnumerator Interceptor()
840
- {
841
- GameObject test = new(nameof(Interceptor), typeof(EmptyMessageAwareComponent));
842
- _spawned.Add(test);
843
-
844
- int[] received = new int[100];
845
- EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
846
- MessageRegistrationToken token = GetToken(component);
847
- for (int i = 0; i < received.Length; ++i)
848
- {
849
- int priority = i;
850
- token.RegisterTargetedInterceptor(
851
- (ref InstanceId source, ref SimpleTargetedMessage _) =>
852
- {
853
- int previous = received[priority]++;
854
- for (int j = priority - 1; j >= 0; --j)
855
- {
856
- Assert.AreEqual(previous + 1, received[j]);
857
- }
858
- for (int j = priority + 1; j < received.Length; ++j)
859
- {
860
- Assert.AreEqual(previous, received[j]);
861
- }
862
-
863
- return true;
864
- },
865
- priority: priority
866
- );
867
- }
868
-
869
- SimpleTargetedMessage message = new();
870
- const int numRuns = 100;
871
- for (int i = 0; i < numRuns; ++i)
872
- {
873
- message.EmitComponentTargeted(component);
874
- message.EmitGameObjectTargeted(test);
875
- }
876
-
877
- Assert.AreEqual(
878
- 1,
879
- received.Distinct().Count(),
880
- "Expected received to be uniform, found: [{0}].",
881
- string.Join(",", received.Distinct().OrderBy(x => x))
882
- );
883
-
884
- Assert.AreEqual(numRuns * 2, received.Distinct().Single());
885
- yield break;
886
- }
887
- }
888
- }
1
+ namespace DxMessaging.Tests.Runtime.Core
2
+ {
3
+ using System.Collections;
4
+ using System.Linq;
5
+ using DxMessaging.Core;
6
+ using DxMessaging.Core.Extensions;
7
+ using DxMessaging.Core.Messages;
8
+ using NUnit.Framework;
9
+ using Scripts.Components;
10
+ using Scripts.Messages;
11
+ using UnityEngine;
12
+ using UnityEngine.TestTools;
13
+
14
+ public sealed class TargetedTests : MessagingTestBase
15
+ {
16
+ [UnityTest]
17
+ public IEnumerator SimpleGameObjectTargetedNormal()
18
+ {
19
+ GameObject test1 = new(
20
+ nameof(SimpleGameObjectTargetedNormal) + "1",
21
+ typeof(EmptyMessageAwareComponent)
22
+ );
23
+ _spawned.Add(test1);
24
+ GameObject test2 = new(
25
+ nameof(SimpleGameObjectTargetedNormal) + "2",
26
+ typeof(EmptyMessageAwareComponent)
27
+ );
28
+ _spawned.Add(test2);
29
+ EmptyMessageAwareComponent component1 =
30
+ test1.GetComponent<EmptyMessageAwareComponent>();
31
+ EmptyMessageAwareComponent component2 =
32
+ test2.GetComponent<EmptyMessageAwareComponent>();
33
+
34
+ int test1TargetedCount = 0;
35
+ int test2TargetedCount = 0;
36
+
37
+ MessageRegistrationToken token1 = GetToken(component1);
38
+ MessageRegistrationToken token2 = GetToken(component2);
39
+
40
+ _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(
41
+ test1,
42
+ _ => ++test1TargetedCount
43
+ );
44
+ _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(
45
+ test2,
46
+ _ => ++test2TargetedCount
47
+ );
48
+
49
+ SimpleTargetedMessage message = new();
50
+ message.EmitGameObjectTargeted(test1);
51
+ Assert.AreEqual(1, test1TargetedCount);
52
+ Assert.AreEqual(0, test2TargetedCount);
53
+
54
+ message.EmitGameObjectTargeted(test2);
55
+ Assert.AreEqual(1, test1TargetedCount);
56
+ Assert.AreEqual(1, test2TargetedCount);
57
+
58
+ GameObject test3 = new(nameof(SimpleGameObjectTargetedNormal) + "3");
59
+ _spawned.Add(test3);
60
+ message.EmitGameObjectTargeted(test3);
61
+ Assert.AreEqual(1, test1TargetedCount);
62
+ Assert.AreEqual(1, test2TargetedCount);
63
+
64
+ _ = test3.AddComponent<EmptyMessageAwareComponent>();
65
+ message.EmitGameObjectTargeted(test3);
66
+ Assert.AreEqual(1, test1TargetedCount);
67
+ Assert.AreEqual(1, test2TargetedCount);
68
+
69
+ for (int i = 0; i < 100; ++i)
70
+ {
71
+ message.EmitGameObjectTargeted(test1);
72
+ Assert.AreEqual(2 + i, test1TargetedCount);
73
+ Assert.AreEqual(1 + i, test2TargetedCount);
74
+
75
+ message.EmitGameObjectTargeted(test2);
76
+ Assert.AreEqual(2 + i, test1TargetedCount);
77
+ Assert.AreEqual(2 + i, test2TargetedCount);
78
+ }
79
+
80
+ yield break;
81
+ }
82
+
83
+ [UnityTest]
84
+ public IEnumerator SimpleGameObjectTargetedNoCopy()
85
+ {
86
+ GameObject test1 = new(
87
+ nameof(SimpleGameObjectTargetedNoCopy) + "1",
88
+ typeof(EmptyMessageAwareComponent)
89
+ );
90
+ _spawned.Add(test1);
91
+ GameObject test2 = new(
92
+ nameof(SimpleGameObjectTargetedNoCopy) + "2",
93
+ typeof(EmptyMessageAwareComponent)
94
+ );
95
+ _spawned.Add(test2);
96
+ EmptyMessageAwareComponent component1 =
97
+ test1.GetComponent<EmptyMessageAwareComponent>();
98
+ EmptyMessageAwareComponent component2 =
99
+ test2.GetComponent<EmptyMessageAwareComponent>();
100
+
101
+ int test1TargetedCount = 0;
102
+ void Test1Receive(ref SimpleTargetedMessage message)
103
+ {
104
+ ++test1TargetedCount;
105
+ }
106
+
107
+ int test2TargetedCount = 0;
108
+ void Test2Receive(ref SimpleTargetedMessage message)
109
+ {
110
+ ++test2TargetedCount;
111
+ }
112
+
113
+ MessageRegistrationToken token1 = GetToken(component1);
114
+ MessageRegistrationToken token2 = GetToken(component2);
115
+
116
+ _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(test1, Test1Receive);
117
+ _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(test2, Test2Receive);
118
+
119
+ SimpleTargetedMessage message = new();
120
+ message.EmitGameObjectTargeted(test1);
121
+ Assert.AreEqual(1, test1TargetedCount);
122
+ Assert.AreEqual(0, test2TargetedCount);
123
+
124
+ message.EmitGameObjectTargeted(test2);
125
+ Assert.AreEqual(1, test1TargetedCount);
126
+ Assert.AreEqual(1, test2TargetedCount);
127
+
128
+ GameObject test3 = new(nameof(SimpleGameObjectTargetedNoCopy) + "3");
129
+ message.EmitGameObjectTargeted(test3);
130
+ Assert.AreEqual(1, test1TargetedCount);
131
+ Assert.AreEqual(1, test2TargetedCount);
132
+
133
+ _ = test3.AddComponent<EmptyMessageAwareComponent>();
134
+ _spawned.Add(test3);
135
+ message.EmitGameObjectTargeted(test3);
136
+ Assert.AreEqual(1, test1TargetedCount);
137
+ Assert.AreEqual(1, test2TargetedCount);
138
+
139
+ for (int i = 0; i < 100; ++i)
140
+ {
141
+ message.EmitGameObjectTargeted(test1);
142
+ Assert.AreEqual(2 + i, test1TargetedCount);
143
+ Assert.AreEqual(1 + i, test2TargetedCount);
144
+
145
+ message.EmitGameObjectTargeted(test2);
146
+ Assert.AreEqual(2 + i, test1TargetedCount);
147
+ Assert.AreEqual(2 + i, test2TargetedCount);
148
+ }
149
+ yield break;
150
+ }
151
+
152
+ [UnityTest]
153
+ public IEnumerator SimpleGameObjectTargetedDualMode()
154
+ {
155
+ GameObject test1 = new(
156
+ nameof(SimpleGameObjectTargetedDualMode) + "1",
157
+ typeof(EmptyMessageAwareComponent)
158
+ );
159
+ _spawned.Add(test1);
160
+ GameObject test2 = new(
161
+ nameof(SimpleGameObjectTargetedDualMode) + "2",
162
+ typeof(EmptyMessageAwareComponent)
163
+ );
164
+ _spawned.Add(test2);
165
+ EmptyMessageAwareComponent component1 =
166
+ test1.GetComponent<EmptyMessageAwareComponent>();
167
+ EmptyMessageAwareComponent component2 =
168
+ test2.GetComponent<EmptyMessageAwareComponent>();
169
+
170
+ int test1ReceiveCount = 0;
171
+ void Test1Receive(ref SimpleTargetedMessage message)
172
+ {
173
+ ++test1ReceiveCount;
174
+ }
175
+
176
+ int test2ReceiveCount = 0;
177
+ void Test2Receive(ref SimpleTargetedMessage message)
178
+ {
179
+ ++test2ReceiveCount;
180
+ }
181
+
182
+ MessageRegistrationToken token1 = GetToken(component1);
183
+ MessageRegistrationToken token2 = GetToken(component2);
184
+
185
+ _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(test1, Test1Receive);
186
+ _ = token1.RegisterGameObjectTargeted<SimpleTargetedMessage>(
187
+ test1,
188
+ _ => ++test1ReceiveCount
189
+ );
190
+ _ = token2.RegisterGameObjectTargeted<SimpleTargetedMessage>(test2, Test2Receive);
191
+
192
+ SimpleTargetedMessage message = new();
193
+ message.EmitGameObjectTargeted(test1);
194
+ Assert.AreEqual(2, test1ReceiveCount);
195
+ Assert.AreEqual(0, test2ReceiveCount);
196
+
197
+ message.EmitGameObjectTargeted(test2);
198
+ Assert.AreEqual(2, test1ReceiveCount);
199
+ Assert.AreEqual(1, test2ReceiveCount);
200
+
201
+ GameObject test3 = new(nameof(SimpleGameObjectTargetedDualMode) + "3");
202
+ _spawned.Add(test3);
203
+ message.EmitGameObjectTargeted(test3);
204
+ Assert.AreEqual(2, test1ReceiveCount);
205
+ Assert.AreEqual(1, test2ReceiveCount);
206
+
207
+ _ = test3.AddComponent<EmptyMessageAwareComponent>();
208
+ message.EmitGameObjectTargeted(test3);
209
+ Assert.AreEqual(2, test1ReceiveCount);
210
+ Assert.AreEqual(1, test2ReceiveCount);
211
+
212
+ for (int i = 0; i < 100; ++i)
213
+ {
214
+ message.EmitGameObjectTargeted(test1);
215
+ Assert.AreEqual(2 + (1 + i) * 2, test1ReceiveCount);
216
+ Assert.AreEqual(1 + i, test2ReceiveCount);
217
+
218
+ message.EmitGameObjectTargeted(test2);
219
+ Assert.AreEqual(2 + (1 + i) * 2, test1ReceiveCount);
220
+ Assert.AreEqual(2 + i, test2ReceiveCount);
221
+ }
222
+ yield break;
223
+ }
224
+
225
+ [UnityTest]
226
+ public IEnumerator SimpleComponentTargetedNormal()
227
+ {
228
+ GameObject test1 = new(
229
+ nameof(SimpleComponentTargetedNormal) + "1",
230
+ typeof(EmptyMessageAwareComponent)
231
+ );
232
+ _spawned.Add(test1);
233
+ GameObject test2 = new(
234
+ nameof(SimpleComponentTargetedNormal) + "3",
235
+ typeof(EmptyMessageAwareComponent)
236
+ );
237
+ _spawned.Add(test2);
238
+ EmptyMessageAwareComponent component1 =
239
+ test1.GetComponent<EmptyMessageAwareComponent>();
240
+ EmptyMessageAwareComponent component2 =
241
+ test2.GetComponent<EmptyMessageAwareComponent>();
242
+
243
+ int test1ReceiveCount = 0;
244
+ int test2ReceiveCount = 0;
245
+
246
+ MessageRegistrationToken token1 = GetToken(component1);
247
+ MessageRegistrationToken token2 = GetToken(component2);
248
+
249
+ _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(
250
+ component1,
251
+ _ => ++test1ReceiveCount
252
+ );
253
+ _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(
254
+ component2,
255
+ _ => ++test2ReceiveCount
256
+ );
257
+
258
+ SimpleTargetedMessage message = new();
259
+ message.EmitComponentTargeted(component1);
260
+ Assert.AreEqual(1, test1ReceiveCount);
261
+ Assert.AreEqual(0, test2ReceiveCount);
262
+
263
+ message.EmitComponentTargeted(component2);
264
+ Assert.AreEqual(1, test1ReceiveCount);
265
+ Assert.AreEqual(1, test2ReceiveCount);
266
+
267
+ GameObject test3 = new(nameof(SimpleComponentTargetedNormal) + "3");
268
+ _spawned.Add(test3);
269
+ message.EmitComponentTargeted(test3.transform);
270
+ Assert.AreEqual(1, test1ReceiveCount);
271
+ Assert.AreEqual(1, test2ReceiveCount);
272
+
273
+ EmptyMessageAwareComponent component3 =
274
+ test3.AddComponent<EmptyMessageAwareComponent>();
275
+ message.EmitComponentTargeted(component3);
276
+ Assert.AreEqual(1, test1ReceiveCount);
277
+ Assert.AreEqual(1, test2ReceiveCount);
278
+
279
+ for (int i = 0; i < 100; ++i)
280
+ {
281
+ message.EmitComponentTargeted(component1);
282
+ Assert.AreEqual(2 + i, test1ReceiveCount);
283
+ Assert.AreEqual(1 + i, test2ReceiveCount);
284
+
285
+ message.EmitComponentTargeted(component2);
286
+ Assert.AreEqual(2 + i, test1ReceiveCount);
287
+ Assert.AreEqual(2 + i, test2ReceiveCount);
288
+ }
289
+
290
+ yield break;
291
+ }
292
+
293
+ [UnityTest]
294
+ public IEnumerator SimpleComponentTargetedNoCopy()
295
+ {
296
+ GameObject test1 = new(
297
+ nameof(SimpleComponentTargetedNoCopy) + "1",
298
+ typeof(EmptyMessageAwareComponent)
299
+ );
300
+ _spawned.Add(test1);
301
+ GameObject test2 = new(
302
+ nameof(SimpleComponentTargetedNoCopy) + "2",
303
+ typeof(EmptyMessageAwareComponent)
304
+ );
305
+ _spawned.Add(test2);
306
+ EmptyMessageAwareComponent component1 =
307
+ test1.GetComponent<EmptyMessageAwareComponent>();
308
+ EmptyMessageAwareComponent component2 =
309
+ test2.GetComponent<EmptyMessageAwareComponent>();
310
+
311
+ int test1ReceiveCount = 0;
312
+ void Test1Receive(ref SimpleTargetedMessage message)
313
+ {
314
+ ++test1ReceiveCount;
315
+ }
316
+
317
+ int test2ReceiveCount = 0;
318
+ void Test2Receive(ref SimpleTargetedMessage message)
319
+ {
320
+ ++test2ReceiveCount;
321
+ }
322
+
323
+ MessageRegistrationToken token1 = GetToken(component1);
324
+ MessageRegistrationToken token2 = GetToken(component2);
325
+
326
+ _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(component1, Test1Receive);
327
+ _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(component2, Test2Receive);
328
+
329
+ SimpleTargetedMessage message = new();
330
+ message.EmitComponentTargeted(component1);
331
+ Assert.AreEqual(1, test1ReceiveCount);
332
+ Assert.AreEqual(0, test2ReceiveCount);
333
+
334
+ message.EmitComponentTargeted(component2);
335
+ Assert.AreEqual(1, test1ReceiveCount);
336
+ Assert.AreEqual(1, test2ReceiveCount);
337
+
338
+ GameObject test3 = new(nameof(SimpleComponentTargetedNoCopy) + "3");
339
+ _spawned.Add(test3);
340
+ message.EmitComponentTargeted(test3.transform);
341
+ Assert.AreEqual(1, test1ReceiveCount);
342
+ Assert.AreEqual(1, test2ReceiveCount);
343
+
344
+ EmptyMessageAwareComponent component3 =
345
+ test3.AddComponent<EmptyMessageAwareComponent>();
346
+ message.EmitComponentTargeted(component3);
347
+ Assert.AreEqual(1, test1ReceiveCount);
348
+ Assert.AreEqual(1, test2ReceiveCount);
349
+
350
+ for (int i = 0; i < 100; ++i)
351
+ {
352
+ message.EmitComponentTargeted(component1);
353
+ Assert.AreEqual(2 + i, test1ReceiveCount);
354
+ Assert.AreEqual(1 + i, test2ReceiveCount);
355
+
356
+ message.EmitComponentTargeted(component2);
357
+ Assert.AreEqual(2 + i, test1ReceiveCount);
358
+ Assert.AreEqual(2 + i, test2ReceiveCount);
359
+ }
360
+
361
+ yield break;
362
+ }
363
+
364
+ [UnityTest]
365
+ public IEnumerator SimpleComponentTargetedDualMode()
366
+ {
367
+ GameObject test1 = new(
368
+ nameof(SimpleComponentTargetedDualMode) + "1",
369
+ typeof(EmptyMessageAwareComponent)
370
+ );
371
+ _spawned.Add(test1);
372
+ GameObject test2 = new(
373
+ nameof(SimpleComponentTargetedDualMode) + "2",
374
+ typeof(EmptyMessageAwareComponent)
375
+ );
376
+ _spawned.Add(test2);
377
+ EmptyMessageAwareComponent component1 =
378
+ test1.GetComponent<EmptyMessageAwareComponent>();
379
+ EmptyMessageAwareComponent component2 =
380
+ test2.GetComponent<EmptyMessageAwareComponent>();
381
+
382
+ int test1ReceiveCount = 0;
383
+ void Test1Receive(ref SimpleTargetedMessage message)
384
+ {
385
+ ++test1ReceiveCount;
386
+ }
387
+
388
+ int test2ReceiveCount = 0;
389
+ void Test2Receive(ref SimpleTargetedMessage message)
390
+ {
391
+ ++test2ReceiveCount;
392
+ }
393
+
394
+ MessageRegistrationToken token1 = GetToken(component1);
395
+ MessageRegistrationToken token2 = GetToken(component2);
396
+
397
+ _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(component1, Test1Receive);
398
+ _ = token1.RegisterComponentTargeted<SimpleTargetedMessage>(
399
+ component1,
400
+ _ => ++test1ReceiveCount
401
+ );
402
+ _ = token2.RegisterComponentTargeted<SimpleTargetedMessage>(component2, Test2Receive);
403
+
404
+ SimpleTargetedMessage message = new();
405
+ message.EmitComponentTargeted(component1);
406
+ Assert.AreEqual(2, test1ReceiveCount);
407
+ Assert.AreEqual(0, test2ReceiveCount);
408
+
409
+ message.EmitComponentTargeted(component2);
410
+ Assert.AreEqual(2, test1ReceiveCount);
411
+ Assert.AreEqual(1, test2ReceiveCount);
412
+
413
+ GameObject test3 = new(nameof(SimpleComponentTargetedDualMode) + "3");
414
+ _spawned.Add(test3);
415
+ message.EmitComponentTargeted(test3.transform);
416
+ Assert.AreEqual(2, test1ReceiveCount);
417
+ Assert.AreEqual(1, test2ReceiveCount);
418
+
419
+ EmptyMessageAwareComponent component3 =
420
+ test3.AddComponent<EmptyMessageAwareComponent>();
421
+ message.EmitComponentTargeted(component3);
422
+ Assert.AreEqual(2, test1ReceiveCount);
423
+ Assert.AreEqual(1, test2ReceiveCount);
424
+
425
+ for (int i = 0; i < 100; ++i)
426
+ {
427
+ message.EmitComponentTargeted(component1);
428
+ Assert.AreEqual(2 + (i + 1) * 2, test1ReceiveCount);
429
+ Assert.AreEqual(1 + i, test2ReceiveCount);
430
+
431
+ message.EmitComponentTargeted(component2);
432
+ Assert.AreEqual(2 + (i + 1) * 2, test1ReceiveCount);
433
+ Assert.AreEqual(2 + i, test2ReceiveCount);
434
+ }
435
+
436
+ yield break;
437
+ }
438
+
439
+ [UnityTest]
440
+ public IEnumerator SimpleTargetedWithoutTargetingNormal()
441
+ {
442
+ GameObject test1 = new(
443
+ nameof(SimpleTargetedWithoutTargetingNormal) + "1",
444
+ typeof(EmptyMessageAwareComponent)
445
+ );
446
+ _spawned.Add(test1);
447
+ GameObject test2 = new(
448
+ nameof(SimpleTargetedWithoutTargetingNormal) + "2",
449
+ typeof(EmptyMessageAwareComponent)
450
+ );
451
+ _spawned.Add(test2);
452
+ EmptyMessageAwareComponent component1 =
453
+ test1.GetComponent<EmptyMessageAwareComponent>();
454
+ EmptyMessageAwareComponent component2 =
455
+ test2.GetComponent<EmptyMessageAwareComponent>();
456
+
457
+ int test1ReceiveCount = 0;
458
+ void Test1Receive(InstanceId id, SimpleTargetedMessage message)
459
+ {
460
+ ++test1ReceiveCount;
461
+ }
462
+
463
+ int test2ReceiveCount = 0;
464
+ void Test2Receive(InstanceId id, SimpleTargetedMessage message)
465
+ {
466
+ ++test2ReceiveCount;
467
+ }
468
+
469
+ MessageRegistrationToken token1 = GetToken(component1);
470
+ MessageRegistrationToken token2 = GetToken(component2);
471
+
472
+ _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
473
+ _ = token2.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
474
+
475
+ SimpleTargetedMessage message = new();
476
+ message.EmitComponentTargeted(component1);
477
+ Assert.AreEqual(1, test1ReceiveCount);
478
+ Assert.AreEqual(1, test2ReceiveCount);
479
+
480
+ message.EmitComponentTargeted(component2);
481
+ Assert.AreEqual(2, test1ReceiveCount);
482
+ Assert.AreEqual(2, test2ReceiveCount);
483
+
484
+ GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingNormal) + "3");
485
+ _spawned.Add(test3);
486
+ message.EmitComponentTargeted(test3.transform);
487
+ Assert.AreEqual(3, test1ReceiveCount);
488
+ Assert.AreEqual(3, test2ReceiveCount);
489
+
490
+ EmptyMessageAwareComponent component3 =
491
+ test3.AddComponent<EmptyMessageAwareComponent>();
492
+ message.EmitComponentTargeted(component3);
493
+ Assert.AreEqual(4, test1ReceiveCount);
494
+ Assert.AreEqual(4, test2ReceiveCount);
495
+
496
+ for (int i = 0; i < 100; ++i)
497
+ {
498
+ message.EmitGameObjectTargeted(test1);
499
+ Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
500
+ Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
501
+
502
+ message.EmitComponentTargeted(component2);
503
+ Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
504
+ Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
505
+ }
506
+
507
+ yield break;
508
+ }
509
+
510
+ [UnityTest]
511
+ public IEnumerator SimpleTargetedWithoutTargetingNoCopy()
512
+ {
513
+ GameObject test1 = new(
514
+ nameof(SimpleTargetedWithoutTargetingNoCopy) + "1",
515
+ typeof(EmptyMessageAwareComponent)
516
+ );
517
+ _spawned.Add(test1);
518
+ GameObject test2 = new(
519
+ nameof(SimpleTargetedWithoutTargetingNoCopy) + "2",
520
+ typeof(EmptyMessageAwareComponent)
521
+ );
522
+ _spawned.Add(test2);
523
+ EmptyMessageAwareComponent component1 =
524
+ test1.GetComponent<EmptyMessageAwareComponent>();
525
+ EmptyMessageAwareComponent component2 =
526
+ test2.GetComponent<EmptyMessageAwareComponent>();
527
+
528
+ int test1ReceiveCount = 0;
529
+ void Test1Receive(ref InstanceId id, ref SimpleTargetedMessage message)
530
+ {
531
+ ++test1ReceiveCount;
532
+ }
533
+
534
+ int test2ReceiveCount = 0;
535
+ void Test2Receive(ref InstanceId id, ref SimpleTargetedMessage message)
536
+ {
537
+ ++test2ReceiveCount;
538
+ }
539
+
540
+ MessageRegistrationToken token1 = GetToken(component1);
541
+ MessageRegistrationToken token2 = GetToken(component2);
542
+
543
+ _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
544
+ _ = token2.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
545
+
546
+ SimpleTargetedMessage message = new();
547
+ message.EmitComponentTargeted(component1);
548
+ Assert.AreEqual(1, test1ReceiveCount);
549
+ Assert.AreEqual(1, test2ReceiveCount);
550
+
551
+ message.EmitComponentTargeted(component2);
552
+ Assert.AreEqual(2, test1ReceiveCount);
553
+ Assert.AreEqual(2, test2ReceiveCount);
554
+
555
+ GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingNoCopy) + "3");
556
+ _spawned.Add(test3);
557
+ message.EmitComponentTargeted(test3.transform);
558
+ Assert.AreEqual(3, test1ReceiveCount);
559
+ Assert.AreEqual(3, test2ReceiveCount);
560
+
561
+ EmptyMessageAwareComponent component3 =
562
+ test3.AddComponent<EmptyMessageAwareComponent>();
563
+ message.EmitComponentTargeted(component3);
564
+ Assert.AreEqual(4, test1ReceiveCount);
565
+ Assert.AreEqual(4, test2ReceiveCount);
566
+
567
+ for (int i = 0; i < 100; ++i)
568
+ {
569
+ message.EmitGameObjectTargeted(test1);
570
+ Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
571
+ Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
572
+
573
+ message.EmitComponentTargeted(component2);
574
+ Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
575
+ Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
576
+ }
577
+
578
+ yield break;
579
+ }
580
+
581
+ [UnityTest]
582
+ public IEnumerator SimpleTargetedWithoutTargetingDualMode()
583
+ {
584
+ GameObject test1 = new(
585
+ nameof(SimpleTargetedWithoutTargetingDualMode) + "1",
586
+ typeof(EmptyMessageAwareComponent)
587
+ );
588
+ _spawned.Add(test1);
589
+ GameObject test2 = new(
590
+ nameof(SimpleTargetedWithoutTargetingDualMode) + "2",
591
+ typeof(EmptyMessageAwareComponent)
592
+ );
593
+ _spawned.Add(test2);
594
+ EmptyMessageAwareComponent component1 =
595
+ test1.GetComponent<EmptyMessageAwareComponent>();
596
+ EmptyMessageAwareComponent component2 =
597
+ test2.GetComponent<EmptyMessageAwareComponent>();
598
+
599
+ int test1ReceiveCount = 0;
600
+ void Test1Receive(ref InstanceId id, ref SimpleTargetedMessage message)
601
+ {
602
+ ++test1ReceiveCount;
603
+ }
604
+
605
+ int test2ReceiveCount = 0;
606
+ void Test2Receive(InstanceId id, SimpleTargetedMessage message)
607
+ {
608
+ ++test2ReceiveCount;
609
+ }
610
+
611
+ // Assign them to the same token for simplicity
612
+ MessageRegistrationToken token1 = GetToken(component1);
613
+
614
+ _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test1Receive);
615
+ _ = token1.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Test2Receive);
616
+
617
+ SimpleTargetedMessage message = new();
618
+ message.EmitComponentTargeted(component1);
619
+ Assert.AreEqual(1, test1ReceiveCount);
620
+ Assert.AreEqual(1, test2ReceiveCount);
621
+
622
+ message.EmitComponentTargeted(component2);
623
+ Assert.AreEqual(2, test1ReceiveCount);
624
+ Assert.AreEqual(2, test2ReceiveCount);
625
+
626
+ GameObject test3 = new(nameof(SimpleTargetedWithoutTargetingDualMode) + "3");
627
+ _spawned.Add(test3);
628
+ message.EmitComponentTargeted(test3.transform);
629
+ Assert.AreEqual(3, test1ReceiveCount);
630
+ Assert.AreEqual(3, test2ReceiveCount);
631
+
632
+ EmptyMessageAwareComponent component3 =
633
+ test3.AddComponent<EmptyMessageAwareComponent>();
634
+ message.EmitComponentTargeted(component3);
635
+ Assert.AreEqual(4, test1ReceiveCount);
636
+ Assert.AreEqual(4, test2ReceiveCount);
637
+
638
+ for (int i = 0; i < 100; ++i)
639
+ {
640
+ message.EmitGameObjectTargeted(test1);
641
+ Assert.AreEqual(5 + (i * 2), test1ReceiveCount);
642
+ Assert.AreEqual(5 + (i * 2), test2ReceiveCount);
643
+
644
+ message.EmitComponentTargeted(component2);
645
+ Assert.AreEqual(4 + ((i + 1) * 2), test1ReceiveCount);
646
+ Assert.AreEqual(4 + ((i + 1) * 2), test2ReceiveCount);
647
+ }
648
+
649
+ yield break;
650
+ }
651
+
652
+ [UnityTest]
653
+ public IEnumerator TargetedUntyped()
654
+ {
655
+ GameObject test = new(
656
+ nameof(TargetedUntyped) + "1",
657
+ typeof(EmptyMessageAwareComponent)
658
+ );
659
+ _spawned.Add(test);
660
+
661
+ int gameObjectCount = 0;
662
+ int componentCount = 0;
663
+
664
+ void ReceiveGameObject(ref SimpleTargetedMessage message)
665
+ {
666
+ ++gameObjectCount;
667
+ }
668
+
669
+ void ReceiveComponent(ref SimpleTargetedMessage message)
670
+ {
671
+ ++componentCount;
672
+ }
673
+
674
+ EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
675
+ MessageRegistrationToken token = GetToken(component);
676
+ token.RegisterGameObjectTargeted<SimpleTargetedMessage>(test, ReceiveGameObject);
677
+ token.RegisterComponentTargeted<SimpleTargetedMessage>(component, ReceiveComponent);
678
+
679
+ ITargetedMessage message = new SimpleTargetedMessage();
680
+ message.EmitComponentTargeted(component);
681
+ Assert.AreEqual(1, componentCount);
682
+ Assert.AreEqual(0, gameObjectCount);
683
+ message.EmitGameObjectTargeted(test);
684
+ Assert.AreEqual(1, componentCount);
685
+ Assert.AreEqual(1, gameObjectCount);
686
+ message.EmitComponentTargeted(component);
687
+ Assert.AreEqual(2, componentCount);
688
+ Assert.AreEqual(1, gameObjectCount);
689
+ message.EmitGameObjectTargeted(test);
690
+ Assert.AreEqual(2, componentCount);
691
+ Assert.AreEqual(2, gameObjectCount);
692
+
693
+ yield break;
694
+ }
695
+
696
+ [UnityTest]
697
+ public IEnumerator PriorityGameObject()
698
+ {
699
+ GameObject test = new(
700
+ nameof(PriorityGameObject) + "1",
701
+ typeof(EmptyMessageAwareComponent)
702
+ );
703
+ _spawned.Add(test);
704
+
705
+ int[] received = new int[100];
706
+ EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
707
+ MessageRegistrationToken token = GetToken(component);
708
+ for (int i = 0; i < received.Length; ++i)
709
+ {
710
+ int priority = i;
711
+ token.RegisterGameObjectTargeted(
712
+ test,
713
+ (ref SimpleTargetedMessage _) =>
714
+ {
715
+ int previous = received[priority]++;
716
+ for (int j = priority - 1; j >= 0; --j)
717
+ {
718
+ Assert.AreEqual(previous + 1, received[j]);
719
+ }
720
+ for (int j = priority + 1; j < received.Length; ++j)
721
+ {
722
+ Assert.AreEqual(previous, received[j]);
723
+ }
724
+ },
725
+ priority: priority
726
+ );
727
+ token.RegisterGameObjectTargetedPostProcessor(
728
+ test,
729
+ (ref SimpleTargetedMessage _) =>
730
+ {
731
+ int previous = received[priority]++;
732
+ Assert.AreEqual(1, previous % 2);
733
+ for (int j = priority - 1; j >= 0; --j)
734
+ {
735
+ Assert.AreEqual(previous + 1, received[j]);
736
+ }
737
+ for (int j = priority + 1; j < received.Length; ++j)
738
+ {
739
+ Assert.AreEqual(previous, received[j]);
740
+ }
741
+ },
742
+ priority: priority
743
+ );
744
+ }
745
+
746
+ SimpleTargetedMessage message = new();
747
+ const int numRuns = 100;
748
+ for (int i = 0; i < numRuns; ++i)
749
+ {
750
+ // Should do something
751
+ message.EmitGameObjectTargeted(test);
752
+ // Should do nothing
753
+ message.EmitComponentTargeted(component);
754
+ }
755
+
756
+ Assert.AreEqual(
757
+ 1,
758
+ received.Distinct().Count(),
759
+ "Expected received to be uniform, found: [{0}].",
760
+ string.Join(",", received.Distinct().OrderBy(x => x))
761
+ );
762
+
763
+ Assert.AreEqual(numRuns * 2, received.Distinct().Single());
764
+ yield break;
765
+ }
766
+
767
+ [UnityTest]
768
+ public IEnumerator PriorityComponent()
769
+ {
770
+ GameObject test = new(
771
+ nameof(PriorityComponent) + "1",
772
+ typeof(EmptyMessageAwareComponent)
773
+ );
774
+ _spawned.Add(test);
775
+
776
+ int[] received = new int[100];
777
+ EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
778
+ MessageRegistrationToken token = GetToken(component);
779
+ for (int i = 0; i < received.Length; ++i)
780
+ {
781
+ int priority = i;
782
+ token.RegisterComponentTargeted(
783
+ component,
784
+ (ref SimpleTargetedMessage _) =>
785
+ {
786
+ int previous = received[priority]++;
787
+ for (int j = priority - 1; j >= 0; --j)
788
+ {
789
+ Assert.AreEqual(previous + 1, received[j]);
790
+ }
791
+ for (int j = priority + 1; j < received.Length; ++j)
792
+ {
793
+ Assert.AreEqual(previous, received[j]);
794
+ }
795
+ },
796
+ priority: priority
797
+ );
798
+ token.RegisterComponentTargetedPostProcessor(
799
+ component,
800
+ (ref SimpleTargetedMessage _) =>
801
+ {
802
+ int previous = received[priority]++;
803
+ Assert.AreEqual(1, previous % 2);
804
+ for (int j = priority - 1; j >= 0; --j)
805
+ {
806
+ Assert.AreEqual(previous + 1, received[j]);
807
+ }
808
+ for (int j = priority + 1; j < received.Length; ++j)
809
+ {
810
+ Assert.AreEqual(previous, received[j]);
811
+ }
812
+ },
813
+ priority: priority
814
+ );
815
+ }
816
+
817
+ SimpleTargetedMessage message = new();
818
+ const int numRuns = 100;
819
+ for (int i = 0; i < numRuns; ++i)
820
+ {
821
+ // Should do something
822
+ message.EmitComponentTargeted(component);
823
+ // Should do nothing
824
+ message.EmitGameObjectTargeted(test);
825
+ }
826
+
827
+ Assert.AreEqual(
828
+ 1,
829
+ received.Distinct().Count(),
830
+ "Expected received to be uniform, found: [{0}].",
831
+ string.Join(",", received.Distinct().OrderBy(x => x))
832
+ );
833
+
834
+ Assert.AreEqual(numRuns * 2, received.Distinct().Single());
835
+ yield break;
836
+ }
837
+
838
+ [UnityTest]
839
+ public IEnumerator Interceptor()
840
+ {
841
+ GameObject test = new(nameof(Interceptor), typeof(EmptyMessageAwareComponent));
842
+ _spawned.Add(test);
843
+
844
+ int[] received = new int[100];
845
+ EmptyMessageAwareComponent component = test.GetComponent<EmptyMessageAwareComponent>();
846
+ MessageRegistrationToken token = GetToken(component);
847
+ for (int i = 0; i < received.Length; ++i)
848
+ {
849
+ int priority = i;
850
+ token.RegisterTargetedInterceptor(
851
+ (ref InstanceId source, ref SimpleTargetedMessage _) =>
852
+ {
853
+ int previous = received[priority]++;
854
+ for (int j = priority - 1; j >= 0; --j)
855
+ {
856
+ Assert.AreEqual(previous + 1, received[j]);
857
+ }
858
+ for (int j = priority + 1; j < received.Length; ++j)
859
+ {
860
+ Assert.AreEqual(previous, received[j]);
861
+ }
862
+
863
+ return true;
864
+ },
865
+ priority: priority
866
+ );
867
+ }
868
+
869
+ SimpleTargetedMessage message = new();
870
+ const int numRuns = 100;
871
+ for (int i = 0; i < numRuns; ++i)
872
+ {
873
+ message.EmitComponentTargeted(component);
874
+ message.EmitGameObjectTargeted(test);
875
+ }
876
+
877
+ Assert.AreEqual(
878
+ 1,
879
+ received.Distinct().Count(),
880
+ "Expected received to be uniform, found: [{0}].",
881
+ string.Join(",", received.Distinct().OrderBy(x => x))
882
+ );
883
+
884
+ Assert.AreEqual(numRuns * 2, received.Distinct().Single());
885
+ yield break;
886
+ }
887
+ }
888
+ }