public void NotifyObservers_ObserverDetached_ObserverIsNoLongerNotified()
        {
            // Setup
            var mocks    = new MockRepository();
            var observer = mocks.StrictMock <IObserver>();

            mocks.ReplayAll();

            var equalitySource = new object();
            var sourceObject   = new SimpleObservable(equalitySource);
            var context        = new SimpleObservableWrappedObjectContext(sourceObject);

            context.Attach(observer);
            context.Detach(observer);

            // Call
            context.NotifyObservers();

            // Assert
            mocks.VerifyAll(); // Expect no UpdateObserver calls on 'observer'
        }
        public void GivenContextWithAttachedObserver_WhenWrappedDataNotifiesObservers_ThenObserverIsNotified()
        {
            // Given
            var mocks    = new MockRepository();
            var observer = mocks.StrictMock <IObserver>();

            observer.Expect(o => o.UpdateObserver());
            mocks.ReplayAll();

            var equalitySource = new object();
            var sourceObject   = new SimpleObservable(equalitySource);
            var context        = new SimpleObservableWrappedObjectContext(sourceObject);

            context.Attach(observer);

            // When
            sourceObject.NotifyObservers();

            // Then
            mocks.VerifyAll(); // Expect call UpdateObserver on 'observer'
        }