Index: Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs
===================================================================
diff -u -re217c241d1d57575c99e1062b449ea595f9fc764 -r1ab3d180b9a6ea55959a33564b11bea9a10db3c8
--- Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs (.../PropertyGridView.cs) (revision e217c241d1d57575c99e1062b449ea595f9fc764)
+++ Core/Common/src/Core.Common.Gui/Forms/PropertyGridView/PropertyGridView.cs (.../PropertyGridView.cs) (revision 1ab3d180b9a6ea55959a33564b11bea9a10db3c8)
@@ -136,7 +136,9 @@
if (objectProperties != null)
{
objectProperties.RefreshRequired -= HandleRefreshRequired;
- objectProperties.Dispose();
+
+ var disposableObjectProperties = objectProperties as IDisposable;
+ disposableObjectProperties?.Dispose();
}
}
Index: Core/Common/src/Core.Common.Gui/PropertyBag/IObjectProperties.cs
===================================================================
diff -u -re217c241d1d57575c99e1062b449ea595f9fc764 -r1ab3d180b9a6ea55959a33564b11bea9a10db3c8
--- Core/Common/src/Core.Common.Gui/PropertyBag/IObjectProperties.cs (.../IObjectProperties.cs) (revision e217c241d1d57575c99e1062b449ea595f9fc764)
+++ Core/Common/src/Core.Common.Gui/PropertyBag/IObjectProperties.cs (.../IObjectProperties.cs) (revision 1ab3d180b9a6ea55959a33564b11bea9a10db3c8)
@@ -26,7 +26,7 @@
///
/// Interface for object properties.
///
- public interface IObjectProperties : IDisposable
+ public interface IObjectProperties
{
///
/// Gets or sets the data of the object properties.
Index: Core/Common/src/Core.Common.Gui/PropertyBag/ObjectProperties.cs
===================================================================
diff -u -r9a4eded3d7de675594c149438dbc9512674cc5c2 -r1ab3d180b9a6ea55959a33564b11bea9a10db3c8
--- Core/Common/src/Core.Common.Gui/PropertyBag/ObjectProperties.cs (.../ObjectProperties.cs) (revision 9a4eded3d7de675594c149438dbc9512674cc5c2)
+++ Core/Common/src/Core.Common.Gui/PropertyBag/ObjectProperties.cs (.../ObjectProperties.cs) (revision 1ab3d180b9a6ea55959a33564b11bea9a10db3c8)
@@ -29,7 +29,7 @@
/// Base class for object properties with data of type .
///
/// Type of .
- public class ObjectProperties : IObjectProperties
+ public class ObjectProperties : IObjectProperties, IDisposable
{
private readonly Observer refreshRequiredObserver;
Index: Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs
===================================================================
diff -u -raf8fe0bbc3b765d4361edc18f3e1ebb79141f4b5 -r1ab3d180b9a6ea55959a33564b11bea9a10db3c8
--- Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs (.../PropertyGridViewTest.cs) (revision af8fe0bbc3b765d4361edc18f3e1ebb79141f4b5)
+++ Core/Common/test/Core.Common.Gui.Test/Forms/PropertyGridView/PropertyGridViewTest.cs (.../PropertyGridViewTest.cs) (revision 1ab3d180b9a6ea55959a33564b11bea9a10db3c8)
@@ -65,6 +65,7 @@
Assert.AreEqual("Gecategoriseerd", toolStrip.Items[0].ToolTipText);
Assert.AreEqual("Alfabetisch", toolStrip.Items[1].ToolTipText);
}
+
mockRepository.VerifyAll();
}
@@ -93,6 +94,7 @@
Assert.IsFalse(toolStrip.Items[3].Visible);
Assert.IsFalse(toolStrip.Items[4].Visible);
}
+
mockRepository.VerifyAll();
}
@@ -121,6 +123,7 @@
Assert.AreSame(selectedObject, propertyGridView.SelectedObject);
Assert.AreEqual(0, propertyGridView.RefreshCalled);
}
+
mockRepository.VerifyAll();
}
@@ -148,10 +151,67 @@
Assert.AreSame(selectedObject, propertyGridView.SelectedObject);
Assert.AreEqual(0, propertyGridView.RefreshCalled);
}
+
mockRepository.VerifyAll();
}
[Test]
+ public void Data_SetNewDataObject_PreviousDataDisposed()
+ {
+ // Setup
+ var mockRepository = new MockRepository();
+ var dataObject = new object();
+ object dataObjectProperties = mockRepository.StrictMultiMock(typeof(IDisposable), typeof(IObjectProperties));
+ dataObjectProperties.Expect(d => ((IDisposable) d).Dispose());
+ dataObjectProperties.Stub(d => ((IObjectProperties) d).RefreshRequired += null).IgnoreArguments();
+ dataObjectProperties.Stub(d => ((IObjectProperties) d).RefreshRequired -= null).IgnoreArguments();
+
+ var newDataObject = new object();
+ var propertyResolver = mockRepository.StrictMock();
+ propertyResolver.Expect(prs => prs.GetObjectProperties(dataObject)).Return(new DynamicPropertyBag(dataObjectProperties));
+ propertyResolver.Expect(prs => prs.GetObjectProperties(newDataObject)).Return(null);
+ mockRepository.ReplayAll();
+
+ using (var propertyGridView = new TestGuiPropertyGridView(propertyResolver))
+ {
+ propertyGridView.Data = dataObject;
+
+ // Call
+ propertyGridView.Data = newDataObject;
+ }
+
+ // Assert
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ 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.Stub(d => ((IObjectProperties) d).RefreshRequired += null).IgnoreArguments();
+ dataObjectProperties.Stub(d => ((IObjectProperties) d).RefreshRequired -= null).IgnoreArguments();
+
+ var propertyResolver = mockRepository.StrictMock();
+ 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();
+ }
+
+ [Test]
public void GivenPropertyGridViewWithDataSet_WhenRefreshRequiredEventRaised_ThenRefreshTriggered()
{
// Given
@@ -176,6 +236,7 @@
// Then
Assert.AreEqual(1, propertyGridView.RefreshCalled);
}
+
mockRepository.VerifyAll();
}
@@ -238,6 +299,7 @@
// Then
Assert.AreEqual(1, propertyGridView.RefreshCalled);
}
+
mockRepository.VerifyAll();
}
@@ -271,6 +333,7 @@
// Then
Assert.AreEqual(0, propertyGridView.RefreshCalled);
}
+
mockRepository.VerifyAll();
}