public void GivenPropertyGridViewWithNewDataSet_WhenRefreshRequiredEventRaisedOnPreviouslySetData_ThenRefreshNotTriggered()
        {
            // Given
            var dataObject1 = new object();
            var dataObject2 = new object();

            var mockRepository    = new MockRepository();
            var objectProperties1 = mockRepository.Stub <IObjectProperties>();
            var objectProperties2 = mockRepository.Stub <IObjectProperties>();
            var propertyResolver  = mockRepository.StrictMock <IPropertyResolver>();

            propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject1)).Return(new DynamicPropertyBag(objectProperties1));
            propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject2)).Return(new DynamicPropertyBag(objectProperties2));
            mockRepository.ReplayAll();

            using (var propertyGridView = new TestGuiPropertyGridView(propertyResolver)
            {
                Data = dataObject1
            })
            {
                propertyGridView.Data = dataObject2;

                // When
                objectProperties1.Raise(p => p.RefreshRequired += null,
                                        objectProperties1,
                                        EventArgs.Empty);

                // Then
                Assert.AreEqual(0, propertyGridView.RefreshCalled);
            }

            mockRepository.VerifyAll();
        }
        public void GivenDisposedPropertyGridViewWithDataSet_WhenRefreshRequiredEventRaised_ThenRefreshNotTriggered()
        {
            // Given
            var dataObject = new object();

            var mockRepository   = new MockRepository();
            var objectProperties = mockRepository.Stub <IObjectProperties>();
            var propertyResolver = mockRepository.StrictMock <IPropertyResolver>();

            propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject)).Return(new DynamicPropertyBag(objectProperties));
            mockRepository.ReplayAll();

            var propertyGridView = new TestGuiPropertyGridView(propertyResolver)
            {
                Data = dataObject
            };

            propertyGridView.Dispose();

            // When
            objectProperties.Raise(p => p.RefreshRequired += null,
                                   objectProperties,
                                   EventArgs.Empty);

            // Then
            Assert.AreEqual(0, propertyGridView.RefreshCalled);
            mockRepository.VerifyAll();
        }
        public void GivenPropertyGridViewWithObservableDataSet_WhenNewDataObjectSet_ThenPreviousDataObserverDetached()
        {
            // Given
            var mockRepository       = new MockRepository();
            var observableDataObject = mockRepository.StrictMock <IObservable>();

            observableDataObject.Expect(d => d.Attach(null)).IgnoreArguments();
            observableDataObject.Expect(d => d.Detach(null)).IgnoreArguments();
            var dataObjectProperties = mockRepository.Stub <IObjectProperties>();

            dataObjectProperties.Data = observableDataObject;

            var newDataObject    = new object();
            var propertyResolver = mockRepository.StrictMock <IPropertyResolver>();

            propertyResolver.Expect(prs => prs.GetObjectProperties(observableDataObject)).Return(new DynamicPropertyBag(dataObjectProperties));
            propertyResolver.Expect(prs => prs.GetObjectProperties(newDataObject)).Return(null);
            mockRepository.ReplayAll();

            using (var propertyGridView = new TestGuiPropertyGridView(propertyResolver))
            {
                propertyGridView.Data = observableDataObject;

                // When
                propertyGridView.Data = newDataObject;
            }

            // Then
            mockRepository.VerifyAll();
        }
        public void GivenPropertyGridViewWithDisposableDataSet_WhenDisposing_ThenObjectPropertiesCorrectlyDisposed()
        {
            // Given
            var    mockRepository       = new MockRepository();
            var    dataObject           = new object();
            object dataObjectProperties = mockRepository.StrictMultiMock(typeof(IDisposable), typeof(IObjectProperties));

            dataObjectProperties.Expect(d => ((IDisposable)d).Dispose());
            dataObjectProperties.Expect(d => ((IObjectProperties)d).RefreshRequired += null).IgnoreArguments();
            dataObjectProperties.Expect(d => ((IObjectProperties)d).RefreshRequired -= null).IgnoreArguments();
            dataObjectProperties.Stub(d => ((IObjectProperties)d).Data).Return(dataObject);

            var propertyResolver = mockRepository.StrictMock <IPropertyResolver>();

            propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject)).Return(new DynamicPropertyBag(dataObjectProperties));
            mockRepository.ReplayAll();

            var propertyGridView = new TestGuiPropertyGridView(propertyResolver)
            {
                Data = dataObject
            };

            // When
            propertyGridView.Dispose();

            // Then
            mockRepository.VerifyAll();
        }
        public void Data_SetSameDataObject_NoRedundantViewUpdate()
        {
            // Setup
            var dataObject = new object();

            var mockRepository   = new MockRepository();
            var propertyResolver = mockRepository.StrictMock <IPropertyResolver>();

            propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject)).Return(null);
            mockRepository.ReplayAll();

            using (var propertyGridView = new TestGuiPropertyGridView(propertyResolver))
            {
                propertyGridView.Data = dataObject;

                object selectedObject = propertyGridView.SelectedObject;

                // Call
                propertyGridView.Data = dataObject;

                // Assert
                Assert.AreSame(selectedObject, propertyGridView.SelectedObject);
                Assert.AreEqual(0, propertyGridView.RefreshCalled);
            }

            mockRepository.VerifyAll();
        }