using System.Collections; using System.Threading; using Cysharp.Threading.Tasks; using NUnit.Framework; using ShrinkEventBus; using UnityEngine.TestTools; namespace EventBusConsumer { internal readonly struct Ping : IShrinkEvent { } [ShrinkEventSubscriber] internal sealed class Subscriber { public int SyncHits; public int AsyncHits; [ShrinkSubscribe] private void OnPing(Ping value) => SyncHits++; [ShrinkSubscribe] private async UniTask OnPingAsync(Ping value, CancellationToken token) { await UniTask.Yield(cancellationToken: token); AsyncHits++; } } public sealed class ConsumerTests { [UnityTest] public IEnumerator ConsumerAssemblyGeneratesBindingsAndDisposesThem() { using var host = new ShrinkEventBusHost(); var bus = host.CreateBus(ShrinkBusKey.Game, ShrinkBusOptions.Inline()); var target = new Subscriber(); Assert.IsInstanceOf(target); var binding = host.Attach(target, ShrinkBusKey.Game); yield return bus.PostAsync(new Ping()).ToCoroutine(); Assert.AreEqual(1, target.SyncHits); Assert.AreEqual(1, target.AsyncHits); binding.Dispose(); yield return bus.PostAsync(new Ping()).ToCoroutine(); Assert.AreEqual(1, target.SyncHits); Assert.AreEqual(1, target.AsyncHits); } } }