using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Signals { [TestFixture] public class TestAsyncSignals : ZenjectUnitTestFixture { static int CallCount; [Inject] SignalBus _signalBus = null; [Inject] Receiver1 _receiver1 = null; [Inject] Receiver2 _receiver2 = null; [Inject] TickableManager _tickManager = null; [InjectOptional] Foo _foo = null; public override void Setup() { base.Setup(); SignalBusInstaller.Install(Container); ZenjectManagersInstaller.Install(Container); } [Test] public void TestBasicAsync() { Container.DeclareSignal().RunAsync(); Container.DeclareSignal().RunAsync(); Container.Bind().AsSingle(); Container.Bind().AsSingle(); Container.BindSignal().ToMethod(x => x.OnSignal).FromResolve(); Container.BindSignal().ToMethod(x => x.OnSignal).FromResolve(); Container.ResolveRoots(); Container.Resolve().Initialize(); Container.Inject(this); CallCount = 1; _receiver1.CallIndex = 0; _receiver2.CallIndex = 0; _signalBus.Fire(); _signalBus.Fire(); Assert.IsEqual(_receiver1.CallIndex, 0); Assert.IsEqual(_receiver2.CallIndex, 0); _tickManager.Update(); Assert.IsEqual(_receiver1.CallIndex, 1); Assert.IsEqual(_receiver2.CallIndex, 2); } [Test] public void TestTickPriority() { Container.DeclareSignal().WithTickPriority(1); Container.DeclareSignal().WithTickPriority(-4); Container.BindInterfacesAndSelfTo().AsSingle(); Container.Bind().AsSingle(); Container.Bind().AsSingle(); Container.BindSignal().ToMethod(x => x.OnSignal).FromResolve(); Container.BindSignal().ToMethod(x => x.OnSignal).FromResolve(); Container.ResolveRoots(); Container.Resolve().Initialize(); Container.Inject(this); CallCount = 1; _receiver1.CallIndex = 0; _receiver2.CallIndex = 0; _foo.CallIndex = 0; _signalBus.Fire(); _signalBus.Fire(); Assert.IsEqual(_receiver1.CallIndex, 0); Assert.IsEqual(_receiver2.CallIndex, 0); Assert.IsEqual(_foo.CallIndex, 0); _tickManager.Update(); Assert.IsEqual(_receiver2.CallIndex, 1); Assert.IsEqual(_foo.CallIndex, 2); Assert.IsEqual(_receiver1.CallIndex, 3); } public class Foo : ITickable { public int CallIndex { get; set; } public void Tick() { CallIndex = CallCount++; } } public class Signal1 { } public class Signal2 { } public class Receiver1 { public int CallIndex { get; set; } public void OnSignal() { CallIndex = CallCount++; } } public class Receiver2 { public int CallIndex { get; set; } public void OnSignal() { CallIndex = CallCount++; } } } }