using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Signals { [TestFixture] public class TestBindSignal : ZenjectUnitTestFixture { [SetUp] public void CommonInstall() { SignalBusInstaller.Install(Container); Container.Inject(this); } [Test] public void TestIncompleteBinding() { Container.DeclareSignal(); Container.BindSignal(); Assert.Throws(() => Container.FlushBindings()); } [Test] public void TestBindWithoutDeclaration() { Container.BindSignal().ToMethod(() => {}); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestStaticMethodHandler() { Container.DeclareSignal(); bool received = false; Container.BindSignal().ToMethod(() => received = true); Container.ResolveRoots(); var signalBus = Container.Resolve(); Assert.That(!received); signalBus.Fire(); Assert.That(received); } [Test] public void TestStaticMethodHandlerWithArgs() { Container.DeclareSignal(); FooSignal received = null; Container.BindSignal().ToMethod(x => received = x); Container.ResolveRoots(); var signalBus = Container.Resolve(); var sent = new FooSignal(); Assert.IsNull(received); signalBus.Fire(sent); Assert.IsEqual(received, sent); } [Test] public void TestInstanceMethodHandler() { Container.DeclareSignal(); var qux = new Qux(); Container.BindSignal() .ToMethod(x => x.OnFoo).From(b => b.FromInstance(qux)); Container.ResolveRoots(); var signalBus = Container.Resolve(); Assert.That(!qux.HasRecievedSignal); signalBus.Fire(); Assert.That(qux.HasRecievedSignal); } [Test] public void TestInstanceMethodHandler2() { Container.DeclareSignal(); var gorp = new Gorp(); Container.BindSignal() .ToMethod(x => x.OnFoo).From(b => b.FromInstance(gorp)); Container.ResolveRoots(); var signalBus = Container.Resolve(); var sent = new FooSignal(); Assert.IsNull(gorp.ReceivedValue); signalBus.Fire(sent); Assert.IsEqual(gorp.ReceivedValue, sent); } [Test] public void TestMoveIntoDirectSubContainers() { Container.DeclareSignal(); var gorp = new Gorp(); Container.BindSignal() .ToMethod(x => x.OnFoo).From(b => b.FromInstance(gorp)).MoveIntoDirectSubContainers(); Container.ResolveRoots(); var signalBus1 = Container.Resolve(); var sent = new FooSignal(); Assert.IsNull(gorp.ReceivedValue); signalBus1.Fire(sent); Assert.IsNull(gorp.ReceivedValue); var subContainer = Container.CreateSubContainer(); subContainer.ResolveRoots(); var signalBus2 = Container.Resolve(); Assert.IsNull(gorp.ReceivedValue); signalBus2.Fire(sent); Assert.IsEqual(gorp.ReceivedValue, sent); } public class Qux { public void OnFoo() { HasRecievedSignal = true; } public bool HasRecievedSignal { get; private set; } } public class Gorp { public void OnFoo(FooSignal foo) { ReceivedValue = foo; } public FooSignal ReceivedValue { get; private set; } } public class FooSignal { } } }