Files
ShrinkEventBus/Development~/UnityProject/Assets/ConsumerTests/ConsumerTests.cs
T

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);
}
}
}