com.wallstop-studios.dxmessaging 1.0.0-rc8

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