45 lines
1.5 KiB
C#
45 lines
1.5 KiB
C#
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<IShrinkGeneratedSubscriber>(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);
|
|
}
|
|
}
|
|
}
|