Index: Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs =================================================================== diff -u -re217c241d1d57575c99e1062b449ea595f9fc764 -raf8fe0bbc3b765d4361edc18f3e1ebb79141f4b5 --- Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs (.../PropertyGridViewTest.cs) (revision e217c241d1d57575c99e1062b449ea595f9fc764) +++ Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs (.../PropertyGridViewTest.cs) (revision af8fe0bbc3b765d4361edc18f3e1ebb79141f4b5) @@ -38,6 +38,7 @@ { // Call TestDelegate call = () => new Gui.Forms.PropertyGridView.PropertyGridView(null); + // Assert string paramName = Assert.Throws(call).ParamName; Assert.AreEqual("propertyResolver", paramName); @@ -151,7 +152,7 @@ } [Test] - public void GivenPropertyGridViewWithObservableSet_WhenRefreshRequiredEventRaised_ThenRefreshTriggered() + public void GivenPropertyGridViewWithDataSet_WhenRefreshRequiredEventRaised_ThenRefreshTriggered() { // Given var dataObject = new object(); @@ -179,6 +180,101 @@ } [Test] + public void GivenDisposedPropertyGridViewWithDataSet_WhenRefreshRequiredEventRaised_ThenRefreshNotTriggered() + { + // Given + var dataObject = new object(); + + var mockRepository = new MockRepository(); + var objectProperties = mockRepository.Stub(); + var propertyResolver = mockRepository.StrictMock(); + 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(); + } + + [Test] + public void GivenPropertyGridViewWithNewDataSet_WhenRefreshRequiredEventRaisedOnNewlySetData_ThenRefreshTriggered() + { + // Given + var dataObject1 = new object(); + var dataObject2 = new object(); + + var mockRepository = new MockRepository(); + var objectProperties1 = mockRepository.Stub(); + var objectProperties2 = mockRepository.Stub(); + var propertyResolver = mockRepository.StrictMock(); + 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 + objectProperties2.Raise(p => p.RefreshRequired += null, + objectProperties2, + EventArgs.Empty); + + // Then + Assert.AreEqual(1, propertyGridView.RefreshCalled); + } + mockRepository.VerifyAll(); + } + + [Test] + public void GivenPropertyGridViewWithNewDataSet_WhenRefreshRequiredEventRaisedOnPreviouslySetData_ThenRefreshNotTriggered() + { + // Given + var dataObject1 = new object(); + var dataObject2 = new object(); + + var mockRepository = new MockRepository(); + var objectProperties1 = mockRepository.Stub(); + var objectProperties2 = mockRepository.Stub(); + var propertyResolver = mockRepository.StrictMock(); + 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(); + } + + [Test] public void Dispose_AlreadyDisposed_DoesNotThrowException() { // Setup Index: Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyResolverTest.cs =================================================================== diff -u -re217c241d1d57575c99e1062b449ea595f9fc764 -raf8fe0bbc3b765d4361edc18f3e1ebb79141f4b5 --- Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyResolverTest.cs (.../PropertyResolverTest.cs) (revision e217c241d1d57575c99e1062b449ea595f9fc764) +++ Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyResolverTest.cs (.../PropertyResolverTest.cs) (revision af8fe0bbc3b765d4361edc18f3e1ebb79141f4b5) @@ -245,7 +245,7 @@ private class PropertiesForA : ObjectProperties {} - private class AlternativePropertiesForA : ObjectProperties {} + private class AlternativePropertiesForA : ObjectProperties {} private class InheritsFromPropertiesForA : PropertiesForA {} Index: Core/Common/test/Core.Common.Gui.Test/PropertyBag/ObjectPropertiesTest.cs =================================================================== diff -u -r7fd0c8f65992f3f67a267ad95dff455e93f19236 -raf8fe0bbc3b765d4361edc18f3e1ebb79141f4b5 --- Core/Common/test/Core.Common.Gui.Test/PropertyBag/ObjectPropertiesTest.cs (.../ObjectPropertiesTest.cs) (revision 7fd0c8f65992f3f67a267ad95dff455e93f19236) +++ Core/Common/test/Core.Common.Gui.Test/PropertyBag/ObjectPropertiesTest.cs (.../ObjectPropertiesTest.cs) (revision af8fe0bbc3b765d4361edc18f3e1ebb79141f4b5) @@ -39,7 +39,6 @@ { // Assert Assert.IsInstanceOf(properties); - Assert.IsInstanceOf(properties); Assert.IsNull(properties.Data); } } @@ -101,9 +100,57 @@ } [Test] - public void GivenObjectPropertiesWithObservableDataSet_WhenNotifyingObserverAfterDispose_RefreshRequiredEventNotRaised() + public void GivenObjectPropertiesWithNewObservableDataSet_WhenNotifyingPreviouslySetObserver_RefreshRequiredEventNotRaised() { // Given + var observable1 = new SimpleObservable(); + var observable2 = new SimpleObservable(); + using (var properties = new ObjectProperties + { + Data = observable1 + }) + { + properties.Data = observable2; + + var refreshRequiredRaised = 0; + properties.RefreshRequired += (sender, args) => refreshRequiredRaised++; + + // When + observable1.NotifyObservers(); + + // Then + Assert.AreEqual(0, refreshRequiredRaised); + } + } + + [Test] + public void GivenObjectPropertiesWithNewObservableDataSet_WhenNotifyingNewlySetObserver_RefreshRequiredEventRaised() + { + // Given + var observable1 = new SimpleObservable(); + var observable2 = new SimpleObservable(); + using (var properties = new ObjectProperties + { + Data = observable1 + }) + { + properties.Data = observable2; + + var refreshRequiredRaised = 0; + properties.RefreshRequired += (sender, args) => refreshRequiredRaised++; + + // When + observable2.NotifyObservers(); + + // Then + Assert.AreEqual(1, refreshRequiredRaised); + } + } + + [Test] + public void GivenDisposedObjectPropertiesWithObservableDataSet_WhenNotifyingObserver_RefreshRequiredEventNotRaised() + { + // Given var observable = new SimpleObservable(); var properties = new ObjectProperties { @@ -113,8 +160,9 @@ var refreshRequiredRaised = 0; properties.RefreshRequired += (sender, args) => refreshRequiredRaised++; - // When properties.Dispose(); + + // When observable.NotifyObservers(); // Then