com.wallstop-studios.dxmessaging 2.0.0-rc11 → 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 (107) 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 -146
  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 -363
  17. package/README.md.meta +7 -7
  18. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs +7 -9
  19. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs.meta +2 -2
  20. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +7 -10
  21. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
  22. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +7 -10
  23. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
  24. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +7 -10
  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 -275
  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 -100
  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 -26
  52. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  53. package/Runtime/Core/Messages/IUntargetedMessage.cs +27 -26
  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 -71
  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 -75
  67. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs.meta +11 -11
  68. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs +94 -77
  69. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs.meta +2 -2
  70. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs +94 -77
  71. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs.meta +2 -2
  72. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs +94 -78
  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 -169
  83. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -11
  84. package/Tests/Runtime/Core/MessagingTestBase.cs +185 -164
  85. package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -11
  86. package/Tests/Runtime/Core/NominalTests.cs +1740 -1518
  87. package/Tests/Runtime/Core/PostProcessorTests.cs +1236 -849
  88. package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -11
  89. package/Tests/Runtime/Core/RegistrationTests.cs +1266 -995
  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 -140
  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.asmdef +22 -22
  103. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -7
  104. package/Tests.meta +8 -8
  105. package/Third Party Notices.md.meta +7 -7
  106. package/package.json +36 -36
  107. package/package.json.meta +7 -7
@@ -1,995 +1,1266 @@
1
- namespace DxMessaging.Tests.Runtime.Core
2
- {
3
- using System;
4
- using System.Collections;
5
- using System.Collections.Generic;
6
- using System.Linq;
7
- using DxMessaging.Core;
8
- using DxMessaging.Core.Extensions;
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
-
16
- public sealed class RegistrationTests : MessagingTestBase
17
- {
18
- private GameObject _test;
19
- private EmptyMessageAwareComponent _component;
20
- private MessageRegistrationToken _token;
21
-
22
- [UnitySetUp]
23
- public override IEnumerator UnitySetup()
24
- {
25
- IEnumerator baseEnumerator = base.UnitySetup();
26
- while (baseEnumerator.MoveNext())
27
- {
28
- yield return baseEnumerator.Current;
29
- }
30
-
31
- _test = new(nameof(RegistrationTests), typeof(EmptyMessageAwareComponent));
32
- _spawned.Add(_test);
33
- _component = _test.GetComponent<EmptyMessageAwareComponent>();
34
- _token = GetToken(_component);
35
- }
36
-
37
- [UnityTest]
38
- public IEnumerator UntargetedNormal()
39
- {
40
- int count = 0;
41
-
42
- void Handle(SimpleUntargetedMessage message)
43
- {
44
- ++count;
45
- }
46
-
47
- SimpleUntargetedMessage message = new();
48
- RunRegistrationTest(
49
- token => token.RegisterUntargeted<SimpleUntargetedMessage>(Handle), i =>
50
- {
51
- Assert.AreEqual(i, count);
52
- message.EmitUntargeted();
53
- }, i =>
54
- {
55
- Assert.AreEqual(i, count);
56
- message.EmitUntargeted();
57
- Assert.AreEqual(i + 1, count);
58
- }, () =>
59
- {
60
- message.EmitUntargeted();
61
- Assert.AreEqual(0, count);
62
- }, () => { count = 0; });
63
- yield break;
64
- }
65
-
66
- [UnityTest]
67
- public IEnumerator UntargetedNoCopy()
68
- {
69
- int count = 0;
70
-
71
- void Handle(ref SimpleUntargetedMessage message)
72
- {
73
- ++count;
74
- }
75
-
76
- SimpleUntargetedMessage message = new();
77
- RunRegistrationTest(
78
- token => token.RegisterUntargeted<SimpleUntargetedMessage>(Handle), i =>
79
- {
80
- Assert.AreEqual(i, count);
81
- message.EmitUntargeted();
82
- }, i =>
83
- {
84
- Assert.AreEqual(i, count);
85
- message.EmitUntargeted();
86
- Assert.AreEqual(i + 1, count);
87
- }, () =>
88
- {
89
- message.EmitUntargeted();
90
- Assert.AreEqual(0, count);
91
- }, () => { count = 0; });
92
- yield break;
93
- }
94
-
95
- [UnityTest]
96
- public IEnumerator UntargetedPostProcessor()
97
- {
98
- int count = 0;
99
-
100
- void Handle(ref SimpleUntargetedMessage message)
101
- {
102
- ++count;
103
- }
104
-
105
- SimpleUntargetedMessage message = new();
106
- RunRegistrationTest(
107
- token => token.RegisterUntargetedPostProcessor<SimpleUntargetedMessage>(Handle), i =>
108
- {
109
- Assert.AreEqual(i, count);
110
- message.EmitUntargeted();
111
- }, i =>
112
- {
113
- Assert.AreEqual(i, count);
114
- message.EmitUntargeted();
115
- Assert.AreEqual(i + 1, count);
116
- }, () =>
117
- {
118
- message.EmitUntargeted();
119
- Assert.AreEqual(0, count);
120
- }, () => { count = 0; });
121
- yield break;
122
- }
123
-
124
- [UnityTest]
125
- public IEnumerator UntargetedInterceptor()
126
- {
127
- int count = 0;
128
-
129
- bool Intercept(ref SimpleUntargetedMessage message)
130
- {
131
- ++count;
132
- return true;
133
- }
134
-
135
- SimpleUntargetedMessage message = new();
136
- RunRegistrationTest(
137
- token => token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(Intercept), i =>
138
- {
139
- Assert.AreEqual(i, count);
140
- message.EmitUntargeted();
141
- }, i =>
142
- {
143
- Assert.AreEqual(i, count);
144
- message.EmitUntargeted();
145
- Assert.AreEqual(i + 1, count);
146
- }, () =>
147
- {
148
- message.EmitUntargeted();
149
- Assert.AreEqual(0, count);
150
- }, () => { count = 0; });
151
- yield break;
152
- }
153
-
154
- [UnityTest]
155
- public IEnumerator GameObjectTargetedNormal()
156
- {
157
- int count = 0;
158
-
159
- void Handle(SimpleTargetedMessage message)
160
- {
161
- ++count;
162
- }
163
-
164
- SimpleTargetedMessage message = new();
165
- RunRegistrationTest(
166
- token => token.RegisterGameObjectTargeted<SimpleTargetedMessage>(_test, Handle), i =>
167
- {
168
- Assert.AreEqual(i, count);
169
- message.EmitGameObjectTargeted(_test);
170
- }, i =>
171
- {
172
- Assert.AreEqual(i, count);
173
- message.EmitGameObjectTargeted(_test);
174
- Assert.AreEqual(i + 1, count);
175
- }, () =>
176
- {
177
- message.EmitGameObjectTargeted(_test);
178
- message.EmitComponentTargeted(_component);
179
- Assert.AreEqual(0, count);
180
- }, () => { count = 0; });
181
- yield break;
182
- }
183
-
184
- [UnityTest]
185
- public IEnumerator GameObjectTargetedNoCopy()
186
- {
187
- int count = 0;
188
-
189
- void Handle(ref SimpleTargetedMessage message)
190
- {
191
- ++count;
192
- }
193
-
194
- SimpleTargetedMessage message = new();
195
- RunRegistrationTest(
196
- token => token.RegisterGameObjectTargeted<SimpleTargetedMessage>(_test, Handle), i =>
197
- {
198
- Assert.AreEqual(i, count);
199
- message.EmitGameObjectTargeted(_test);
200
- }, i =>
201
- {
202
- Assert.AreEqual(i, count);
203
- message.EmitGameObjectTargeted(_test);
204
- Assert.AreEqual(i + 1, count);
205
- }, () =>
206
- {
207
- message.EmitGameObjectTargeted(_test);
208
- message.EmitComponentTargeted(_component);
209
- Assert.AreEqual(0, count);
210
- }, () => { count = 0; });
211
- yield break;
212
- }
213
-
214
- [UnityTest]
215
- public IEnumerator GameObjectTargetedPostProcessor()
216
- {
217
- int count = 0;
218
-
219
- void Handle(ref SimpleTargetedMessage message)
220
- {
221
- ++count;
222
- }
223
-
224
- SimpleTargetedMessage message = new();
225
- RunRegistrationTest(
226
- token => token.RegisterGameObjectTargetedPostProcessor<SimpleTargetedMessage>(_test, Handle), i =>
227
- {
228
- Assert.AreEqual(i, count);
229
- message.EmitGameObjectTargeted(_test);
230
- }, i =>
231
- {
232
- Assert.AreEqual(i, count);
233
- message.EmitGameObjectTargeted(_test);
234
- Assert.AreEqual(i + 1, count);
235
- }, () =>
236
- {
237
- message.EmitGameObjectTargeted(_test);
238
- message.EmitComponentTargeted(_component);
239
- Assert.AreEqual(0, count);
240
- }, () => { count = 0; });
241
- yield break;
242
- }
243
-
244
- [UnityTest]
245
- public IEnumerator ComponentTargetedNormal()
246
- {
247
- int count = 0;
248
-
249
- void Handle(SimpleTargetedMessage message)
250
- {
251
- ++count;
252
- }
253
-
254
- SimpleTargetedMessage message = new();
255
- RunRegistrationTest(
256
- token => token.RegisterComponentTargeted<SimpleTargetedMessage>(_component, Handle), i =>
257
- {
258
- Assert.AreEqual(i, count);
259
- message.EmitComponentTargeted(_component);
260
- }, i =>
261
- {
262
- Assert.AreEqual(i, count);
263
- message.EmitComponentTargeted(_component);
264
- Assert.AreEqual(i + 1, count);
265
- }, () =>
266
- {
267
- message.EmitGameObjectTargeted(_test);
268
- message.EmitComponentTargeted(_component);
269
- Assert.AreEqual(0, count);
270
- }, () => { count = 0; });
271
- yield break;
272
- }
273
-
274
- [UnityTest]
275
- public IEnumerator ComponentTargetedNoCopy()
276
- {
277
- int count = 0;
278
-
279
- void Handle(ref SimpleTargetedMessage message)
280
- {
281
- ++count;
282
- }
283
-
284
- SimpleTargetedMessage message = new();
285
- RunRegistrationTest(
286
- token => token.RegisterComponentTargeted<SimpleTargetedMessage>(_component, Handle), i =>
287
- {
288
- Assert.AreEqual(i, count);
289
- message.EmitComponentTargeted(_component);
290
- }, i =>
291
- {
292
- Assert.AreEqual(i, count);
293
- message.EmitComponentTargeted(_component);
294
- Assert.AreEqual(i + 1, count);
295
- }, () =>
296
- {
297
- message.EmitGameObjectTargeted(_test);
298
- message.EmitComponentTargeted(_component);
299
- Assert.AreEqual(0, count);
300
- }, () => { count = 0; });
301
- yield break;
302
- }
303
-
304
- [UnityTest]
305
- public IEnumerator ComponentTargetedPostProcessor()
306
- {
307
- int count = 0;
308
-
309
- void Handle(ref SimpleTargetedMessage message)
310
- {
311
- ++count;
312
- }
313
-
314
- SimpleTargetedMessage message = new();
315
- RunRegistrationTest(
316
- token => token.RegisterComponentTargetedPostProcessor<SimpleTargetedMessage>(_component, Handle), i =>
317
- {
318
- Assert.AreEqual(i, count);
319
- message.EmitComponentTargeted(_component);
320
- }, i =>
321
- {
322
- Assert.AreEqual(i, count);
323
- message.EmitComponentTargeted(_component);
324
- Assert.AreEqual(i + 1, count);
325
- }, () =>
326
- {
327
- message.EmitGameObjectTargeted(_test);
328
- message.EmitComponentTargeted(_component);
329
- Assert.AreEqual(0, count);
330
- }, () => { count = 0; });
331
- yield break;
332
- }
333
-
334
- [UnityTest]
335
- public IEnumerator TargetedInterceptor()
336
- {
337
- int count = 0;
338
-
339
- bool Intercept(ref InstanceId target, ref SimpleTargetedMessage message)
340
- {
341
- ++count;
342
- return true;
343
- }
344
-
345
- SimpleTargetedMessage message = new();
346
- RunRegistrationTest(
347
- token => token.RegisterTargetedInterceptor<SimpleTargetedMessage>(Intercept), i =>
348
- {
349
- Assert.AreEqual(i, count);
350
- message.EmitGameObjectTargeted(_test);
351
- }, i =>
352
- {
353
- Assert.AreEqual(i, count);
354
- message.EmitComponentTargeted(_component);
355
- Assert.AreEqual(i + 1, count);
356
- }, () =>
357
- {
358
- message.EmitGameObjectTargeted(_test);
359
- message.EmitComponentTargeted(_component);
360
- Assert.AreEqual(0, count);
361
- }, () => { count = 0; });
362
- yield break;
363
- }
364
-
365
- [UnityTest]
366
- public IEnumerator TargetedWithoutTargetingNormal()
367
- {
368
- int count = 0;
369
-
370
- void Handle(InstanceId target, SimpleTargetedMessage message)
371
- {
372
- ++count;
373
- }
374
-
375
- SimpleTargetedMessage message = new();
376
- RunRegistrationTest(
377
- token => token.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Handle), i =>
378
- {
379
- Assert.AreEqual(i, count);
380
- message.EmitGameObjectTargeted(_test);
381
- }, i =>
382
- {
383
- Assert.AreEqual(i, count);
384
- message.EmitComponentTargeted(_component);
385
- Assert.AreEqual(i + 1, count);
386
- }, () =>
387
- {
388
- message.EmitGameObjectTargeted(_test);
389
- message.EmitComponentTargeted(_component);
390
- Assert.AreEqual(0, count);
391
- }, () => { count = 0; });
392
- yield break;
393
- }
394
-
395
- [UnityTest]
396
- public IEnumerator TargetedWithoutTargetingNoCopy()
397
- {
398
- int count = 0;
399
-
400
- void Handle(ref InstanceId target, ref SimpleTargetedMessage message)
401
- {
402
- ++count;
403
- }
404
-
405
- SimpleTargetedMessage message = new();
406
- RunRegistrationTest(
407
- token => token.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Handle), i =>
408
- {
409
- Assert.AreEqual(i, count);
410
- message.EmitGameObjectTargeted(_test);
411
- }, i =>
412
- {
413
- Assert.AreEqual(i, count);
414
- message.EmitComponentTargeted(_component);
415
- Assert.AreEqual(i + 1, count);
416
- }, () =>
417
- {
418
- message.EmitGameObjectTargeted(_test);
419
- message.EmitComponentTargeted(_component);
420
- Assert.AreEqual(0, count);
421
- }, () => { count = 0; });
422
- yield break;
423
- }
424
-
425
- [UnityTest]
426
- public IEnumerator TargetedWithoutTargetingPostProcessorNormal()
427
- {
428
- int count = 0;
429
-
430
- void Handle(InstanceId target, SimpleTargetedMessage message)
431
- {
432
- ++count;
433
- }
434
-
435
- SimpleTargetedMessage message = new();
436
- RunRegistrationTest(
437
- token => token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(Handle), i =>
438
- {
439
- Assert.AreEqual(i, count);
440
- message.EmitGameObjectTargeted(_test);
441
- }, i =>
442
- {
443
- Assert.AreEqual(i, count);
444
- message.EmitComponentTargeted(_component);
445
- Assert.AreEqual(i + 1, count);
446
- }, () =>
447
- {
448
- message.EmitGameObjectTargeted(_test);
449
- message.EmitComponentTargeted(_component);
450
- Assert.AreEqual(0, count);
451
- }, () => { count = 0; });
452
- yield break;
453
- }
454
-
455
- [UnityTest]
456
- public IEnumerator TargetedWithoutTargetingPostProcessorNoCopy()
457
- {
458
- int count = 0;
459
-
460
- void Handle(ref InstanceId target, ref SimpleTargetedMessage message)
461
- {
462
- ++count;
463
- }
464
-
465
- SimpleTargetedMessage message = new();
466
- RunRegistrationTest(
467
- token => token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(Handle), i =>
468
- {
469
- Assert.AreEqual(i, count);
470
- message.EmitGameObjectTargeted(_test);
471
- }, i =>
472
- {
473
- Assert.AreEqual(i, count);
474
- message.EmitComponentTargeted(_component);
475
- Assert.AreEqual(i + 1, count);
476
- }, () =>
477
- {
478
- message.EmitGameObjectTargeted(_test);
479
- message.EmitComponentTargeted(_component);
480
- Assert.AreEqual(0, count);
481
- }, () => { count = 0; });
482
- yield break;
483
- }
484
-
485
- [UnityTest]
486
- public IEnumerator GameObjectBroadcastNormal()
487
- {
488
- int count = 0;
489
-
490
- void Handle(SimpleBroadcastMessage message)
491
- {
492
- ++count;
493
- }
494
-
495
- SimpleBroadcastMessage message = new();
496
- RunRegistrationTest(
497
- token => token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(_test, Handle), i =>
498
- {
499
- Assert.AreEqual(i, count);
500
- message.EmitGameObjectBroadcast(_test);
501
- }, i =>
502
- {
503
- Assert.AreEqual(i, count);
504
- message.EmitGameObjectBroadcast(_test);
505
- Assert.AreEqual(i + 1, count);
506
- }, () =>
507
- {
508
- message.EmitGameObjectBroadcast(_test);
509
- message.EmitComponentBroadcast(_component);
510
- Assert.AreEqual(0, count);
511
- }, () => { count = 0; });
512
- yield break;
513
- }
514
-
515
- [UnityTest]
516
- public IEnumerator GameObjectBroadcastNoCopy()
517
- {
518
- int count = 0;
519
-
520
- void Handle(ref SimpleBroadcastMessage message)
521
- {
522
- ++count;
523
- }
524
-
525
- SimpleBroadcastMessage message = new();
526
- RunRegistrationTest(
527
- token => token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(_test, Handle), i =>
528
- {
529
- Assert.AreEqual(i, count);
530
- message.EmitGameObjectBroadcast(_test);
531
- }, i =>
532
- {
533
- Assert.AreEqual(i, count);
534
- message.EmitGameObjectBroadcast(_test);
535
- Assert.AreEqual(i + 1, count);
536
- }, () =>
537
- {
538
- message.EmitGameObjectBroadcast(_test);
539
- message.EmitComponentBroadcast(_component);
540
- Assert.AreEqual(0, count);
541
- }, () => { count = 0; });
542
- yield break;
543
- }
544
-
545
- [UnityTest]
546
- public IEnumerator GameObjectBroadcastPostProcessor()
547
- {
548
- int count = 0;
549
-
550
- void Handle(ref SimpleBroadcastMessage message)
551
- {
552
- ++count;
553
- }
554
-
555
- SimpleBroadcastMessage message = new();
556
- RunRegistrationTest(
557
- token => token.RegisterGameObjectBroadcastPostProcessor<SimpleBroadcastMessage>(_test, Handle), i =>
558
- {
559
- Assert.AreEqual(i, count);
560
- message.EmitGameObjectBroadcast(_test);
561
- }, i =>
562
- {
563
- Assert.AreEqual(i, count);
564
- message.EmitGameObjectBroadcast(_test);
565
- Assert.AreEqual(i + 1, count);
566
- }, () =>
567
- {
568
- message.EmitGameObjectBroadcast(_test);
569
- message.EmitComponentBroadcast(_component);
570
- Assert.AreEqual(0, count);
571
- }, () => { count = 0; });
572
- yield break;
573
- }
574
-
575
- [UnityTest]
576
- public IEnumerator ComponentBroadcastNormal()
577
- {
578
- int count = 0;
579
-
580
- void Handle(SimpleBroadcastMessage message)
581
- {
582
- ++count;
583
- }
584
-
585
- SimpleBroadcastMessage message = new();
586
- RunRegistrationTest(
587
- token => token.RegisterComponentBroadcast<SimpleBroadcastMessage>(_component, Handle), i =>
588
- {
589
- Assert.AreEqual(i, count);
590
- message.EmitComponentBroadcast(_component);
591
- }, i =>
592
- {
593
- Assert.AreEqual(i, count);
594
- message.EmitComponentBroadcast(_component);
595
- Assert.AreEqual(i + 1, count);
596
- }, () =>
597
- {
598
- message.EmitGameObjectBroadcast(_test);
599
- message.EmitComponentBroadcast(_component);
600
- Assert.AreEqual(0, count);
601
- }, () => { count = 0; });
602
- yield break;
603
- }
604
-
605
- [UnityTest]
606
- public IEnumerator ComponentBroadcastNoCopy()
607
- {
608
- int count = 0;
609
-
610
- void Handle(ref SimpleBroadcastMessage message)
611
- {
612
- ++count;
613
- }
614
-
615
- SimpleBroadcastMessage message = new();
616
- RunRegistrationTest(
617
- token => token.RegisterComponentBroadcast<SimpleBroadcastMessage>(_component, Handle), i =>
618
- {
619
- Assert.AreEqual(i, count);
620
- message.EmitComponentBroadcast(_component);
621
- }, i =>
622
- {
623
- Assert.AreEqual(i, count);
624
- message.EmitComponentBroadcast(_component);
625
- Assert.AreEqual(i + 1, count);
626
- }, () =>
627
- {
628
- message.EmitGameObjectBroadcast(_test);
629
- message.EmitComponentBroadcast(_component);
630
- Assert.AreEqual(0, count);
631
- }, () => { count = 0; });
632
- yield break;
633
- }
634
-
635
- [UnityTest]
636
- public IEnumerator ComponentBroadcastPostProcessor()
637
- {
638
- int count = 0;
639
-
640
- void Handle(ref SimpleBroadcastMessage message)
641
- {
642
- ++count;
643
- }
644
-
645
- SimpleBroadcastMessage message = new();
646
- RunRegistrationTest(
647
- token => token.RegisterComponentBroadcastPostProcessor<SimpleBroadcastMessage>(_component, Handle), i =>
648
- {
649
- Assert.AreEqual(i, count);
650
- message.EmitComponentBroadcast(_component);
651
- }, i =>
652
- {
653
- Assert.AreEqual(i, count);
654
- message.EmitComponentBroadcast(_component);
655
- Assert.AreEqual(i + 1, count);
656
- }, () =>
657
- {
658
- message.EmitGameObjectBroadcast(_test);
659
- message.EmitComponentBroadcast(_component);
660
- Assert.AreEqual(0, count);
661
- }, () => { count = 0; });
662
- yield break;
663
- }
664
-
665
- [UnityTest]
666
- public IEnumerator BroadcastInterceptor()
667
- {
668
- int count = 0;
669
-
670
- bool Intercept(ref InstanceId target, ref SimpleBroadcastMessage message)
671
- {
672
- ++count;
673
- return true;
674
- }
675
-
676
- SimpleBroadcastMessage message = new();
677
- RunRegistrationTest(
678
- token => token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(Intercept), i =>
679
- {
680
- Assert.AreEqual(i, count);
681
- message.EmitComponentBroadcast(_component);
682
- }, i =>
683
- {
684
- Assert.AreEqual(i, count);
685
- message.EmitComponentBroadcast(_component);
686
- Assert.AreEqual(i + 1, count);
687
- }, () =>
688
- {
689
- message.EmitGameObjectBroadcast(_test);
690
- message.EmitComponentBroadcast(_component);
691
- Assert.AreEqual(0, count);
692
- }, () => { count = 0; });
693
- yield break;
694
- }
695
-
696
- [UnityTest]
697
- public IEnumerator BroadcastWithoutSourceNormal()
698
- {
699
- int count = 0;
700
-
701
- void Handle(InstanceId id, SimpleBroadcastMessage message)
702
- {
703
- ++count;
704
- }
705
-
706
- SimpleBroadcastMessage message = new();
707
- RunRegistrationTest(
708
- token => token.RegisterBroadcastWithoutSource<SimpleBroadcastMessage>(Handle), i =>
709
- {
710
- Assert.AreEqual(i, count);
711
- message.EmitComponentBroadcast(_component);
712
- }, i =>
713
- {
714
- Assert.AreEqual(i, count);
715
- message.EmitComponentBroadcast(_component);
716
- Assert.AreEqual(i + 1, count);
717
- }, () =>
718
- {
719
- message.EmitGameObjectBroadcast(_test);
720
- message.EmitComponentBroadcast(_component);
721
- Assert.AreEqual(0, count);
722
- }, () => { count = 0; });
723
- yield break;
724
- }
725
-
726
- [UnityTest]
727
- public IEnumerator BroadcastWithoutSourceNoCopy()
728
- {
729
- int count = 0;
730
-
731
- void Handle(ref InstanceId id, ref SimpleBroadcastMessage message)
732
- {
733
- ++count;
734
- }
735
-
736
- SimpleBroadcastMessage message = new();
737
- RunRegistrationTest(
738
- token => token.RegisterBroadcastWithoutSource<SimpleBroadcastMessage>(Handle), i =>
739
- {
740
- Assert.AreEqual(i, count);
741
- message.EmitComponentBroadcast(_component);
742
- }, i =>
743
- {
744
- Assert.AreEqual(i, count);
745
- message.EmitComponentBroadcast(_component);
746
- Assert.AreEqual(i + 1, count);
747
- }, () =>
748
- {
749
- message.EmitGameObjectBroadcast(_test);
750
- message.EmitComponentBroadcast(_component);
751
- Assert.AreEqual(0, count);
752
- }, () => { count = 0; });
753
- yield break;
754
- }
755
-
756
- [UnityTest]
757
- public IEnumerator BroadcastWithoutSourcePostProcessorNormal()
758
- {
759
- int count = 0;
760
-
761
- void Handle(InstanceId id, SimpleBroadcastMessage message)
762
- {
763
- ++count;
764
- }
765
-
766
- SimpleBroadcastMessage message = new();
767
- RunRegistrationTest(
768
- token => token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(Handle), i =>
769
- {
770
- Assert.AreEqual(i, count);
771
- message.EmitComponentBroadcast(_component);
772
- }, i =>
773
- {
774
- Assert.AreEqual(i, count);
775
- message.EmitComponentBroadcast(_component);
776
- Assert.AreEqual(i + 1, count);
777
- }, () =>
778
- {
779
- message.EmitGameObjectBroadcast(_test);
780
- message.EmitComponentBroadcast(_component);
781
- Assert.AreEqual(0, count);
782
- }, () => { count = 0; });
783
- yield break;
784
- }
785
-
786
- [UnityTest]
787
- public IEnumerator BroadcastWithoutSourcePostProcessorNoCopy()
788
- {
789
- int count = 0;
790
-
791
- void Handle(ref InstanceId id, ref SimpleBroadcastMessage message)
792
- {
793
- ++count;
794
- }
795
-
796
- SimpleBroadcastMessage message = new();
797
- RunRegistrationTest(
798
- token => token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(Handle), i =>
799
- {
800
- Assert.AreEqual(i, count);
801
- message.EmitComponentBroadcast(_component);
802
- }, i =>
803
- {
804
- Assert.AreEqual(i, count);
805
- message.EmitComponentBroadcast(_component);
806
- Assert.AreEqual(i + 1, count);
807
- }, () =>
808
- {
809
- message.EmitGameObjectBroadcast(_test);
810
- message.EmitComponentBroadcast(_component);
811
- Assert.AreEqual(0, count);
812
- }, () => { count = 0; });
813
- yield break;
814
- }
815
-
816
- [UnityTest]
817
- public IEnumerator GlobalAcceptAllNormal()
818
- {
819
- int targetedCount = 0;
820
- int broadcastCount = 0;
821
- int untargetedCount = 0;
822
-
823
- void HandleUntargeted(IUntargetedMessage message)
824
- {
825
- ++untargetedCount;
826
- }
827
-
828
- void HandleTargeted(InstanceId id, ITargetedMessage message)
829
- {
830
- ++targetedCount;
831
- }
832
-
833
- void HandleBroadcast(InstanceId id, IBroadcastMessage message)
834
- {
835
- ++broadcastCount;
836
- }
837
-
838
- SimpleUntargetedMessage untargetedMessage = new();
839
- SimpleTargetedMessage targetedMessage = new();
840
- SimpleBroadcastMessage broadcastMessage = new();
841
- RunRegistrationTest(
842
- token => token.RegisterGlobalAcceptAll(HandleUntargeted, HandleTargeted, HandleBroadcast), i =>
843
- {
844
- Assert.AreEqual(i, targetedCount);
845
- Assert.AreEqual(i, broadcastCount);
846
- Assert.AreEqual(i, untargetedCount);
847
- untargetedMessage.EmitUntargeted();
848
- targetedMessage.EmitGameObjectTargeted(_test);
849
- broadcastMessage.EmitComponentBroadcast(_component);
850
- }, i =>
851
- {
852
- Assert.AreEqual(i, targetedCount);
853
- Assert.AreEqual(i, broadcastCount);
854
- Assert.AreEqual(i, untargetedCount);
855
- untargetedMessage.EmitUntargeted();
856
- Assert.AreEqual(i, targetedCount);
857
- Assert.AreEqual(i, broadcastCount);
858
- Assert.AreEqual(i + 1, untargetedCount);
859
- targetedMessage.EmitGameObjectTargeted(_test);
860
- Assert.AreEqual(i + 1, targetedCount);
861
- Assert.AreEqual(i, broadcastCount);
862
- Assert.AreEqual(i + 1, untargetedCount);
863
- broadcastMessage.EmitComponentBroadcast(_component);
864
- Assert.AreEqual(i + 1, targetedCount);
865
- Assert.AreEqual(i + 1, broadcastCount);
866
- Assert.AreEqual(i + 1, untargetedCount);
867
- }, () =>
868
- {
869
- untargetedMessage.EmitUntargeted();
870
- targetedMessage.EmitGameObjectTargeted(_test);
871
- broadcastMessage.EmitComponentBroadcast(_component);
872
- Assert.AreEqual(0, targetedCount);
873
- Assert.AreEqual(0, broadcastCount);
874
- Assert.AreEqual(0, untargetedCount);
875
- }, () =>
876
- {
877
- targetedCount = 0;
878
- broadcastCount = 0;
879
- untargetedCount = 0;
880
- });
881
- yield break;
882
- }
883
-
884
- [UnityTest]
885
- public IEnumerator GlobalAcceptAllNoCopy()
886
- {
887
- int targetedCount = 0;
888
- int broadcastCount = 0;
889
- int untargetedCount = 0;
890
-
891
- void HandleUntargeted(ref IUntargetedMessage message)
892
- {
893
- ++untargetedCount;
894
- }
895
-
896
- void HandleTargeted(ref InstanceId id, ref ITargetedMessage message)
897
- {
898
- ++targetedCount;
899
- }
900
-
901
- void HandleBroadcast(ref InstanceId id, ref IBroadcastMessage message)
902
- {
903
- ++broadcastCount;
904
- }
905
-
906
- SimpleUntargetedMessage untargetedMessage = new();
907
- SimpleTargetedMessage targetedMessage = new();
908
- SimpleBroadcastMessage broadcastMessage = new();
909
- RunRegistrationTest(
910
- token => token.RegisterGlobalAcceptAll(HandleUntargeted, HandleTargeted, HandleBroadcast), i =>
911
- {
912
- Assert.AreEqual(i, targetedCount);
913
- Assert.AreEqual(i, broadcastCount);
914
- Assert.AreEqual(i, untargetedCount);
915
- untargetedMessage.EmitUntargeted();
916
- targetedMessage.EmitGameObjectTargeted(_test);
917
- broadcastMessage.EmitComponentBroadcast(_component);
918
- }, i =>
919
- {
920
- Assert.AreEqual(i, targetedCount);
921
- Assert.AreEqual(i, broadcastCount);
922
- Assert.AreEqual(i, untargetedCount);
923
- untargetedMessage.EmitUntargeted();
924
- Assert.AreEqual(i, targetedCount);
925
- Assert.AreEqual(i, broadcastCount);
926
- Assert.AreEqual(i + 1, untargetedCount);
927
- targetedMessage.EmitGameObjectTargeted(_test);
928
- Assert.AreEqual(i + 1, targetedCount);
929
- Assert.AreEqual(i, broadcastCount);
930
- Assert.AreEqual(i + 1, untargetedCount);
931
- broadcastMessage.EmitComponentBroadcast(_component);
932
- Assert.AreEqual(i + 1, targetedCount);
933
- Assert.AreEqual(i + 1, broadcastCount);
934
- Assert.AreEqual(i + 1, untargetedCount);
935
- }, () =>
936
- {
937
- untargetedMessage.EmitUntargeted();
938
- targetedMessage.EmitGameObjectTargeted(_test);
939
- broadcastMessage.EmitComponentBroadcast(_component);
940
- Assert.AreEqual(0, targetedCount);
941
- Assert.AreEqual(0, broadcastCount);
942
- Assert.AreEqual(0, untargetedCount);
943
- }, () =>
944
- {
945
- targetedCount = 0;
946
- broadcastCount = 0;
947
- untargetedCount = 0;
948
- });
949
- yield break;
950
- }
951
-
952
- private void RunRegistrationTest(
953
- Func<MessageRegistrationToken, MessageRegistrationHandle> registration, Action<int> normalAssert,
954
- Action<int> removalAssert, Action finalAssert, Action reset)
955
- {
956
- HashSet<MessageRegistrationHandle> handles = new(_numRegistrations);
957
- try
958
- {
959
- for (int i = 0; i < _numRegistrations; ++i)
960
- {
961
- MessageRegistrationHandle handle = registration(_token);
962
- bool neverSeen = handles.Add(handle);
963
- Assert.IsTrue(neverSeen, "Handle {0} at count {1} was a duplicate.", handle, neverSeen);
964
- }
965
-
966
- for (int i = 0; i < 100; ++i)
967
- {
968
- normalAssert(i);
969
- }
970
-
971
- reset();
972
- int expected = 0;
973
- foreach (MessageRegistrationHandle handle in handles.OrderBy(_ => _random.Next()).ToList())
974
- {
975
- removalAssert(expected++);
976
- handles.Remove(handle);
977
- _token.RemoveRegistration(handle);
978
- }
979
-
980
- reset();
981
- for (int i = 0; i < 100; ++i)
982
- {
983
- finalAssert();
984
- }
985
- }
986
- finally
987
- {
988
- foreach (MessageRegistrationHandle handle in handles)
989
- {
990
- _token.RemoveRegistration(handle);
991
- }
992
- }
993
- }
994
- }
995
- }
1
+ namespace DxMessaging.Tests.Runtime.Core
2
+ {
3
+ using System;
4
+ using System.Collections;
5
+ using System.Collections.Generic;
6
+ using System.Linq;
7
+ using DxMessaging.Core;
8
+ using DxMessaging.Core.Extensions;
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
+
16
+ public sealed class RegistrationTests : MessagingTestBase
17
+ {
18
+ private GameObject _test;
19
+ private EmptyMessageAwareComponent _component;
20
+ private MessageRegistrationToken _token;
21
+
22
+ [UnitySetUp]
23
+ public override IEnumerator UnitySetup()
24
+ {
25
+ IEnumerator baseEnumerator = base.UnitySetup();
26
+ while (baseEnumerator.MoveNext())
27
+ {
28
+ yield return baseEnumerator.Current;
29
+ }
30
+
31
+ _test = new(nameof(RegistrationTests), typeof(EmptyMessageAwareComponent));
32
+ _spawned.Add(_test);
33
+ _component = _test.GetComponent<EmptyMessageAwareComponent>();
34
+ _token = GetToken(_component);
35
+ }
36
+
37
+ [UnityTest]
38
+ public IEnumerator UntargetedNormal()
39
+ {
40
+ int count = 0;
41
+
42
+ void Handle(SimpleUntargetedMessage message)
43
+ {
44
+ ++count;
45
+ }
46
+
47
+ SimpleUntargetedMessage message = new();
48
+ RunRegistrationTest(
49
+ token => token.RegisterUntargeted<SimpleUntargetedMessage>(Handle),
50
+ i =>
51
+ {
52
+ Assert.AreEqual(i, count);
53
+ message.EmitUntargeted();
54
+ },
55
+ i =>
56
+ {
57
+ Assert.AreEqual(i, count);
58
+ message.EmitUntargeted();
59
+ Assert.AreEqual(i + 1, count);
60
+ },
61
+ () =>
62
+ {
63
+ message.EmitUntargeted();
64
+ Assert.AreEqual(0, count);
65
+ },
66
+ () =>
67
+ {
68
+ count = 0;
69
+ }
70
+ );
71
+ yield break;
72
+ }
73
+
74
+ [UnityTest]
75
+ public IEnumerator UntargetedNoCopy()
76
+ {
77
+ int count = 0;
78
+
79
+ void Handle(ref SimpleUntargetedMessage message)
80
+ {
81
+ ++count;
82
+ }
83
+
84
+ SimpleUntargetedMessage message = new();
85
+ RunRegistrationTest(
86
+ token => token.RegisterUntargeted<SimpleUntargetedMessage>(Handle),
87
+ i =>
88
+ {
89
+ Assert.AreEqual(i, count);
90
+ message.EmitUntargeted();
91
+ },
92
+ i =>
93
+ {
94
+ Assert.AreEqual(i, count);
95
+ message.EmitUntargeted();
96
+ Assert.AreEqual(i + 1, count);
97
+ },
98
+ () =>
99
+ {
100
+ message.EmitUntargeted();
101
+ Assert.AreEqual(0, count);
102
+ },
103
+ () =>
104
+ {
105
+ count = 0;
106
+ }
107
+ );
108
+ yield break;
109
+ }
110
+
111
+ [UnityTest]
112
+ public IEnumerator UntargetedPostProcessor()
113
+ {
114
+ int count = 0;
115
+
116
+ void Handle(ref SimpleUntargetedMessage message)
117
+ {
118
+ ++count;
119
+ }
120
+
121
+ SimpleUntargetedMessage message = new();
122
+ RunRegistrationTest(
123
+ token => token.RegisterUntargetedPostProcessor<SimpleUntargetedMessage>(Handle),
124
+ i =>
125
+ {
126
+ Assert.AreEqual(i, count);
127
+ message.EmitUntargeted();
128
+ },
129
+ i =>
130
+ {
131
+ Assert.AreEqual(i, count);
132
+ message.EmitUntargeted();
133
+ Assert.AreEqual(i + 1, count);
134
+ },
135
+ () =>
136
+ {
137
+ message.EmitUntargeted();
138
+ Assert.AreEqual(0, count);
139
+ },
140
+ () =>
141
+ {
142
+ count = 0;
143
+ }
144
+ );
145
+ yield break;
146
+ }
147
+
148
+ [UnityTest]
149
+ public IEnumerator UntargetedInterceptor()
150
+ {
151
+ int count = 0;
152
+
153
+ bool Intercept(ref SimpleUntargetedMessage message)
154
+ {
155
+ ++count;
156
+ return true;
157
+ }
158
+
159
+ SimpleUntargetedMessage message = new();
160
+ RunRegistrationTest(
161
+ token => token.RegisterUntargetedInterceptor<SimpleUntargetedMessage>(Intercept),
162
+ i =>
163
+ {
164
+ Assert.AreEqual(i, count);
165
+ message.EmitUntargeted();
166
+ },
167
+ i =>
168
+ {
169
+ Assert.AreEqual(i, count);
170
+ message.EmitUntargeted();
171
+ Assert.AreEqual(i + 1, count);
172
+ },
173
+ () =>
174
+ {
175
+ message.EmitUntargeted();
176
+ Assert.AreEqual(0, count);
177
+ },
178
+ () =>
179
+ {
180
+ count = 0;
181
+ }
182
+ );
183
+ yield break;
184
+ }
185
+
186
+ [UnityTest]
187
+ public IEnumerator GameObjectTargetedNormal()
188
+ {
189
+ int count = 0;
190
+
191
+ void Handle(SimpleTargetedMessage message)
192
+ {
193
+ ++count;
194
+ }
195
+
196
+ SimpleTargetedMessage message = new();
197
+ RunRegistrationTest(
198
+ token => token.RegisterGameObjectTargeted<SimpleTargetedMessage>(_test, Handle),
199
+ i =>
200
+ {
201
+ Assert.AreEqual(i, count);
202
+ message.EmitGameObjectTargeted(_test);
203
+ },
204
+ i =>
205
+ {
206
+ Assert.AreEqual(i, count);
207
+ message.EmitGameObjectTargeted(_test);
208
+ Assert.AreEqual(i + 1, count);
209
+ },
210
+ () =>
211
+ {
212
+ message.EmitGameObjectTargeted(_test);
213
+ message.EmitComponentTargeted(_component);
214
+ Assert.AreEqual(0, count);
215
+ },
216
+ () =>
217
+ {
218
+ count = 0;
219
+ }
220
+ );
221
+ yield break;
222
+ }
223
+
224
+ [UnityTest]
225
+ public IEnumerator GameObjectTargetedNoCopy()
226
+ {
227
+ int count = 0;
228
+
229
+ void Handle(ref SimpleTargetedMessage message)
230
+ {
231
+ ++count;
232
+ }
233
+
234
+ SimpleTargetedMessage message = new();
235
+ RunRegistrationTest(
236
+ token => token.RegisterGameObjectTargeted<SimpleTargetedMessage>(_test, Handle),
237
+ i =>
238
+ {
239
+ Assert.AreEqual(i, count);
240
+ message.EmitGameObjectTargeted(_test);
241
+ },
242
+ i =>
243
+ {
244
+ Assert.AreEqual(i, count);
245
+ message.EmitGameObjectTargeted(_test);
246
+ Assert.AreEqual(i + 1, count);
247
+ },
248
+ () =>
249
+ {
250
+ message.EmitGameObjectTargeted(_test);
251
+ message.EmitComponentTargeted(_component);
252
+ Assert.AreEqual(0, count);
253
+ },
254
+ () =>
255
+ {
256
+ count = 0;
257
+ }
258
+ );
259
+ yield break;
260
+ }
261
+
262
+ [UnityTest]
263
+ public IEnumerator GameObjectTargetedPostProcessor()
264
+ {
265
+ int count = 0;
266
+
267
+ void Handle(ref SimpleTargetedMessage message)
268
+ {
269
+ ++count;
270
+ }
271
+
272
+ SimpleTargetedMessage message = new();
273
+ RunRegistrationTest(
274
+ token =>
275
+ token.RegisterGameObjectTargetedPostProcessor<SimpleTargetedMessage>(
276
+ _test,
277
+ Handle
278
+ ),
279
+ i =>
280
+ {
281
+ Assert.AreEqual(i, count);
282
+ message.EmitGameObjectTargeted(_test);
283
+ },
284
+ i =>
285
+ {
286
+ Assert.AreEqual(i, count);
287
+ message.EmitGameObjectTargeted(_test);
288
+ Assert.AreEqual(i + 1, count);
289
+ },
290
+ () =>
291
+ {
292
+ message.EmitGameObjectTargeted(_test);
293
+ message.EmitComponentTargeted(_component);
294
+ Assert.AreEqual(0, count);
295
+ },
296
+ () =>
297
+ {
298
+ count = 0;
299
+ }
300
+ );
301
+ yield break;
302
+ }
303
+
304
+ [UnityTest]
305
+ public IEnumerator ComponentTargetedNormal()
306
+ {
307
+ int count = 0;
308
+
309
+ void Handle(SimpleTargetedMessage message)
310
+ {
311
+ ++count;
312
+ }
313
+
314
+ SimpleTargetedMessage message = new();
315
+ RunRegistrationTest(
316
+ token => token.RegisterComponentTargeted<SimpleTargetedMessage>(_component, Handle),
317
+ i =>
318
+ {
319
+ Assert.AreEqual(i, count);
320
+ message.EmitComponentTargeted(_component);
321
+ },
322
+ i =>
323
+ {
324
+ Assert.AreEqual(i, count);
325
+ message.EmitComponentTargeted(_component);
326
+ Assert.AreEqual(i + 1, count);
327
+ },
328
+ () =>
329
+ {
330
+ message.EmitGameObjectTargeted(_test);
331
+ message.EmitComponentTargeted(_component);
332
+ Assert.AreEqual(0, count);
333
+ },
334
+ () =>
335
+ {
336
+ count = 0;
337
+ }
338
+ );
339
+ yield break;
340
+ }
341
+
342
+ [UnityTest]
343
+ public IEnumerator ComponentTargetedNoCopy()
344
+ {
345
+ int count = 0;
346
+
347
+ void Handle(ref SimpleTargetedMessage message)
348
+ {
349
+ ++count;
350
+ }
351
+
352
+ SimpleTargetedMessage message = new();
353
+ RunRegistrationTest(
354
+ token => token.RegisterComponentTargeted<SimpleTargetedMessage>(_component, Handle),
355
+ i =>
356
+ {
357
+ Assert.AreEqual(i, count);
358
+ message.EmitComponentTargeted(_component);
359
+ },
360
+ i =>
361
+ {
362
+ Assert.AreEqual(i, count);
363
+ message.EmitComponentTargeted(_component);
364
+ Assert.AreEqual(i + 1, count);
365
+ },
366
+ () =>
367
+ {
368
+ message.EmitGameObjectTargeted(_test);
369
+ message.EmitComponentTargeted(_component);
370
+ Assert.AreEqual(0, count);
371
+ },
372
+ () =>
373
+ {
374
+ count = 0;
375
+ }
376
+ );
377
+ yield break;
378
+ }
379
+
380
+ [UnityTest]
381
+ public IEnumerator ComponentTargetedPostProcessor()
382
+ {
383
+ int count = 0;
384
+
385
+ void Handle(ref SimpleTargetedMessage message)
386
+ {
387
+ ++count;
388
+ }
389
+
390
+ SimpleTargetedMessage message = new();
391
+ RunRegistrationTest(
392
+ token =>
393
+ token.RegisterComponentTargetedPostProcessor<SimpleTargetedMessage>(
394
+ _component,
395
+ Handle
396
+ ),
397
+ i =>
398
+ {
399
+ Assert.AreEqual(i, count);
400
+ message.EmitComponentTargeted(_component);
401
+ },
402
+ i =>
403
+ {
404
+ Assert.AreEqual(i, count);
405
+ message.EmitComponentTargeted(_component);
406
+ Assert.AreEqual(i + 1, count);
407
+ },
408
+ () =>
409
+ {
410
+ message.EmitGameObjectTargeted(_test);
411
+ message.EmitComponentTargeted(_component);
412
+ Assert.AreEqual(0, count);
413
+ },
414
+ () =>
415
+ {
416
+ count = 0;
417
+ }
418
+ );
419
+ yield break;
420
+ }
421
+
422
+ [UnityTest]
423
+ public IEnumerator TargetedInterceptor()
424
+ {
425
+ int count = 0;
426
+
427
+ bool Intercept(ref InstanceId target, ref SimpleTargetedMessage message)
428
+ {
429
+ ++count;
430
+ return true;
431
+ }
432
+
433
+ SimpleTargetedMessage message = new();
434
+ RunRegistrationTest(
435
+ token => token.RegisterTargetedInterceptor<SimpleTargetedMessage>(Intercept),
436
+ i =>
437
+ {
438
+ Assert.AreEqual(i, count);
439
+ message.EmitGameObjectTargeted(_test);
440
+ },
441
+ i =>
442
+ {
443
+ Assert.AreEqual(i, count);
444
+ message.EmitComponentTargeted(_component);
445
+ Assert.AreEqual(i + 1, count);
446
+ },
447
+ () =>
448
+ {
449
+ message.EmitGameObjectTargeted(_test);
450
+ message.EmitComponentTargeted(_component);
451
+ Assert.AreEqual(0, count);
452
+ },
453
+ () =>
454
+ {
455
+ count = 0;
456
+ }
457
+ );
458
+ yield break;
459
+ }
460
+
461
+ [UnityTest]
462
+ public IEnumerator TargetedWithoutTargetingNormal()
463
+ {
464
+ int count = 0;
465
+
466
+ void Handle(InstanceId target, SimpleTargetedMessage message)
467
+ {
468
+ ++count;
469
+ }
470
+
471
+ SimpleTargetedMessage message = new();
472
+ RunRegistrationTest(
473
+ token => token.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Handle),
474
+ i =>
475
+ {
476
+ Assert.AreEqual(i, count);
477
+ message.EmitGameObjectTargeted(_test);
478
+ },
479
+ i =>
480
+ {
481
+ Assert.AreEqual(i, count);
482
+ message.EmitComponentTargeted(_component);
483
+ Assert.AreEqual(i + 1, count);
484
+ },
485
+ () =>
486
+ {
487
+ message.EmitGameObjectTargeted(_test);
488
+ message.EmitComponentTargeted(_component);
489
+ Assert.AreEqual(0, count);
490
+ },
491
+ () =>
492
+ {
493
+ count = 0;
494
+ }
495
+ );
496
+ yield break;
497
+ }
498
+
499
+ [UnityTest]
500
+ public IEnumerator TargetedWithoutTargetingNoCopy()
501
+ {
502
+ int count = 0;
503
+
504
+ void Handle(ref InstanceId target, ref SimpleTargetedMessage message)
505
+ {
506
+ ++count;
507
+ }
508
+
509
+ SimpleTargetedMessage message = new();
510
+ RunRegistrationTest(
511
+ token => token.RegisterTargetedWithoutTargeting<SimpleTargetedMessage>(Handle),
512
+ i =>
513
+ {
514
+ Assert.AreEqual(i, count);
515
+ message.EmitGameObjectTargeted(_test);
516
+ },
517
+ i =>
518
+ {
519
+ Assert.AreEqual(i, count);
520
+ message.EmitComponentTargeted(_component);
521
+ Assert.AreEqual(i + 1, count);
522
+ },
523
+ () =>
524
+ {
525
+ message.EmitGameObjectTargeted(_test);
526
+ message.EmitComponentTargeted(_component);
527
+ Assert.AreEqual(0, count);
528
+ },
529
+ () =>
530
+ {
531
+ count = 0;
532
+ }
533
+ );
534
+ yield break;
535
+ }
536
+
537
+ [UnityTest]
538
+ public IEnumerator TargetedWithoutTargetingPostProcessorNormal()
539
+ {
540
+ int count = 0;
541
+
542
+ void Handle(InstanceId target, SimpleTargetedMessage message)
543
+ {
544
+ ++count;
545
+ }
546
+
547
+ SimpleTargetedMessage message = new();
548
+ RunRegistrationTest(
549
+ token =>
550
+ token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(
551
+ Handle
552
+ ),
553
+ i =>
554
+ {
555
+ Assert.AreEqual(i, count);
556
+ message.EmitGameObjectTargeted(_test);
557
+ },
558
+ i =>
559
+ {
560
+ Assert.AreEqual(i, count);
561
+ message.EmitComponentTargeted(_component);
562
+ Assert.AreEqual(i + 1, count);
563
+ },
564
+ () =>
565
+ {
566
+ message.EmitGameObjectTargeted(_test);
567
+ message.EmitComponentTargeted(_component);
568
+ Assert.AreEqual(0, count);
569
+ },
570
+ () =>
571
+ {
572
+ count = 0;
573
+ }
574
+ );
575
+ yield break;
576
+ }
577
+
578
+ [UnityTest]
579
+ public IEnumerator TargetedWithoutTargetingPostProcessorNoCopy()
580
+ {
581
+ int count = 0;
582
+
583
+ void Handle(ref InstanceId target, ref SimpleTargetedMessage message)
584
+ {
585
+ ++count;
586
+ }
587
+
588
+ SimpleTargetedMessage message = new();
589
+ RunRegistrationTest(
590
+ token =>
591
+ token.RegisterTargetedWithoutTargetingPostProcessor<SimpleTargetedMessage>(
592
+ Handle
593
+ ),
594
+ i =>
595
+ {
596
+ Assert.AreEqual(i, count);
597
+ message.EmitGameObjectTargeted(_test);
598
+ },
599
+ i =>
600
+ {
601
+ Assert.AreEqual(i, count);
602
+ message.EmitComponentTargeted(_component);
603
+ Assert.AreEqual(i + 1, count);
604
+ },
605
+ () =>
606
+ {
607
+ message.EmitGameObjectTargeted(_test);
608
+ message.EmitComponentTargeted(_component);
609
+ Assert.AreEqual(0, count);
610
+ },
611
+ () =>
612
+ {
613
+ count = 0;
614
+ }
615
+ );
616
+ yield break;
617
+ }
618
+
619
+ [UnityTest]
620
+ public IEnumerator GameObjectBroadcastNormal()
621
+ {
622
+ int count = 0;
623
+
624
+ void Handle(SimpleBroadcastMessage message)
625
+ {
626
+ ++count;
627
+ }
628
+
629
+ SimpleBroadcastMessage message = new();
630
+ RunRegistrationTest(
631
+ token => token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(_test, Handle),
632
+ i =>
633
+ {
634
+ Assert.AreEqual(i, count);
635
+ message.EmitGameObjectBroadcast(_test);
636
+ },
637
+ i =>
638
+ {
639
+ Assert.AreEqual(i, count);
640
+ message.EmitGameObjectBroadcast(_test);
641
+ Assert.AreEqual(i + 1, count);
642
+ },
643
+ () =>
644
+ {
645
+ message.EmitGameObjectBroadcast(_test);
646
+ message.EmitComponentBroadcast(_component);
647
+ Assert.AreEqual(0, count);
648
+ },
649
+ () =>
650
+ {
651
+ count = 0;
652
+ }
653
+ );
654
+ yield break;
655
+ }
656
+
657
+ [UnityTest]
658
+ public IEnumerator GameObjectBroadcastNoCopy()
659
+ {
660
+ int count = 0;
661
+
662
+ void Handle(ref SimpleBroadcastMessage message)
663
+ {
664
+ ++count;
665
+ }
666
+
667
+ SimpleBroadcastMessage message = new();
668
+ RunRegistrationTest(
669
+ token => token.RegisterGameObjectBroadcast<SimpleBroadcastMessage>(_test, Handle),
670
+ i =>
671
+ {
672
+ Assert.AreEqual(i, count);
673
+ message.EmitGameObjectBroadcast(_test);
674
+ },
675
+ i =>
676
+ {
677
+ Assert.AreEqual(i, count);
678
+ message.EmitGameObjectBroadcast(_test);
679
+ Assert.AreEqual(i + 1, count);
680
+ },
681
+ () =>
682
+ {
683
+ message.EmitGameObjectBroadcast(_test);
684
+ message.EmitComponentBroadcast(_component);
685
+ Assert.AreEqual(0, count);
686
+ },
687
+ () =>
688
+ {
689
+ count = 0;
690
+ }
691
+ );
692
+ yield break;
693
+ }
694
+
695
+ [UnityTest]
696
+ public IEnumerator GameObjectBroadcastPostProcessor()
697
+ {
698
+ int count = 0;
699
+
700
+ void Handle(ref SimpleBroadcastMessage message)
701
+ {
702
+ ++count;
703
+ }
704
+
705
+ SimpleBroadcastMessage message = new();
706
+ RunRegistrationTest(
707
+ token =>
708
+ token.RegisterGameObjectBroadcastPostProcessor<SimpleBroadcastMessage>(
709
+ _test,
710
+ Handle
711
+ ),
712
+ i =>
713
+ {
714
+ Assert.AreEqual(i, count);
715
+ message.EmitGameObjectBroadcast(_test);
716
+ },
717
+ i =>
718
+ {
719
+ Assert.AreEqual(i, count);
720
+ message.EmitGameObjectBroadcast(_test);
721
+ Assert.AreEqual(i + 1, count);
722
+ },
723
+ () =>
724
+ {
725
+ message.EmitGameObjectBroadcast(_test);
726
+ message.EmitComponentBroadcast(_component);
727
+ Assert.AreEqual(0, count);
728
+ },
729
+ () =>
730
+ {
731
+ count = 0;
732
+ }
733
+ );
734
+ yield break;
735
+ }
736
+
737
+ [UnityTest]
738
+ public IEnumerator ComponentBroadcastNormal()
739
+ {
740
+ int count = 0;
741
+
742
+ void Handle(SimpleBroadcastMessage message)
743
+ {
744
+ ++count;
745
+ }
746
+
747
+ SimpleBroadcastMessage message = new();
748
+ RunRegistrationTest(
749
+ token =>
750
+ token.RegisterComponentBroadcast<SimpleBroadcastMessage>(_component, Handle),
751
+ i =>
752
+ {
753
+ Assert.AreEqual(i, count);
754
+ message.EmitComponentBroadcast(_component);
755
+ },
756
+ i =>
757
+ {
758
+ Assert.AreEqual(i, count);
759
+ message.EmitComponentBroadcast(_component);
760
+ Assert.AreEqual(i + 1, count);
761
+ },
762
+ () =>
763
+ {
764
+ message.EmitGameObjectBroadcast(_test);
765
+ message.EmitComponentBroadcast(_component);
766
+ Assert.AreEqual(0, count);
767
+ },
768
+ () =>
769
+ {
770
+ count = 0;
771
+ }
772
+ );
773
+ yield break;
774
+ }
775
+
776
+ [UnityTest]
777
+ public IEnumerator ComponentBroadcastNoCopy()
778
+ {
779
+ int count = 0;
780
+
781
+ void Handle(ref SimpleBroadcastMessage message)
782
+ {
783
+ ++count;
784
+ }
785
+
786
+ SimpleBroadcastMessage message = new();
787
+ RunRegistrationTest(
788
+ token =>
789
+ token.RegisterComponentBroadcast<SimpleBroadcastMessage>(_component, Handle),
790
+ i =>
791
+ {
792
+ Assert.AreEqual(i, count);
793
+ message.EmitComponentBroadcast(_component);
794
+ },
795
+ i =>
796
+ {
797
+ Assert.AreEqual(i, count);
798
+ message.EmitComponentBroadcast(_component);
799
+ Assert.AreEqual(i + 1, count);
800
+ },
801
+ () =>
802
+ {
803
+ message.EmitGameObjectBroadcast(_test);
804
+ message.EmitComponentBroadcast(_component);
805
+ Assert.AreEqual(0, count);
806
+ },
807
+ () =>
808
+ {
809
+ count = 0;
810
+ }
811
+ );
812
+ yield break;
813
+ }
814
+
815
+ [UnityTest]
816
+ public IEnumerator ComponentBroadcastPostProcessor()
817
+ {
818
+ int count = 0;
819
+
820
+ void Handle(ref SimpleBroadcastMessage message)
821
+ {
822
+ ++count;
823
+ }
824
+
825
+ SimpleBroadcastMessage message = new();
826
+ RunRegistrationTest(
827
+ token =>
828
+ token.RegisterComponentBroadcastPostProcessor<SimpleBroadcastMessage>(
829
+ _component,
830
+ Handle
831
+ ),
832
+ i =>
833
+ {
834
+ Assert.AreEqual(i, count);
835
+ message.EmitComponentBroadcast(_component);
836
+ },
837
+ i =>
838
+ {
839
+ Assert.AreEqual(i, count);
840
+ message.EmitComponentBroadcast(_component);
841
+ Assert.AreEqual(i + 1, count);
842
+ },
843
+ () =>
844
+ {
845
+ message.EmitGameObjectBroadcast(_test);
846
+ message.EmitComponentBroadcast(_component);
847
+ Assert.AreEqual(0, count);
848
+ },
849
+ () =>
850
+ {
851
+ count = 0;
852
+ }
853
+ );
854
+ yield break;
855
+ }
856
+
857
+ [UnityTest]
858
+ public IEnumerator BroadcastInterceptor()
859
+ {
860
+ int count = 0;
861
+
862
+ bool Intercept(ref InstanceId target, ref SimpleBroadcastMessage message)
863
+ {
864
+ ++count;
865
+ return true;
866
+ }
867
+
868
+ SimpleBroadcastMessage message = new();
869
+ RunRegistrationTest(
870
+ token => token.RegisterBroadcastInterceptor<SimpleBroadcastMessage>(Intercept),
871
+ i =>
872
+ {
873
+ Assert.AreEqual(i, count);
874
+ message.EmitComponentBroadcast(_component);
875
+ },
876
+ i =>
877
+ {
878
+ Assert.AreEqual(i, count);
879
+ message.EmitComponentBroadcast(_component);
880
+ Assert.AreEqual(i + 1, count);
881
+ },
882
+ () =>
883
+ {
884
+ message.EmitGameObjectBroadcast(_test);
885
+ message.EmitComponentBroadcast(_component);
886
+ Assert.AreEqual(0, count);
887
+ },
888
+ () =>
889
+ {
890
+ count = 0;
891
+ }
892
+ );
893
+ yield break;
894
+ }
895
+
896
+ [UnityTest]
897
+ public IEnumerator BroadcastWithoutSourceNormal()
898
+ {
899
+ int count = 0;
900
+
901
+ void Handle(InstanceId id, SimpleBroadcastMessage message)
902
+ {
903
+ ++count;
904
+ }
905
+
906
+ SimpleBroadcastMessage message = new();
907
+ RunRegistrationTest(
908
+ token => token.RegisterBroadcastWithoutSource<SimpleBroadcastMessage>(Handle),
909
+ i =>
910
+ {
911
+ Assert.AreEqual(i, count);
912
+ message.EmitComponentBroadcast(_component);
913
+ },
914
+ i =>
915
+ {
916
+ Assert.AreEqual(i, count);
917
+ message.EmitComponentBroadcast(_component);
918
+ Assert.AreEqual(i + 1, count);
919
+ },
920
+ () =>
921
+ {
922
+ message.EmitGameObjectBroadcast(_test);
923
+ message.EmitComponentBroadcast(_component);
924
+ Assert.AreEqual(0, count);
925
+ },
926
+ () =>
927
+ {
928
+ count = 0;
929
+ }
930
+ );
931
+ yield break;
932
+ }
933
+
934
+ [UnityTest]
935
+ public IEnumerator BroadcastWithoutSourceNoCopy()
936
+ {
937
+ int count = 0;
938
+
939
+ void Handle(ref InstanceId id, ref SimpleBroadcastMessage message)
940
+ {
941
+ ++count;
942
+ }
943
+
944
+ SimpleBroadcastMessage message = new();
945
+ RunRegistrationTest(
946
+ token => token.RegisterBroadcastWithoutSource<SimpleBroadcastMessage>(Handle),
947
+ i =>
948
+ {
949
+ Assert.AreEqual(i, count);
950
+ message.EmitComponentBroadcast(_component);
951
+ },
952
+ i =>
953
+ {
954
+ Assert.AreEqual(i, count);
955
+ message.EmitComponentBroadcast(_component);
956
+ Assert.AreEqual(i + 1, count);
957
+ },
958
+ () =>
959
+ {
960
+ message.EmitGameObjectBroadcast(_test);
961
+ message.EmitComponentBroadcast(_component);
962
+ Assert.AreEqual(0, count);
963
+ },
964
+ () =>
965
+ {
966
+ count = 0;
967
+ }
968
+ );
969
+ yield break;
970
+ }
971
+
972
+ [UnityTest]
973
+ public IEnumerator BroadcastWithoutSourcePostProcessorNormal()
974
+ {
975
+ int count = 0;
976
+
977
+ void Handle(InstanceId id, SimpleBroadcastMessage message)
978
+ {
979
+ ++count;
980
+ }
981
+
982
+ SimpleBroadcastMessage message = new();
983
+ RunRegistrationTest(
984
+ token =>
985
+ token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(
986
+ Handle
987
+ ),
988
+ i =>
989
+ {
990
+ Assert.AreEqual(i, count);
991
+ message.EmitComponentBroadcast(_component);
992
+ },
993
+ i =>
994
+ {
995
+ Assert.AreEqual(i, count);
996
+ message.EmitComponentBroadcast(_component);
997
+ Assert.AreEqual(i + 1, count);
998
+ },
999
+ () =>
1000
+ {
1001
+ message.EmitGameObjectBroadcast(_test);
1002
+ message.EmitComponentBroadcast(_component);
1003
+ Assert.AreEqual(0, count);
1004
+ },
1005
+ () =>
1006
+ {
1007
+ count = 0;
1008
+ }
1009
+ );
1010
+ yield break;
1011
+ }
1012
+
1013
+ [UnityTest]
1014
+ public IEnumerator BroadcastWithoutSourcePostProcessorNoCopy()
1015
+ {
1016
+ int count = 0;
1017
+
1018
+ void Handle(ref InstanceId id, ref SimpleBroadcastMessage message)
1019
+ {
1020
+ ++count;
1021
+ }
1022
+
1023
+ SimpleBroadcastMessage message = new();
1024
+ RunRegistrationTest(
1025
+ token =>
1026
+ token.RegisterBroadcastWithoutSourcePostProcessor<SimpleBroadcastMessage>(
1027
+ Handle
1028
+ ),
1029
+ i =>
1030
+ {
1031
+ Assert.AreEqual(i, count);
1032
+ message.EmitComponentBroadcast(_component);
1033
+ },
1034
+ i =>
1035
+ {
1036
+ Assert.AreEqual(i, count);
1037
+ message.EmitComponentBroadcast(_component);
1038
+ Assert.AreEqual(i + 1, count);
1039
+ },
1040
+ () =>
1041
+ {
1042
+ message.EmitGameObjectBroadcast(_test);
1043
+ message.EmitComponentBroadcast(_component);
1044
+ Assert.AreEqual(0, count);
1045
+ },
1046
+ () =>
1047
+ {
1048
+ count = 0;
1049
+ }
1050
+ );
1051
+ yield break;
1052
+ }
1053
+
1054
+ [UnityTest]
1055
+ public IEnumerator GlobalAcceptAllNormal()
1056
+ {
1057
+ int targetedCount = 0;
1058
+ int broadcastCount = 0;
1059
+ int untargetedCount = 0;
1060
+
1061
+ void HandleUntargeted(IUntargetedMessage message)
1062
+ {
1063
+ ++untargetedCount;
1064
+ }
1065
+
1066
+ void HandleTargeted(InstanceId id, ITargetedMessage message)
1067
+ {
1068
+ ++targetedCount;
1069
+ }
1070
+
1071
+ void HandleBroadcast(InstanceId id, IBroadcastMessage message)
1072
+ {
1073
+ ++broadcastCount;
1074
+ }
1075
+
1076
+ SimpleUntargetedMessage untargetedMessage = new();
1077
+ SimpleTargetedMessage targetedMessage = new();
1078
+ SimpleBroadcastMessage broadcastMessage = new();
1079
+ RunRegistrationTest(
1080
+ token =>
1081
+ token.RegisterGlobalAcceptAll(
1082
+ HandleUntargeted,
1083
+ HandleTargeted,
1084
+ HandleBroadcast
1085
+ ),
1086
+ i =>
1087
+ {
1088
+ Assert.AreEqual(i, targetedCount);
1089
+ Assert.AreEqual(i, broadcastCount);
1090
+ Assert.AreEqual(i, untargetedCount);
1091
+ untargetedMessage.EmitUntargeted();
1092
+ targetedMessage.EmitGameObjectTargeted(_test);
1093
+ broadcastMessage.EmitComponentBroadcast(_component);
1094
+ },
1095
+ i =>
1096
+ {
1097
+ Assert.AreEqual(i, targetedCount);
1098
+ Assert.AreEqual(i, broadcastCount);
1099
+ Assert.AreEqual(i, untargetedCount);
1100
+ untargetedMessage.EmitUntargeted();
1101
+ Assert.AreEqual(i, targetedCount);
1102
+ Assert.AreEqual(i, broadcastCount);
1103
+ Assert.AreEqual(i + 1, untargetedCount);
1104
+ targetedMessage.EmitGameObjectTargeted(_test);
1105
+ Assert.AreEqual(i + 1, targetedCount);
1106
+ Assert.AreEqual(i, broadcastCount);
1107
+ Assert.AreEqual(i + 1, untargetedCount);
1108
+ broadcastMessage.EmitComponentBroadcast(_component);
1109
+ Assert.AreEqual(i + 1, targetedCount);
1110
+ Assert.AreEqual(i + 1, broadcastCount);
1111
+ Assert.AreEqual(i + 1, untargetedCount);
1112
+ },
1113
+ () =>
1114
+ {
1115
+ untargetedMessage.EmitUntargeted();
1116
+ targetedMessage.EmitGameObjectTargeted(_test);
1117
+ broadcastMessage.EmitComponentBroadcast(_component);
1118
+ Assert.AreEqual(0, targetedCount);
1119
+ Assert.AreEqual(0, broadcastCount);
1120
+ Assert.AreEqual(0, untargetedCount);
1121
+ },
1122
+ () =>
1123
+ {
1124
+ targetedCount = 0;
1125
+ broadcastCount = 0;
1126
+ untargetedCount = 0;
1127
+ }
1128
+ );
1129
+ yield break;
1130
+ }
1131
+
1132
+ [UnityTest]
1133
+ public IEnumerator GlobalAcceptAllNoCopy()
1134
+ {
1135
+ int targetedCount = 0;
1136
+ int broadcastCount = 0;
1137
+ int untargetedCount = 0;
1138
+
1139
+ void HandleUntargeted(ref IUntargetedMessage message)
1140
+ {
1141
+ ++untargetedCount;
1142
+ }
1143
+
1144
+ void HandleTargeted(ref InstanceId id, ref ITargetedMessage message)
1145
+ {
1146
+ ++targetedCount;
1147
+ }
1148
+
1149
+ void HandleBroadcast(ref InstanceId id, ref IBroadcastMessage message)
1150
+ {
1151
+ ++broadcastCount;
1152
+ }
1153
+
1154
+ SimpleUntargetedMessage untargetedMessage = new();
1155
+ SimpleTargetedMessage targetedMessage = new();
1156
+ SimpleBroadcastMessage broadcastMessage = new();
1157
+ RunRegistrationTest(
1158
+ token =>
1159
+ token.RegisterGlobalAcceptAll(
1160
+ HandleUntargeted,
1161
+ HandleTargeted,
1162
+ HandleBroadcast
1163
+ ),
1164
+ i =>
1165
+ {
1166
+ Assert.AreEqual(i, targetedCount);
1167
+ Assert.AreEqual(i, broadcastCount);
1168
+ Assert.AreEqual(i, untargetedCount);
1169
+ untargetedMessage.EmitUntargeted();
1170
+ targetedMessage.EmitGameObjectTargeted(_test);
1171
+ broadcastMessage.EmitComponentBroadcast(_component);
1172
+ },
1173
+ i =>
1174
+ {
1175
+ Assert.AreEqual(i, targetedCount);
1176
+ Assert.AreEqual(i, broadcastCount);
1177
+ Assert.AreEqual(i, untargetedCount);
1178
+ untargetedMessage.EmitUntargeted();
1179
+ Assert.AreEqual(i, targetedCount);
1180
+ Assert.AreEqual(i, broadcastCount);
1181
+ Assert.AreEqual(i + 1, untargetedCount);
1182
+ targetedMessage.EmitGameObjectTargeted(_test);
1183
+ Assert.AreEqual(i + 1, targetedCount);
1184
+ Assert.AreEqual(i, broadcastCount);
1185
+ Assert.AreEqual(i + 1, untargetedCount);
1186
+ broadcastMessage.EmitComponentBroadcast(_component);
1187
+ Assert.AreEqual(i + 1, targetedCount);
1188
+ Assert.AreEqual(i + 1, broadcastCount);
1189
+ Assert.AreEqual(i + 1, untargetedCount);
1190
+ },
1191
+ () =>
1192
+ {
1193
+ untargetedMessage.EmitUntargeted();
1194
+ targetedMessage.EmitGameObjectTargeted(_test);
1195
+ broadcastMessage.EmitComponentBroadcast(_component);
1196
+ Assert.AreEqual(0, targetedCount);
1197
+ Assert.AreEqual(0, broadcastCount);
1198
+ Assert.AreEqual(0, untargetedCount);
1199
+ },
1200
+ () =>
1201
+ {
1202
+ targetedCount = 0;
1203
+ broadcastCount = 0;
1204
+ untargetedCount = 0;
1205
+ }
1206
+ );
1207
+ yield break;
1208
+ }
1209
+
1210
+ private void RunRegistrationTest(
1211
+ Func<MessageRegistrationToken, MessageRegistrationHandle> registration,
1212
+ Action<int> normalAssert,
1213
+ Action<int> removalAssert,
1214
+ Action finalAssert,
1215
+ Action reset
1216
+ )
1217
+ {
1218
+ HashSet<MessageRegistrationHandle> handles = new(_numRegistrations);
1219
+ try
1220
+ {
1221
+ for (int i = 0; i < _numRegistrations; ++i)
1222
+ {
1223
+ MessageRegistrationHandle handle = registration(_token);
1224
+ bool neverSeen = handles.Add(handle);
1225
+ Assert.IsTrue(
1226
+ neverSeen,
1227
+ "Handle {0} at count {1} was a duplicate.",
1228
+ handle,
1229
+ neverSeen
1230
+ );
1231
+ }
1232
+
1233
+ for (int i = 0; i < 100; ++i)
1234
+ {
1235
+ normalAssert(i);
1236
+ }
1237
+
1238
+ reset();
1239
+ int expected = 0;
1240
+ foreach (
1241
+ MessageRegistrationHandle handle in handles
1242
+ .OrderBy(_ => _random.Next())
1243
+ .ToList()
1244
+ )
1245
+ {
1246
+ removalAssert(expected++);
1247
+ handles.Remove(handle);
1248
+ _token.RemoveRegistration(handle);
1249
+ }
1250
+
1251
+ reset();
1252
+ for (int i = 0; i < 100; ++i)
1253
+ {
1254
+ finalAssert();
1255
+ }
1256
+ }
1257
+ finally
1258
+ {
1259
+ foreach (MessageRegistrationHandle handle in handles)
1260
+ {
1261
+ _token.RemoveRegistration(handle);
1262
+ }
1263
+ }
1264
+ }
1265
+ }
1266
+ }