Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PropertyClasses/ClosingStructuresFailureMechanismProperties.cs
===================================================================
diff -u -rb9a59dd5f30c8de46d0cabb4e1609c09176a4246 -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PropertyClasses/ClosingStructuresFailureMechanismProperties.cs (.../ClosingStructuresFailureMechanismProperties.cs) (revision b9a59dd5f30c8de46d0cabb4e1609c09176a4246)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Forms/PropertyClasses/ClosingStructuresFailureMechanismProperties.cs (.../ClosingStructuresFailureMechanismProperties.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -19,7 +19,9 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
using System.ComponentModel;
+using Core.Common.Base;
using Core.Common.Base.Data;
using Core.Common.Gui.Attributes;
using Core.Common.Gui.PropertyBag;
@@ -49,6 +51,30 @@
private const int modelFactorSubCriticalFlowPropertyIndex = 9;
private const int modelFactorInflowVolumePropertyIndex = 10;
+ private readonly IFailureMechanismPropertyChangeHandler propertyChangeHandler;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The instance to show the properties of.
+ /// Handler responsible for handling effects of a property change.
+ /// Thrown when any input parameter is null.
+ public ClosingStructuresFailureMechanismProperties(
+ ClosingStructuresFailureMechanism data,
+ IFailureMechanismPropertyChangeHandler handler)
+ {
+ if (data == null)
+ {
+ throw new ArgumentNullException("data");
+ }
+ if (handler == null)
+ {
+ throw new ArgumentNullException("handler");
+ }
+ Data = data;
+ propertyChangeHandler = handler;
+ }
+
#region Length effect parameters
[PropertyOrder(cPropertyIndex)]
@@ -75,8 +101,11 @@
}
set
{
- data.GeneralInput.N2A = value;
- data.NotifyObservers();
+ if (propertyChangeHandler.ConfirmPropertyChange())
+ {
+ data.GeneralInput.N2A = value;
+ ClearOutputAndNotifyObservers();
+ }
}
}
@@ -197,5 +226,14 @@
}
#endregion
+
+ private void ClearOutputAndNotifyObservers()
+ {
+ foreach (IObservable changedObject in propertyChangeHandler.PropertyChanged(data))
+ {
+ changedObject.NotifyObservers();
+ }
+ data.NotifyObservers();
+ }
}
}
\ No newline at end of file
Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs
===================================================================
diff -u -rbdfdac3498b97ecf6bf04d53c581f557e7e87795 -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision bdfdac3498b97ecf6bf04d53c581f557e7e87795)
+++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -60,10 +60,9 @@
{
yield return new PropertyInfo
{
- CreateInstance = context => new ClosingStructuresFailureMechanismProperties
- {
- Data = context.WrappedData
- }
+ CreateInstance = context => new ClosingStructuresFailureMechanismProperties(
+ context.WrappedData,
+ new FailureMechanismPropertyChangeHandler())
};
yield return new PropertyInfo();
yield return new PropertyInfo();
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PropertyClasses/ClosingStructuresFailureMechanismPropertiesTest.cs
===================================================================
diff -u -rc53329fe1a36963d7e55abd8882b8eef43a685aa -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PropertyClasses/ClosingStructuresFailureMechanismPropertiesTest.cs (.../ClosingStructuresFailureMechanismPropertiesTest.cs) (revision c53329fe1a36963d7e55abd8882b8eef43a685aa)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/PropertyClasses/ClosingStructuresFailureMechanismPropertiesTest.cs (.../ClosingStructuresFailureMechanismPropertiesTest.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -19,43 +19,70 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
using System.ComponentModel;
+using System.Linq;
using Core.Common.Base;
using Core.Common.Gui.PropertyBag;
using Core.Common.TestUtil;
using NUnit.Framework;
using Rhino.Mocks;
using Ringtoets.ClosingStructures.Data;
using Ringtoets.ClosingStructures.Forms.PropertyClasses;
+using Ringtoets.Common.Forms.PropertyClasses;
namespace Ringtoets.ClosingStructures.Forms.Test.PropertyClasses
{
[TestFixture]
public class ClosingStructuresFailureMechanismPropertiesTest
{
[Test]
- public void Constructor_ExpectedValues()
+ public void Constructor_DataIsNull_ThrowArgumentNullException()
{
+ // Setup
+ var mocks = new MockRepository();
+ IFailureMechanismPropertyChangeHandler handler = CreateSimpleHandler(mocks);
+ mocks.ReplayAll();
+
// Call
- var properties = new ClosingStructuresFailureMechanismProperties();
+ TestDelegate test = () => new ClosingStructuresFailureMechanismProperties(null, handler);
// Assert
- Assert.IsInstanceOf>(properties);
- Assert.IsNull(properties.Data);
+ string paramName = Assert.Throws(test).ParamName;
+ Assert.AreEqual("data", paramName);
+ mocks.VerifyAll();
}
[Test]
- public void Data_SetNewFailureMechanismContext_ReturnCorrectPropertyValues()
+ public void Constructor_ChangeHandlerIsNull_ThrowArgumentNullException()
{
+ // Call
+ TestDelegate test = () => new ClosingStructuresFailureMechanismProperties(
+ new ClosingStructuresFailureMechanism(),
+ null);
+
+ // Assert
+ string paramName = Assert.Throws(test).ParamName;
+ Assert.AreEqual("handler", paramName);
+ }
+
+ [Test]
+ public void Constructor_ValidValues_ExpectedValues()
+ {
// Setup
+ MockRepository mocks = new MockRepository();
+ IFailureMechanismPropertyChangeHandler changeHandler = CreateSimpleHandler(mocks);
+ mocks.ReplayAll();
+
var failureMechanism = new ClosingStructuresFailureMechanism();
- var properties = new ClosingStructuresFailureMechanismProperties();
-
// Call
- properties.Data = failureMechanism;
+ var properties = new ClosingStructuresFailureMechanismProperties(failureMechanism, changeHandler);
// Assert
+ Assert.IsInstanceOf>(properties);
+ Assert.AreSame(failureMechanism, properties.Data);
+
Assert.AreEqual("Kunstwerken - Betrouwbaarheid sluiting kunstwerk",
properties.Name);
Assert.AreEqual("BSKW",
@@ -76,46 +103,22 @@
Assert.AreEqual(generalInput.ModelFactorSubCriticalFlow.Mean, properties.ModelFactorSubCriticalFlow.Mean);
Assert.AreEqual(generalInput.ModelFactorSubCriticalFlow.CoefficientOfVariation, properties.ModelFactorSubCriticalFlow.CoefficientOfVariation);
Assert.AreEqual(generalInput.ModelFactorInflowVolume.Value, properties.ModelFactorInflowVolume.Value);
- }
- [Test]
- public void SetProperties_IndividualProperties_UpdateDataAndNotifyObservers()
- {
- // Setup
- const int numberOfChangedProperties = 1;
- var mockRepository = new MockRepository();
- var observerMock = mockRepository.StrictMock();
- observerMock.Expect(o => o.UpdateObserver()).Repeat.Times(numberOfChangedProperties);
- mockRepository.ReplayAll();
-
- var failureMechanism = new ClosingStructuresFailureMechanism();
- failureMechanism.Attach(observerMock);
- var properties = new ClosingStructuresFailureMechanismProperties
- {
- Data = failureMechanism
- };
-
- const int newN2A = 10;
-
- // Call
- properties.N2A = newN2A;
-
- // Assert
- Assert.AreEqual(newN2A, failureMechanism.GeneralInput.N2A);
- mockRepository.VerifyAll();
+ mocks.VerifyAll();
}
[Test]
public void Constructor_Always_PropertiesHaveExpectedAttributesValues()
{
// Setup
- var failureMechanism = new ClosingStructuresFailureMechanism();
+ var mocks = new MockRepository();
+ var changeHandler = CreateSimpleHandler(mocks);
+ mocks.ReplayAll();
// Call
- var properties = new ClosingStructuresFailureMechanismProperties
- {
- Data = failureMechanism
- };
+ var properties = new ClosingStructuresFailureMechanismProperties(
+ new ClosingStructuresFailureMechanism(),
+ changeHandler);
// Assert
var generalCategory = "Algemeen";
@@ -196,6 +199,116 @@
"Modelfactor instromend volume [-]",
"Modelfactor instromend volume.",
true);
+ mocks.VerifyAll();
}
+
+ [Test]
+ [TestCase(-10)]
+ [TestCase(-1)]
+ [TestCase(41)]
+ [TestCase(141)]
+ public void N2A_InvalidValueWithConfirmation_UpdateDataAndNotifyObservers(int value)
+ {
+ // Setup
+
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+
+ var handler = mockRepository.Stub();
+ handler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+
+ mockRepository.ReplayAll();
+
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new ClosingStructuresFailureMechanismProperties(failureMechanism, handler);
+
+ // Call
+ TestDelegate test = () => properties.N2A = value;
+
+ // Assert
+ Assert.Throws(test);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(0)]
+ [TestCase(5)]
+ [TestCase(21)]
+ [TestCase(40)]
+ public void N2A_SetValidValueWithConfirmation_UpdateDataAndNotifyObservers(int value)
+ {
+ // Setup
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+ observerMock.Expect(o => o.UpdateObserver());
+
+ var observableMock = mockRepository.StrictMock();
+ observableMock.Expect(o => o.NotifyObservers());
+
+ var handler = mockRepository.Stub();
+ handler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+ handler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new[] { observableMock });
+
+ mockRepository.ReplayAll();
+
+ failureMechanism.Attach(observerMock);
+
+ var properties = new ClosingStructuresFailureMechanismProperties(failureMechanism, handler);
+
+ // Call
+ properties.N2A = value;
+
+ // Assert
+ Assert.AreEqual(value, failureMechanism.GeneralInput.N2A);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(-10)]
+ [TestCase(-1)]
+ [TestCase(41)]
+ [TestCase(141)]
+ [TestCase(0)]
+ [TestCase(5)]
+ [TestCase(21)]
+ [TestCase(40)]
+ public void N2A_SetValueWithoutConfirmation_NoValueChangeNoUpdates(int value)
+ {
+ // Setup
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+
+ var handler = mockRepository.Stub();
+ handler.Expect(h => h.ConfirmPropertyChange()).Return(false);
+
+ mockRepository.ReplayAll();
+
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new ClosingStructuresFailureMechanismProperties(failureMechanism, handler);
+
+ var oldN2A = failureMechanism.GeneralInput.N2A;
+
+ // Call
+ properties.N2A = value;
+
+ // Assert
+ Assert.AreEqual(oldN2A, failureMechanism.GeneralInput.N2A);
+ mockRepository.VerifyAll();
+ }
+
+ private IFailureMechanismPropertyChangeHandler CreateSimpleHandler(MockRepository mockRepository)
+ {
+ var handler = mockRepository.Stub();
+ handler.Stub(h => h.ConfirmPropertyChange()).Return(true);
+ handler.Stub(h => h.PropertyChanged(Arg.Is.NotNull)).Return(Enumerable.Empty());
+
+ return handler;
+ }
}
}
\ No newline at end of file
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/PropertyInfos/ClosingStructuresFailureMechanismContextPropertyInfoTest.cs
===================================================================
diff -u
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/PropertyInfos/ClosingStructuresFailureMechanismContextPropertyInfoTest.cs (revision 0)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/PropertyInfos/ClosingStructuresFailureMechanismContextPropertyInfoTest.cs (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -0,0 +1,59 @@
+using System.Linq;
+using Core.Common.Gui.Plugin;
+using NUnit.Framework;
+using Rhino.Mocks;
+using Ringtoets.ClosingStructures.Data;
+using Ringtoets.ClosingStructures.Forms.PresentationObjects;
+using Ringtoets.ClosingStructures.Forms.PropertyClasses;
+using Ringtoets.Common.Data.AssessmentSection;
+
+namespace Ringtoets.ClosingStructures.Plugin.Test.PropertyInfos
+{
+ public class ClosingStructuresFailureMechanismContextPropertyInfoTest
+ {
+ private ClosingStructuresPlugin plugin;
+ private PropertyInfo info;
+
+ [SetUp]
+ public void SetUp()
+ {
+ plugin = new ClosingStructuresPlugin();
+ info = plugin.GetPropertyInfos().First(tni => tni.PropertyObjectType == typeof(ClosingStructuresFailureMechanismProperties));
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ plugin.Dispose();
+ }
+
+ [Test]
+ public void Initialized_Always_ExpectedPropertiesSet()
+ {
+ // Assert
+ Assert.AreEqual(typeof(ClosingStructuresFailureMechanismContext), info.DataType);
+ Assert.AreEqual(typeof(ClosingStructuresFailureMechanismProperties), info.PropertyObjectType);
+ }
+
+ [Test]
+ public void CreateInstance_Always_NewPropertiesWithFailureMechanismContextAsData()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.StrictMock();
+ mocks.ReplayAll();
+
+ var failureMechanism = new ClosingStructuresFailureMechanism();
+ var context = new ClosingStructuresFailureMechanismContext(failureMechanism, assessmentSection);
+
+ // Call
+ var objectProperties = info.CreateInstance(context);
+
+ // Assert
+ Assert.IsInstanceOf(objectProperties);
+ Assert.AreSame(failureMechanism, objectProperties.Data);
+
+ mocks.VerifyAll();
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/Ringtoets.ClosingStructures.Plugin.Test.csproj
===================================================================
diff -u -r586d097de0087256cb5cf3dda3a3c612721fee9c -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/Ringtoets.ClosingStructures.Plugin.Test.csproj (.../Ringtoets.ClosingStructures.Plugin.Test.csproj) (revision 586d097de0087256cb5cf3dda3a3c612721fee9c)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/Ringtoets.ClosingStructures.Plugin.Test.csproj (.../Ringtoets.ClosingStructures.Plugin.Test.csproj) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -65,6 +65,7 @@
Properties\GlobalAssembly.cs
+
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsFailureMechanismContextPropertiesTest.cs
===================================================================
diff -u -r545b105a213ed85564861b4bcf6d2d6425dbde50 -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsFailureMechanismContextPropertiesTest.cs (.../GrassCoverErosionInwardsFailureMechanismContextPropertiesTest.cs) (revision 545b105a213ed85564861b4bcf6d2d6425dbde50)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsFailureMechanismContextPropertiesTest.cs (.../GrassCoverErosionInwardsFailureMechanismContextPropertiesTest.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -122,75 +122,6 @@
}
[Test]
- [TestCase(1)]
- [TestCase(10)]
- [TestCase(20)]
- public void LengthEffect_SetValidValue_UpdateDataAndNotifyObservers(int newLengthEffect)
- {
- // Setup
- var observerMock = mockRepository.StrictMock();
- observerMock.Expect(o => o.UpdateObserver());
-
- var observableMock = mockRepository.StrictMock();
- observableMock.Expect(o => o.NotifyObservers());
-
- var changeHandler = mockRepository.StrictMock();
- changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
- changeHandler.Expect(h => h.PropertyChanged(Arg.Is.NotNull)).Return(new[] { observableMock });
-
- var assessmentSectionMock = mockRepository.StrictMock();
-
- mockRepository.ReplayAll();
-
- var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
- failureMechanism.Attach(observerMock);
-
- var properties = new GrassCoverErosionInwardsFailureMechanismContextProperties(
- new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSectionMock),
- changeHandler);
-
- // Call
- properties.LengthEffect = newLengthEffect;
-
- // Assert
- Assert.AreEqual(newLengthEffect, failureMechanism.GeneralInput.N);
- mockRepository.VerifyAll();
- }
-
- [Test]
- [TestCase(1)]
- [TestCase(10)]
- [TestCase(20)]
- public void LengthEffect_SetValidValueNoConfirmation_NoValueChangeNoUpdates(int newLengthEffect)
- {
- // Setup
- var observerMock = mockRepository.StrictMock();
-
- var changeHandler = mockRepository.StrictMock();
- changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false);
-
- var assessmentSectionMock = mockRepository.StrictMock();
-
- mockRepository.ReplayAll();
-
- var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
-
- failureMechanism.Attach(observerMock);
-
- var properties = new GrassCoverErosionInwardsFailureMechanismContextProperties(
- new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSectionMock),
- changeHandler);
- var oldValue = properties.LengthEffect;
-
- // Call
- properties.LengthEffect = newLengthEffect;
-
- // Assert
- Assert.AreEqual(oldValue, failureMechanism.GeneralInput.N);
- mockRepository.VerifyAll();
- }
-
- [Test]
public void Constructor_Always_PropertiesHaveExpectedAttributesValues()
{
// Setup
@@ -268,6 +199,108 @@
mockRepository.VerifyAll();
}
+ [Test]
+ [TestCase(0)]
+ [TestCase(-1)]
+ [TestCase(-20)]
+ public void LengthEffect_SetInvalidValueWithConfirmation_ThrowsArgumentOutOfRangeException(int newLengthEffect)
+ {
+ // Setup
+ var observerMock = mockRepository.StrictMock();
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+
+ var assessmentSectionMock = mockRepository.StrictMock();
+
+ mockRepository.ReplayAll();
+
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionInwardsFailureMechanismContextProperties(
+ new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSectionMock),
+ changeHandler);
+
+ // Call
+ TestDelegate test = () => properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.Throws(test);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(1)]
+ [TestCase(10)]
+ [TestCase(20)]
+ public void LengthEffect_SetValidValueWithConfirmation_UpdateDataAndNotifyObservers(int newLengthEffect)
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+
+ var observerMock = mockRepository.StrictMock();
+ observerMock.Expect(o => o.UpdateObserver());
+
+ var observableMock = mockRepository.StrictMock();
+ observableMock.Expect(o => o.NotifyObservers());
+
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+ changeHandler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new[] { observableMock });
+
+ var assessmentSectionMock = mockRepository.StrictMock();
+
+ mockRepository.ReplayAll();
+
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionInwardsFailureMechanismContextProperties(
+ new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSectionMock),
+ changeHandler);
+
+ // Call
+ properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.AreEqual(newLengthEffect, failureMechanism.GeneralInput.N);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(-10)]
+ [TestCase(-1)]
+ [TestCase(0)]
+ [TestCase(1)]
+ [TestCase(10)]
+ [TestCase(20)]
+ public void LengthEffect_SetValueWithoutConfirmation_NoValueChangeNoUpdates(int newLengthEffect)
+ {
+ // Setup
+ var observerMock = mockRepository.StrictMock();
+
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false);
+
+ var assessmentSectionMock = mockRepository.StrictMock();
+
+ mockRepository.ReplayAll();
+
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionInwardsFailureMechanismContextProperties(
+ new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSectionMock),
+ changeHandler);
+ var oldValue = properties.LengthEffect;
+
+ // Call
+ properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.AreEqual(oldValue, failureMechanism.GeneralInput.N);
+ mockRepository.VerifyAll();
+ }
+
private IFailureMechanismPropertyChangeHandler CreateSimpleHandler()
{
var handler = mockRepository.Stub();
Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PropertyClasses/GrassCoverErosionOutwardsFailureMechanismPropertiesTest.cs
===================================================================
diff -u -r545b105a213ed85564861b4bcf6d2d6425dbde50 -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PropertyClasses/GrassCoverErosionOutwardsFailureMechanismPropertiesTest.cs (.../GrassCoverErosionOutwardsFailureMechanismPropertiesTest.cs) (revision 545b105a213ed85564861b4bcf6d2d6425dbde50)
+++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Forms.Test/PropertyClasses/GrassCoverErosionOutwardsFailureMechanismPropertiesTest.cs (.../GrassCoverErosionOutwardsFailureMechanismPropertiesTest.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -24,11 +24,8 @@
using System.Linq;
using Core.Common.Base;
using Core.Common.Gui.PropertyBag;
-using Core.Common.TestUtil;
using NUnit.Framework;
using Rhino.Mocks;
-using Ringtoets.Common.Data.Hydraulics;
-using Ringtoets.Common.Data.TestUtil;
using Ringtoets.GrassCoverErosionOutwards.Data;
using Ringtoets.GrassCoverErosionOutwards.Data.Properties;
using Ringtoets.GrassCoverErosionOutwards.Forms.PropertyClasses;
@@ -97,68 +94,6 @@
}
[Test]
- [TestCase(1)]
- [TestCase(10)]
- [TestCase(20)]
- public void LengthEffect_SetValidValue_UpdateDataAndNotifyObservers(int newLengthEffect)
- {
- // Setup
- var mockRepository = new MockRepository();
- var observerMock = mockRepository.StrictMock();
- observerMock.Expect(o => o.UpdateObserver());
-
- var observableMock = mockRepository.StrictMock();
- observableMock.Expect(o => o.NotifyObservers());
-
- var changeHandler = mockRepository.StrictMock();
- changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
- changeHandler.Expect(h => h.PropertyChanged(Arg.Is.NotNull)).Return(new[] { observableMock });
-
- mockRepository.ReplayAll();
-
- var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism();
- failureMechanism.Attach(observerMock);
-
- var properties = new GrassCoverErosionOutwardsFailureMechanismProperties(failureMechanism, changeHandler);
-
- // Call
- properties.LengthEffect = newLengthEffect;
-
- // Assert
- Assert.AreEqual(newLengthEffect, failureMechanism.GeneralInput.N);
- mockRepository.VerifyAll();
- }
-
- [Test]
- [TestCase(1)]
- [TestCase(10)]
- [TestCase(20)]
- public void LengthEffect_SetValidValueNoConfirmation_NoValueChangeNoUpdates(int newLengthEffect)
- {
- // Setup
- var mockRepository = new MockRepository();
- var observerMock = mockRepository.StrictMock();
-
- var changeHandler = mockRepository.StrictMock();
- changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false);
-
- mockRepository.ReplayAll();
-
- var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism();
- failureMechanism.Attach(observerMock);
-
- var properties = new GrassCoverErosionOutwardsFailureMechanismProperties(failureMechanism, changeHandler);
- var oldValue = properties.LengthEffect;
-
- // Call
- properties.LengthEffect = newLengthEffect;
-
- // Assert
- Assert.AreEqual(oldValue, failureMechanism.GeneralInput.N);
- mockRepository.VerifyAll();
- }
-
- [Test]
public void Constructor_Always_PropertiesHaveExpectedAttributesValues()
{
// Setup
@@ -174,9 +109,9 @@
// Assert
var dynamicPropertyBag = new DynamicPropertyBag(properties);
PropertyDescriptorCollection dynamicProperties = dynamicPropertyBag.GetProperties(new Attribute[]
- {
- BrowsableAttribute.Yes
- });
+ {
+ BrowsableAttribute.Yes
+ });
Assert.AreEqual(6, dynamicProperties.Count);
PropertyDescriptor nameProperty = dynamicProperties[namePropertyIndex];
@@ -222,7 +157,98 @@
Assert.AreEqual("De waarde van de parameter 'c' in de berekening voor golf condities.", cProperty.Description);
mockRepository.VerifyAll();
}
-
+
+ [Test]
+ [TestCase(0)]
+ [TestCase(-1)]
+ [TestCase(-20)]
+ public void LengthEffect_SetInvalidValueWithConfirmation_ThrowsArgumentOutOfRangeException(int newLengthEffect)
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+
+ mockRepository.ReplayAll();
+
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionOutwardsFailureMechanismProperties(failureMechanism, changeHandler);
+
+ // Call
+ TestDelegate test = () => properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.Throws(test);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(1)]
+ [TestCase(10)]
+ [TestCase(20)]
+ public void LengthEffect_SetValidValueWithConfirmation_UpdateDataAndNotifyObservers(int newLengthEffect)
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism();
+
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+ observerMock.Expect(o => o.UpdateObserver());
+
+ var observableMock = mockRepository.StrictMock();
+ observableMock.Expect(o => o.NotifyObservers());
+
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+ changeHandler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new[] { observableMock });
+
+ mockRepository.ReplayAll();
+
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionOutwardsFailureMechanismProperties(failureMechanism, changeHandler);
+
+ // Call
+ properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.AreEqual(newLengthEffect, failureMechanism.GeneralInput.N);
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(1)]
+ [TestCase(10)]
+ [TestCase(20)]
+ public void LengthEffect_SetValidValueNoConfirmation_NoValueChangeNoUpdates(int newLengthEffect)
+ {
+ // Setup
+ var mockRepository = new MockRepository();
+ var observerMock = mockRepository.StrictMock();
+
+ var changeHandler = mockRepository.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false);
+
+ mockRepository.ReplayAll();
+
+ var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new GrassCoverErosionOutwardsFailureMechanismProperties(failureMechanism, changeHandler);
+ var oldValue = properties.LengthEffect;
+
+ // Call
+ properties.LengthEffect = newLengthEffect;
+
+ // Assert
+ Assert.AreEqual(oldValue, failureMechanism.GeneralInput.N);
+ mockRepository.VerifyAll();
+ }
+
private IGrassCoverErosionOutwardsFailureMechanismPropertyChangeHandler CreateSimpleHandler(MockRepository mockRepository)
{
var handler = mockRepository.Stub();
Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs
===================================================================
diff -u -r816744aa249d90e7460b9c2844292b2e0cf13669 -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs (.../PipingFailureMechanismContextProperties.cs) (revision 816744aa249d90e7460b9c2844292b2e0cf13669)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs (.../PipingFailureMechanismContextProperties.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -20,7 +20,6 @@
// All rights reserved.
using System;
-using System.Collections.Generic;
using Core.Common.Base;
using Core.Common.Base.Data;
using Core.Common.Gui.Attributes;
Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs
===================================================================
diff -u -r849754a9c56fc8ad4e2733f9ca04de7c01cbac3f -r5f8541d2a46730d67fc2d859caa6de2921bbc820
--- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision 849754a9c56fc8ad4e2733f9ca04de7c01cbac3f)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision 5f8541d2a46730d67fc2d859caa6de2921bbc820)
@@ -258,17 +258,23 @@
[TestCase(-0.1)]
[TestCase(1.1)]
[TestCase(8)]
- public void A_SetInvalidValue_ThrowsArgumentException(double value)
+ public void A_SetInvalidValueWithConfirmation_ThrowsArgumentException(double value)
{
// Setup
var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
var observerMock = mocks.StrictMock();
+ var changeHandler = mocks.Stub();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+
+ mocks.ReplayAll();
+
var failureMechanism = new PipingFailureMechanism();
+
var properties = new PipingFailureMechanismContextProperties(
- new PipingFailureMechanismContext(failureMechanism, mocks.Stub()),
- CreateSimpleHandler(mocks));
- mocks.ReplayAll();
+ new PipingFailureMechanismContext(failureMechanism, assessmentSection),
+ changeHandler);
failureMechanism.Attach(observerMock);
@@ -288,30 +294,31 @@
[TestCase(1)]
[TestCase(0.0000001)]
[TestCase(0.9999999)]
- public void A_SetValidValue_SetsValueAndUpdatesObservers(double value)
+ public void A_SetValidValueWithConfirmation_SetsValueAndUpdatesObservers(double value)
{
// Setup
+ var failureMechanism = new PipingFailureMechanism();
+
var mocks = new MockRepository();
var observerMock = mocks.StrictMock();
observerMock.Expect(o => o.UpdateObserver());
var observableMock = mocks.StrictMock();
observableMock.Expect(o => o.NotifyObservers());
- var handler = mocks.Stub();
- handler.Expect(h => h.ConfirmPropertyChange()).Return(true);
- handler.Expect(h => h.PropertyChanged(Arg.Is.NotNull)).Return(new [] { observableMock });
+ var changeHandler = mocks.Stub();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+ changeHandler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new [] { observableMock });
var assessmentSection = mocks.Stub();
mocks.ReplayAll();
- var failureMechanism = new PipingFailureMechanism();
failureMechanism.Attach(observerMock);
var properties = new PipingFailureMechanismContextProperties(
new PipingFailureMechanismContext(failureMechanism, assessmentSection),
- handler);
+ changeHandler);
// Call
properties.A = value;
@@ -322,10 +329,14 @@
}
[Test]
+ [TestCase(-1)]
+ [TestCase(-0.1)]
+ [TestCase(1.1)]
+ [TestCase(8)]
[TestCase(1)]
[TestCase(10)]
[TestCase(20)]
- public void A_SetValidValueNoConfirmation_NoValueChangeNoUpdates(int newLengthEffect)
+ public void A_SetValidNoConfirmation_NoValueChangeNoUpdates(double value)
{
// Setup
var mockRepository = new MockRepository();
@@ -347,37 +358,81 @@
var oldValue = properties.A;
// Call
- properties.A = newLengthEffect;
+ properties.A = value;
// Assert
Assert.AreEqual(oldValue, failureMechanism.PipingProbabilityAssessmentInput.A);
mockRepository.VerifyAll();
}
[Test]
+ [TestCase(double.NaN)]
+ [TestCase(double.NegativeInfinity)]
+ [TestCase(double.PositiveInfinity)]
+ [TestCase(-0.005)]
+ [TestCase(20.005)]
+ public void WaterVolumetricWeight_SetInvalidValueWithConfirmation_ThrowArgumentExceptionAndDoesNotUpdateObservers(double value)
+ {
+ // Setup
+
+ var mocks = new MockRepository();
+ var observerMock = mocks.StrictMock();
+ var assessmentSection = mocks.Stub();
+
+ var changeHandler = mocks.Stub();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+
+ mocks.ReplayAll();
+
+ var failureMechanism = new PipingFailureMechanism();
+ failureMechanism.Attach(observerMock);
+
+ var properties = new PipingFailureMechanismContextProperties(
+ new PipingFailureMechanismContext(failureMechanism, assessmentSection),
+ changeHandler);
+
+ // Call
+ TestDelegate test = () => properties.WaterVolumetricWeight = (RoundedDouble) value;
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "De waarde moet binnen het bereik [0, 20] liggen.");
+ mocks.VerifyAll(); // Does not expect notify observers.
+ }
+
+ [Test]
[TestCase(5)]
[TestCase(-0.004)]
[TestCase(20.004)]
- public void WaterVolumetricWeight_SetValidValue_SetsValueRoundedAndUpdatesObservers(double newValue)
+ public void WaterVolumetricWeight_SetValidValueWithConfirmation_SetsValueRoundedAndUpdatesObservers(double value)
{
// Setup
+ var failureMechanism = new PipingFailureMechanism();
+
var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
var observerMock = mocks.StrictMock();
observerMock.Expect(o => o.UpdateObserver());
- var failureMechanism = new PipingFailureMechanism();
- var properties = new PipingFailureMechanismContextProperties(
- new PipingFailureMechanismContext(failureMechanism, mocks.Stub()),
- CreateSimpleHandler(mocks));
+ var observableMock = mocks.StrictMock();
+ observableMock.Expect(o => o.NotifyObservers());
+
+ var handler = mocks.Stub();
+ handler.Expect(h => h.ConfirmPropertyChange()).Return(true);
+ handler.Expect(h => h.PropertyChanged(failureMechanism)).Return(new[] { observableMock });
+
mocks.ReplayAll();
failureMechanism.Attach(observerMock);
+ var properties = new PipingFailureMechanismContextProperties(
+ new PipingFailureMechanismContext(failureMechanism, assessmentSection),
+ handler);
+
// Call
- properties.WaterVolumetricWeight = (RoundedDouble) newValue;
+ properties.WaterVolumetricWeight = (RoundedDouble) value;
// Assert
- Assert.AreEqual(newValue, failureMechanism.GeneralInput.WaterVolumetricWeight.Value, failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy());
+ Assert.AreEqual(value, failureMechanism.GeneralInput.WaterVolumetricWeight.Value, failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy());
mocks.VerifyAll();
}
@@ -387,26 +442,36 @@
[TestCase(double.PositiveInfinity)]
[TestCase(-0.005)]
[TestCase(20.005)]
- public void WaterVolumetricWeight_SetValidValue_ThrowArgumentExceptionAndDoesNotUpdateObservers(double newValue)
+ [TestCase(5)]
+ [TestCase(-0.004)]
+ [TestCase(20.004)]
+ public void WaterVolumetricWeight_SetValueNoConfirmation_NoValueChangeNoUpdates(double value)
{
// Setup
var mocks = new MockRepository();
var observerMock = mocks.StrictMock();
+ var assessmentSection = mocks.Stub();
- var failureMechanism = new PipingFailureMechanism();
- var properties = new PipingFailureMechanismContextProperties(
- new PipingFailureMechanismContext(failureMechanism, mocks.Stub()),
- CreateSimpleHandler(mocks));
+ var changeHandler = mocks.StrictMock();
+ changeHandler.Expect(h => h.ConfirmPropertyChange()).Return(false);
+
mocks.ReplayAll();
+ var failureMechanism = new PipingFailureMechanism();
failureMechanism.Attach(observerMock);
+ var properties = new PipingFailureMechanismContextProperties(
+ new PipingFailureMechanismContext(failureMechanism, assessmentSection),
+ changeHandler);
+
+ var oldValue = properties.WaterVolumetricWeight;
+
// Call
- TestDelegate test = () => properties.WaterVolumetricWeight = (RoundedDouble) newValue;
+ properties.WaterVolumetricWeight = (RoundedDouble) value;
// Assert
- TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "De waarde moet binnen het bereik [0, 20] liggen.");
- mocks.VerifyAll(); // Does not expect notify observers.
+ Assert.AreEqual(oldValue, failureMechanism.GeneralInput.WaterVolumetricWeight.Value, failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy());
+ mocks.VerifyAll();
}
private IFailureMechanismPropertyChangeHandler CreateSimpleHandler(MockRepository mockRepository)