public void WhenSubscriberIsAlive_ThenObserverIsAlive()
        {
            var subscriber = new Mock<ISubscriber>();

            var observer = new WeakObserverEvent<EventArgs>(subscriber.Object.OnNext, null, null);

            Assert.True(observer.IsAlive);
        }
        public void WhenSubscriberIsAlive_ThenObserverIsAlive()
        {
            var subscriber = new Mock <ISubscriber>();

            var observer = new WeakObserverEvent <EventArgs>(subscriber.Object.OnNext, null, null);

            Assert.True(observer.IsAlive);
        }
        public void WhenCompleted_ThenInvokesCallback()
        {
            var subscriber = new Mock<ISubscriber>();
            var observer = new WeakObserverEvent<EventArgs>(subscriber.Object.OnNext, subscriber.Object.OnError, subscriber.Object.OnCompleted);

            observer.OnCompleted();

            subscriber.Verify(x => x.OnCompleted());
        }
        public void WhenCompleted_ThenInvokesCallback()
        {
            var subscriber = new Mock <ISubscriber>();
            var observer   = new WeakObserverEvent <EventArgs>(subscriber.Object.OnNext, subscriber.Object.OnError, subscriber.Object.OnCompleted);

            observer.OnCompleted();

            subscriber.Verify(x => x.OnCompleted());
        }
        public void WhenError_ThenInvokesCallback()
        {
            var subscriber = new Mock<ISubscriber>();
            var observer = new WeakObserverEvent<EventArgs>(subscriber.Object.OnNext, subscriber.Object.OnError, subscriber.Object.OnCompleted);
            var exception = new InvalidOperationException();

            observer.OnError(exception);

            subscriber.Verify(x => x.OnError(exception));
        }
        public void WhenError_ThenInvokesCallback()
        {
            var subscriber = new Mock <ISubscriber>();
            var observer   = new WeakObserverEvent <EventArgs>(subscriber.Object.OnNext, subscriber.Object.OnError, subscriber.Object.OnCompleted);
            var exception  = new InvalidOperationException();

            observer.OnError(exception);

            subscriber.Verify(x => x.OnError(exception));
        }
        public void WhenSourceEventRaisedAndWeakSubscriberDisposed_ThenRemovesSubscriber()
        {
            EventHandler raiseHandler   = null;
            var          removed        = 0;
            var          observer       = new Mock <IObserver <IEvent <EventArgs> > >();
            var          weakSubscriber = new WeakObserverEvent <EventArgs>(observer.Object.OnNext, observer.Object.OnError, observer.Object.OnCompleted);
            var          observable     = new WeakObservableEvent <EventHandler, EventArgs>(
                handler => new EventHandler(handler.Invoke),
                handler => raiseHandler = handler,
                handler => removed++);

            observable.Subscribe(weakSubscriber);

            Assert.NotNull(raiseHandler);
            Assert.Equal(0, removed);

            observer = null;
            GC.Collect();

            raiseHandler(this, EventArgs.Empty);

            Assert.Equal(1, removed);
        }
        public void WhenSourceEventRaisedAndWeakSubscriberDisposed_ThenRemovesSubscriber()
        {
            EventHandler raiseHandler = null;
            var removed = 0;
            var observer = new Mock<IObserver<IEvent<EventArgs>>>();
            var weakSubscriber = new WeakObserverEvent<EventArgs>(observer.Object.OnNext, observer.Object.OnError, observer.Object.OnCompleted);
            var observable = new WeakObservableEvent<EventHandler, EventArgs>(
                handler => new EventHandler(handler.Invoke),
                handler => raiseHandler = handler,
                handler => removed++);

            observable.Subscribe(weakSubscriber);

            Assert.NotNull(raiseHandler);
            Assert.Equal(0, removed);

            observer = null;
            GC.Collect();

            raiseHandler(this, EventArgs.Empty);

            Assert.Equal(1, removed);
        }