public void A_通常の送受信()
        {
            var mock = Substitute.For <IObserver <SignalWithClassParameter> >();

            Receiver.Receive().Subscribe(mock.OnNext);

            Publisher.Publish(SignalWithClassParameter.Create());
            Publisher.Publish(SignalWithClassParameter.Create());

            mock.Received(2).OnNext(Arg.Any <SignalWithClassParameter>());
        }
        public void D_パラメータの内容が等しくても参照が異なる場合は通さない()
        {
            var mock = Substitute.For <IObserver <SignalWithClassParameter> >();

            var signalForPublish = SignalWithClassParameter.Create(new SignalWithClassParameter.ClassParameter(true, 1));
            var signalForReceive = SignalWithClassParameter.Create(new SignalWithClassParameter.ClassParameter(true, 1));

            Receiver.Receive(signalForReceive).Subscribe(mock.OnNext);

            Publisher.Publish(signalForPublish);

            mock.DidNotReceive().OnNext(signalForPublish);
        }
        public void B_異なるインスタンスでも通す()
        {
            var mock = Substitute.For <IObserver <SignalWithClassParameter> >();

            var signalForPublish = SignalWithClassParameter.Create();
            var signalForReceive = SignalWithClassParameter.Create();

            Assert.False(ReferenceEquals(signalForPublish, signalForReceive));

            Receiver.Receive(signalForReceive).Subscribe(mock.OnNext);

            Publisher.Publish(signalForPublish);

            mock.Received().OnNext(signalForPublish);
        }
        public void G_パラメータでフィルタできる()
        {
            var mock = Substitute.For <IObserver <SignalWithClassParameter> >();

            var parameterPublishable   = new SignalWithClassParameter.ClassParameter(true, 1);
            var parameterUnpublishable = new SignalWithClassParameter.ClassParameter(true, 1);

            Receiver.Receive(parameterPublishable).Subscribe(mock.OnNext);

            Publisher.Publish(SignalWithClassParameter.Create(parameterPublishable));
            Publisher.Publish(SignalWithClassParameter.Create(parameterUnpublishable));

            mock.Received(1).OnNext(SignalWithClassParameter.Create(parameterPublishable));
            mock.DidNotReceive().OnNext(SignalWithClassParameter.Create(parameterUnpublishable));
        }
        public void F_送信したパラメータを受け取れる()
        {
            var mock = Substitute.For <IObserver <SignalWithClassParameter> >();

            var parameter = new SignalWithClassParameter.ClassParameter(true, 1);

            Receiver.Receive().Subscribe(mock.OnNext);
            Receiver
            .Receive()
            .Subscribe(
                signal =>
            {
                Assert.That(signal.Parameter.BoolValue, Is.True);
                Assert.That(signal.Parameter.IntValue, Is.EqualTo(1));
            }
                );

            Publisher.Publish(SignalWithClassParameter.Create(parameter));
            Publisher.Publish(SignalWithClassParameter.Create(parameter));

            mock.Received(2).OnNext(SignalWithClassParameter.Create(parameter));
        }