using System; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Signals { [TestFixture] public class TestSignalIdentifiers : ZenjectUnitTestFixture { [SetUp] public void CommonInstall() { SignalBusInstaller.Install(Container); } [Test] public void TestMissingDeclaration() { var signalBus = Container.Resolve(); Assert.Throws(() => signalBus.FireId("asdf")); } [Test] public void TestSubscribeAndUnsubscribe() { var signalId = "asdf"; Container.DeclareSignal().WithId(signalId); var signalBus = Container.Resolve(); bool received = false; Action callback = () => received = true; signalBus.SubscribeId(signalId, callback); Assert.Throws(() => signalBus.Subscribe(callback)); Assert.That(!received); signalBus.FireId(signalId); Assert.That(received); Assert.Throws(() => signalBus.Fire()); Assert.Throws(() => signalBus.FireId("asdfz")); received = false; signalBus.FireId(signalId); Assert.That(received); signalBus.UnsubscribeId(signalId, callback); received = false; signalBus.FireId(signalId); Assert.That(!received); } [Test] public void TestIncompleteBinding() { Container.DeclareSignal().WithId("asdf"); Container.BindSignal().WithId("asdf"); Assert.Throws(() => Container.FlushBindings()); } [Test] public void TestBindWithoutDeclaration() { Container.BindSignal().WithId("asdf").ToMethod(() => {}); Assert.Throws(() => Container.ResolveRoots()); } [Test] public void TestStaticMethodHandler() { Container.DeclareSignal().WithId("asdf"); bool received = false; Container.BindSignal().WithId("asdf").ToMethod(() => received = true); Container.ResolveRoots(); var signalBus = Container.Resolve(); Assert.That(!received); signalBus.FireId("asdf"); Assert.That(received); } [Test] public void TestStaticMethodHandlerWithArgs() { Container.DeclareSignal().WithId("asdf"); FooSignal received = null; Container.BindSignal().WithId("asdf").ToMethod(x => received = x); Container.ResolveRoots(); var signalBus = Container.Resolve(); var sent = new FooSignal(); Assert.IsNull(received); signalBus.FireId("asdf", sent); Assert.IsEqual(received, sent); } [Test] public void TestInstanceMethodHandler() { Container.DeclareSignal().WithId("asdf"); var qux = new Qux(); Container.BindSignal().WithId("asdf") .ToMethod(x => x.OnFoo).From(b => b.FromInstance(qux)); Container.ResolveRoots(); var signalBus = Container.Resolve(); Assert.That(!qux.HasRecievedSignal); signalBus.FireId("asdf"); Assert.That(qux.HasRecievedSignal); } public class Qux { public void OnFoo() { HasRecievedSignal = true; } public bool HasRecievedSignal { get; private set; } } public class FooSignal { } public class Foo { } } }