using System; using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Signals { [TestFixture] public class TestSignals1 : ZenjectUnitTestFixture { [Test] public void TestMissingDeclaration() { SignalBusInstaller.Install(Container); var signalBus = Container.Resolve(); Assert.Throws(() => signalBus.Fire()); } [Test] public void TestSubscribeAndUnsubscribe() { SignalBusInstaller.Install(Container); Container.DeclareSignal(); var signalBus = Container.Resolve(); bool received = false; Action callback = () => received = true; signalBus.Subscribe(callback); Assert.That(!received); signalBus.Fire(); Assert.That(received); received = false; signalBus.Fire(); Assert.That(received); signalBus.Unsubscribe(callback); received = false; signalBus.Fire(); Assert.That(!received); } [Test] public void TestWithArgs() { SignalBusInstaller.Install(Container); Container.DeclareSignal(); var signalBus = Container.Resolve(); FooSignal received = null; signalBus.Subscribe(x => received = x); var sent = new FooSignal(); signalBus.Fire(sent); Assert.IsEqual(received, sent); } [Test] public void TestUnsubscribeWithoutSubscribe() { SignalBusInstaller.Install(Container); Container.DeclareSignal(); var signalBus = Container.Resolve(); Action callback = () => {}; Assert.Throws(() => signalBus.Unsubscribe(callback)); signalBus.TryUnsubscribe(callback); signalBus.Subscribe(callback); signalBus.Unsubscribe(callback); } [Test] public void TestUntypedSubscribe() { SignalBusInstaller.Install(Container); Container.DeclareSignal(); Container.DeclareSignal(); var signalBus = Container.Resolve(); object received = null; signalBus.Subscribe(typeof(FooSignal), x => { Assert.That(x is FooSignal); received = x; }); var data = new FooSignal(); signalBus.Fire(data); Assert.IsEqual(received, data); signalBus.Fire(new BarSignal()); } public class FooSignal { } public class BarSignal { public string Value; } } }