Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismContextProperties.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs =================================================================== diff -u --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs (revision 0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PropertyClasses/PipingFailureMechanismProperties.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -0,0 +1,378 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using Core.Common.Base; +using Core.Common.Base.Data; +using Core.Common.Gui.Attributes; +using Core.Common.Gui.PropertyBag; +using Core.Common.Util.Attributes; +using Ringtoets.Common.Data.Probability; +using Ringtoets.Common.Forms.PropertyClasses; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Forms.Properties; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; + +namespace Ringtoets.Piping.Forms.PropertyClasses +{ + /// + /// ViewModel of properties panel. + /// + public class PipingFailureMechanismProperties : ObjectProperties + { + 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 PipingFailureMechanismProperties(PipingFailureMechanism data, + IFailureMechanismPropertyChangeHandler handler) + { + if (data == null) + { + throw new ArgumentNullException(nameof(data)); + } + + if (handler == null) + { + throw new ArgumentNullException(nameof(handler)); + } + + Data = data; + propertyChangeHandler = handler; + } + + #region Heave + + [DynamicVisible] + [PropertyOrder(31)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Heave))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_CriticalHeaveGradient_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_CriticalHeaveGradient_Description))] + public double CriticalHeaveGradient + { + get + { + return data.GeneralInput.CriticalHeaveGradient; + } + } + + #endregion + + [DynamicVisibleValidationMethod] + public bool DynamicVisibleValidationMethod(string propertyName) + { + if (!data.IsRelevant && ShouldHidePropertyWhenFailureMechanismIrrelevant(propertyName)) + { + return false; + } + + return true; + } + + private void ChangePropertyValueAndNotifyAffectedObjects( + SetFailureMechanismPropertyValueDelegate setPropertyValue, + TValue value) + { + IEnumerable affectedObjects = propertyChangeHandler.SetPropertyValueAfterConfirmation( + data, + value, + setPropertyValue); + + NotifyAffectedObjects(affectedObjects); + } + + private static void NotifyAffectedObjects(IEnumerable affectedObjects) + { + foreach (IObservable affectedObject in affectedObjects) + { + affectedObject.NotifyObservers(); + } + } + + private bool ShouldHidePropertyWhenFailureMechanismIrrelevant(string propertyName) + { + return nameof(CriticalHeaveGradient).Equals(propertyName) + || nameof(WaterVolumetricWeight).Equals(propertyName) + || nameof(A).Equals(propertyName) + || nameof(B).Equals(propertyName) + || nameof(SectionLength).Equals(propertyName) + || nameof(N).Equals(propertyName) + || nameof(SandParticlesVolumicWeight).Equals(propertyName) + || nameof(WhitesDragCoefficient).Equals(propertyName) + || nameof(BeddingAngle).Equals(propertyName) + || nameof(WaterKinematicViscosity).Equals(propertyName) + || nameof(Gravity).Equals(propertyName) + || nameof(MeanDiameter70).Equals(propertyName) + || nameof(SellmeijerReductionFactor).Equals(propertyName) + || nameof(UpliftModelFactor).Equals(propertyName) + || nameof(SellmeijerModelFactor).Equals(propertyName); + } + + #region General + + [PropertyOrder(1)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Name_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Name_Description))] + public string Name + { + get + { + return data.Name; + } + } + + [PropertyOrder(2)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Code_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_Code_Description))] + public string Code + { + get + { + return data.Code; + } + } + + [PropertyOrder(3)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_IsRelevant_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_IsRelevant_Description))] + public bool IsRelevant + { + get + { + return data.IsRelevant; + } + } + + [DynamicVisible] + [PropertyOrder(4)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_General))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterVolumetricWeight_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterVolumetricWeight_Description))] + public RoundedDouble WaterVolumetricWeight + { + get + { + return data.GeneralInput.WaterVolumetricWeight; + } + set + { + ChangePropertyValueAndNotifyAffectedObjects((f, v) => f.GeneralInput.WaterVolumetricWeight = v, value); + } + } + + #endregion + + #region Semi-probabilistic parameters + + [DynamicVisible] + [PropertyOrder(21)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_A_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_A_Description))] + public double A + { + get + { + return data.PipingProbabilityAssessmentInput.A; + } + set + { + ChangePropertyValueAndNotifyAffectedObjects((f, v) => f.PipingProbabilityAssessmentInput.A = v, value); + } + } + + [DynamicVisible] + [PropertyOrder(22)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_B_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_ProbabilityAssessmentInput_B_Description))] + public double B + { + get + { + return data.PipingProbabilityAssessmentInput.B; + } + } + + [DynamicVisible] + [PropertyOrder(23)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.ReferenceLine_Length_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.ReferenceLine_Length_Description))] + public RoundedDouble SectionLength + { + get + { + return new RoundedDouble(2, data.PipingProbabilityAssessmentInput.SectionLength); + } + } + + [DynamicVisible] + [PropertyOrder(24)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_LengthEffect))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_Rounded_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.FailureMechanism_N_Rounded_Description))] + public RoundedDouble N + { + get + { + return new RoundedDouble(2, data.PipingProbabilityAssessmentInput.GetSectionSpecificN( + data.PipingProbabilityAssessmentInput.SectionLength)); + } + } + + #endregion + + #region Sellmeijer + + [DynamicVisible] + [PropertyOrder(51)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SandParticlesVolumicWeight_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SandParticlesVolumicWeight_Description))] + public RoundedDouble SandParticlesVolumicWeight + { + get + { + return data.GeneralInput.SandParticlesVolumicWeight; + } + } + + [DynamicVisible] + [PropertyOrder(52)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WhitesDragCoefficient_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WhitesDragCoefficient_Description))] + public double WhitesDragCoefficient + { + get + { + return data.GeneralInput.WhitesDragCoefficient; + } + } + + [DynamicVisible] + [PropertyOrder(53)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_BeddingAngle_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_BeddingAngle_Description))] + public double BeddingAngle + { + get + { + return data.GeneralInput.BeddingAngle; + } + } + + [DynamicVisible] + [PropertyOrder(54)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterKinematicViscosity_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_WaterKinematicViscosity_Description))] + public double WaterKinematicViscosity + { + get + { + return data.GeneralInput.WaterKinematicViscosity; + } + } + + [DynamicVisible] + [PropertyOrder(55)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.GravitationalAcceleration_DisplayName))] + [ResourcesDescription(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.GravitationalAcceleration_Description))] + public double Gravity + { + get + { + return data.GeneralInput.Gravity; + } + } + + [DynamicVisible] + [PropertyOrder(56)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_MeanDiameter70_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_MeanDiameter70_Description))] + public double MeanDiameter70 + { + get + { + return data.GeneralInput.MeanDiameter70; + } + } + + [DynamicVisible] + [PropertyOrder(57)] + [ResourcesCategory(typeof(Resources), nameof(Resources.Categories_Sellmeijer))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerReductionFactor_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerReductionFactor_Description))] + public double SellmeijerReductionFactor + { + get + { + return data.GeneralInput.SellmeijerReductionFactor; + } + } + + #endregion + + #region Model factors + + [DynamicVisible] + [PropertyOrder(11)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_ModelSettings))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_UpliftModelFactor_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_UpliftModelFactor_Description))] + public double UpliftModelFactor + { + get + { + return data.GeneralInput.UpliftModelFactor; + } + } + + [DynamicVisible] + [PropertyOrder(12)] + [ResourcesCategory(typeof(RingtoetsCommonFormsResources), nameof(RingtoetsCommonFormsResources.Categories_ModelSettings))] + [ResourcesDisplayName(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerModelFactor_DisplayName))] + [ResourcesDescription(typeof(Resources), nameof(Resources.GeneralPipingInput_SellmeijerModelFactor_Description))] + public double SellmeijerModelFactor + { + get + { + return data.GeneralInput.SellmeijerModelFactor; + } + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj =================================================================== diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -42,7 +42,7 @@ - + Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -68,9 +68,9 @@ { public override IEnumerable GetPropertyInfos() { - yield return new PropertyInfo + yield return new PropertyInfo { - CreateInstance = context => new PipingFailureMechanismContextProperties(context, new FailureMechanismPropertyChangeHandler()) + CreateInstance = context => new PipingFailureMechanismProperties(context.WrappedData, new FailureMechanismPropertyChangeHandler()) }; yield return new PropertyInfo { Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismPropertiesTest.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -0,0 +1,527 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// 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.PropertyBag; +using Core.Common.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.Probability; +using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Common.Forms.PropertyClasses; +using Ringtoets.Common.Forms.TestUtil; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Forms.PropertyClasses; + +namespace Ringtoets.Piping.Forms.Test.PropertyClasses +{ + [TestFixture] + public class PipingFailureMechanismPropertiesTest + { + [Test] + public void Constructor_DataIsNull_ThrowArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var handler = mocks.Stub>(); + mocks.ReplayAll(); + + // Call + TestDelegate test = () => new PipingFailureMechanismProperties(null, handler); + + // Assert + string paramName = Assert.Throws(test).ParamName; + Assert.AreEqual("data", paramName); + mocks.VerifyAll(); + } + + [Test] + public void Constructor_ChangeHandlerIsNull_ThrowArgumentNullException() + { + // Call + TestDelegate test = () => new PipingFailureMechanismProperties( + new PipingFailureMechanism(), + null); + + // Assert + string paramName = Assert.Throws(test).ParamName; + Assert.AreEqual("handler", paramName); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Constructor_ExpectedValues(bool isRelevant) + { + // Setup + var failureMechanism = new PipingFailureMechanism + { + IsRelevant = isRelevant + }; + + var mockRepository = new MockRepository(); + var handler = mockRepository.Stub>(); + mockRepository.ReplayAll(); + + // Call + var properties = new PipingFailureMechanismProperties( + failureMechanism, + handler); + + // Assert + Assert.IsInstanceOf>(properties); + Assert.AreEqual(failureMechanism.Name, properties.Name); + Assert.AreEqual(failureMechanism.Code, properties.Code); + Assert.AreEqual(isRelevant, properties.IsRelevant); + + Assert.AreEqual(failureMechanism.GeneralInput.UpliftModelFactor, properties.UpliftModelFactor); + + Assert.AreEqual(failureMechanism.GeneralInput.SellmeijerModelFactor, properties.SellmeijerModelFactor); + + Assert.AreEqual(failureMechanism.GeneralInput.WaterVolumetricWeight, properties.WaterVolumetricWeight); + + Assert.AreEqual(failureMechanism.GeneralInput.CriticalHeaveGradient, properties.CriticalHeaveGradient); + + Assert.AreEqual(failureMechanism.GeneralInput.SandParticlesVolumicWeight, properties.SandParticlesVolumicWeight); + Assert.AreEqual(failureMechanism.GeneralInput.WhitesDragCoefficient, properties.WhitesDragCoefficient); + Assert.AreEqual(failureMechanism.GeneralInput.BeddingAngle, properties.BeddingAngle); + Assert.AreEqual(failureMechanism.GeneralInput.WaterKinematicViscosity, properties.WaterKinematicViscosity); + Assert.AreEqual(failureMechanism.GeneralInput.Gravity, properties.Gravity); + Assert.AreEqual(failureMechanism.GeneralInput.MeanDiameter70, properties.MeanDiameter70); + Assert.AreEqual(failureMechanism.GeneralInput.SellmeijerReductionFactor, properties.SellmeijerReductionFactor); + + Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.A, properties.A); + Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.B, properties.B); + Assert.AreEqual(2, properties.N.NumberOfDecimalPlaces); + Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.GetSectionSpecificN( + failureMechanism.PipingProbabilityAssessmentInput.SectionLength), + properties.N, + properties.N.GetAccuracy()); + Assert.AreEqual(2, properties.SectionLength.NumberOfDecimalPlaces); + Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.SectionLength, + properties.SectionLength, + properties.SectionLength.GetAccuracy()); + mockRepository.VerifyAll(); + } + + [Test] + public void Constructor_IsRelevantTrue_PropertiesHaveExpectedAttributesValues() + { + // Setup + var failureMechanism = new PipingFailureMechanism + { + IsRelevant = true + }; + + var mockRepository = new MockRepository(); + var handler = mockRepository.Stub>(); + + mockRepository.ReplayAll(); + + // Call + var properties = new PipingFailureMechanismProperties( + failureMechanism, + handler); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(18, dynamicProperties.Count); + + const string generalCategory = "Algemeen"; + const string heaveCategory = "Heave"; + const string modelFactorCategory = "Modelinstellingen"; + const string semiProbabilisticCategory = "Lengte-effect parameters"; + const string sellmeijerCategory = "Terugschrijdende erosie (Sellmeijer)"; + + PropertyDescriptor nameProperty = dynamicProperties[0]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + generalCategory, + "Naam", + "De naam van het toetsspoor.", + true); + + PropertyDescriptor labelProperty = dynamicProperties[1]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(labelProperty, + generalCategory, + "Label", + "Het label van het toetsspoor.", + true); + + PropertyDescriptor isRelevantProperty = dynamicProperties[2]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty, + generalCategory, + "Is relevant", + "Geeft aan of dit toetsspoor relevant is of niet.", + true); + + PropertyDescriptor volumicWeightOfWaterProperty = dynamicProperties[3]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(volumicWeightOfWaterProperty, + generalCategory, + "Volumiek gewicht van water [kN/m³]", + "Volumiek gewicht van water."); + + PropertyDescriptor upliftModelFactorProperty = dynamicProperties[4]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(upliftModelFactorProperty, + modelFactorCategory, + "Modelfactor opbarsten [-]", + "Rekenwaarde om de onzekerheid in het model van opbarsten in rekening te brengen.", + true); + + PropertyDescriptor sellmeijerModelFactorProperty = dynamicProperties[5]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sellmeijerModelFactorProperty, + modelFactorCategory, + "Modelfactor piping toegepast op het model van Sellmeijer [-]", + "Rekenwaarde om de onzekerheid in het model van Sellmeijer in rekening te brengen.", + true); + + PropertyDescriptor aProperty = dynamicProperties[6]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(aProperty, + semiProbabilisticCategory, + "a [-]", + "De parameter 'a' die gebruikt wordt voor het lengte-effect in berekening van de maximaal toelaatbare faalkans."); + + PropertyDescriptor bProperty = dynamicProperties[7]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(bProperty, + semiProbabilisticCategory, + "b [m]", + "De parameter 'b' die gebruikt wordt voor het lengte-effect in berekening van de maximaal toelaatbare faalkans.", + true); + + PropertyDescriptor sectionLengthProperty = dynamicProperties[8]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sectionLengthProperty, + semiProbabilisticCategory, + "Lengte* [m]", + "Totale lengte van het traject in meters (afgerond).", + true); + + PropertyDescriptor NProperty = dynamicProperties[9]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(NProperty, + semiProbabilisticCategory, + "N* [-]", + "De parameter 'N' die gebruikt wordt om het lengte-effect mee te nemen in de beoordeling (afgerond).", + true); + + PropertyDescriptor criticalHeaveGradientProperty = dynamicProperties[10]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(criticalHeaveGradientProperty, + heaveCategory, + "Kritiek verhang m.b.t. heave [-]", + "Kritiek verhang met betrekking tot heave.", + true); + + PropertyDescriptor volumetricWeightSandParticlesProperty = dynamicProperties[11]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(volumetricWeightSandParticlesProperty, + sellmeijerCategory, + "Volumiek gewicht van de zandkorrels onder water [kN/m³]", + "Het (ondergedompelde) volumegewicht van zandkorrelmateriaal van een zandlaag.", + true); + + PropertyDescriptor whitesDragCoefficientProperty = dynamicProperties[12]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(whitesDragCoefficientProperty, + sellmeijerCategory, + "Coëfficiënt van White [-]", + "Sleepkrachtfactor volgens White.", + true); + + PropertyDescriptor beddingAngleProperty = dynamicProperties[13]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(beddingAngleProperty, + sellmeijerCategory, + "Rolweerstandshoek [°]", + "Hoek in het krachtenevenwicht die aangeeft hoeveel weerstand de korrels bieden tegen rollen; ook beddingshoek genoemd.", + true); + + PropertyDescriptor waterKinematicViscosityProperty = dynamicProperties[14]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(waterKinematicViscosityProperty, + sellmeijerCategory, + "Kinematische viscositeit van water bij 10° C [m²/s]", + "Kinematische viscositeit van water bij 10° C.", + true); + + PropertyDescriptor gravityProperty = dynamicProperties[15]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(gravityProperty, + sellmeijerCategory, + "Valversnelling [m/s²]", + "Valversnelling.", + true); + + PropertyDescriptor meanDiameter70Property = dynamicProperties[16]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(meanDiameter70Property, + sellmeijerCategory, + "Referentiewaarde voor 70%-fraktiel in Sellmeijer regel [m]", + "Gemiddelde d70 van de in kleine schaalproeven toegepaste zandsoorten, waarop de formule van Sellmeijer is gefit.", + true); + + PropertyDescriptor reductionFactorSellmeijerProperty = dynamicProperties[17]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(reductionFactorSellmeijerProperty, + sellmeijerCategory, + "Reductiefactor Sellmeijer [-]", + "Reductiefactor Sellmeijer.", + true); + + mockRepository.VerifyAll(); + } + + [Test] + public void Constructor_IsRelevantFalse_PropertiesHaveExpectedAttributesValues() + { + // Setup + var failureMechanism = new PipingFailureMechanism + { + IsRelevant = false + }; + + var mockRepository = new MockRepository(); + var handler = mockRepository.Stub>(); + + mockRepository.ReplayAll(); + + // Call + var properties = new PipingFailureMechanismProperties( + failureMechanism, + handler); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(3, dynamicProperties.Count); + + const string generalCategory = "Algemeen"; + + PropertyDescriptor nameProperty = dynamicProperties[0]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + generalCategory, + "Naam", + "De naam van het toetsspoor.", + true); + + PropertyDescriptor labelProperty = dynamicProperties[1]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(labelProperty, + generalCategory, + "Label", + "Het label van het toetsspoor.", + true); + + PropertyDescriptor isRelevantProperty = dynamicProperties[2]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(isRelevantProperty, + generalCategory, + "Is relevant", + "Geeft aan of dit toetsspoor relevant is of niet.", + true); + + mockRepository.VerifyAll(); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase(-1)] + [TestCase(-0.1)] + [TestCase(1.1)] + [TestCase(8)] + public void A_SetInvalidValue_ThrowsArgumentOutOfRangeExceptionNoNotifications(double value) + { + // Setup + var failureMechanism = new PipingFailureMechanism(); + + var mocks = new MockRepository(); + var observable = mocks.StrictMock(); + + var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester( + failureMechanism, + value, + new[] + { + observable + }); + mocks.ReplayAll(); + + var properties = new PipingFailureMechanismProperties( + failureMechanism, + changeHandler); + + // Call + TestDelegate call = () => properties.A = value; + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("De waarde moet in het bereik [0,0, 1,0] liggen.", exception.Message); + Assert.IsTrue(changeHandler.Called); + mocks.VerifyAll(); + } + + [Test] + [TestCase(0)] + [TestCase(0.1)] + [TestCase(1)] + [TestCase(0.0000001)] + [TestCase(0.9999999)] + public void A_SetValidValue_SetsValueAndUpdatesObservers(double value) + { + // Setup + var failureMechanism = new PipingFailureMechanism(); + + var mocks = new MockRepository(); + var observable = mocks.StrictMock(); + observable.Expect(o => o.NotifyObservers()); + + var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester( + failureMechanism, + value, + new[] + { + observable + }); + mocks.ReplayAll(); + + var properties = new PipingFailureMechanismProperties( + failureMechanism, + changeHandler); + + // Call + properties.A = value; + + // Assert + Assert.AreEqual(value, failureMechanism.PipingProbabilityAssessmentInput.A); + Assert.IsTrue(changeHandler.Called); + mocks.VerifyAll(); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase(double.NaN)] + [TestCase(double.NegativeInfinity)] + [TestCase(double.PositiveInfinity)] + [TestCase(-0.005)] + [TestCase(20.005)] + public void WaterVolumetricWeight_SetInvalidValue_ThrowArgumentExceptionAndDoesNotUpdateObservers(double value) + { + // Setup + var failureMechanism = new PipingFailureMechanism(); + var roundedValue = (RoundedDouble) value; + + var mocks = new MockRepository(); + var observable = mocks.StrictMock(); + var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester( + failureMechanism, + roundedValue, + new[] + { + observable + }); + mocks.ReplayAll(); + + var properties = new PipingFailureMechanismProperties( + failureMechanism, + changeHandler); + + // Call + TestDelegate test = () => properties.WaterVolumetricWeight = roundedValue; + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "De waarde moet binnen het bereik [0,00, 20,00] liggen."); + Assert.IsTrue(changeHandler.Called); + mocks.VerifyAll(); // Does not expect notify observers. + } + + [Test] + [TestCase(5)] + [TestCase(-0.004)] + [TestCase(20.004)] + public void WaterVolumetricWeight_SetValidValue_SetsValueRoundedAndUpdatesObservers(double value) + { + // Setup + var failureMechanism = new PipingFailureMechanism(); + var roundedValue = (RoundedDouble) value; + + var mocks = new MockRepository(); + var observable = mocks.StrictMock(); + observable.Expect(o => o.NotifyObservers()); + + var changeHandler = new FailureMechanismSetPropertyValueAfterConfirmationParameterTester( + failureMechanism, + roundedValue, + new[] + { + observable + }); + + mocks.ReplayAll(); + + var properties = new PipingFailureMechanismProperties( + failureMechanism, + changeHandler); + + // Call + properties.WaterVolumetricWeight = roundedValue; + + // Assert + Assert.AreEqual(value, failureMechanism.GeneralInput.WaterVolumetricWeight, + failureMechanism.GeneralInput.WaterVolumetricWeight.GetAccuracy()); + Assert.IsTrue(changeHandler.Called); + mocks.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void DynamicVisibleValidationMethod_DependingOnRelevancy_ReturnExpectedVisibility(bool isRelevant) + { + // Setup + var mocks = new MockRepository(); + var changeHandler = mocks.Stub>(); + mocks.ReplayAll(); + + var pipingFailureMechanism = new PipingFailureMechanism + { + IsRelevant = isRelevant + }; + var properties = new PipingFailureMechanismProperties( + pipingFailureMechanism, + changeHandler); + + // Assert + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Name))); + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.Code))); + Assert.IsTrue(properties.DynamicVisibleValidationMethod(nameof(properties.IsRelevant))); + + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.CriticalHeaveGradient))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WaterVolumetricWeight))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.A))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.B))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SectionLength))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.N))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SandParticlesVolumicWeight))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WhitesDragCoefficient))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.BeddingAngle))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.WaterKinematicViscosity))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.Gravity))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.MeanDiameter70))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SellmeijerReductionFactor))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.UpliftModelFactor))); + Assert.AreEqual(isRelevant, properties.DynamicVisibleValidationMethod(nameof(properties.SellmeijerModelFactor))); + + Assert.IsTrue(properties.DynamicVisibleValidationMethod(null)); + + mocks.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj =================================================================== diff -u -rf4c4fe2feedd73d2f45395017b77df2bb56d5c27 -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision f4c4fe2feedd73d2f45395017b77df2bb56d5c27) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Ringtoets.Piping.Forms.Test.csproj (.../Ringtoets.Piping.Forms.Test.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -36,8 +36,8 @@ - + Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs =================================================================== diff -u -rdf44be36b5c375ff32cd94086af5e6610ec9fc3a -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 --- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs (.../PipingPluginTest.cs) (revision df44be36b5c375ff32cd94086af5e6610ec9fc3a) +++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PipingPluginTest.cs (.../PipingPluginTest.cs) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -68,7 +68,7 @@ PluginTestHelper.AssertPropertyInfoDefined( propertyInfos, typeof(PipingFailureMechanismContext), - typeof(PipingFailureMechanismContextProperties)); + typeof(PipingFailureMechanismProperties)); PluginTestHelper.AssertPropertyInfoDefined( propertyInfos, Fisheye: Tag b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismContextPropertyInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/PropertyInfos/PipingFailureMechanismPropertyInfoTest.cs (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -0,0 +1,82 @@ +// Copyright (C) Stichting Deltares 2017. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Linq; +using Core.Common.Gui.Plugin; +using Core.Common.Gui.PropertyBag; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Piping.Data; +using Ringtoets.Piping.Forms.PresentationObjects; +using Ringtoets.Piping.Forms.PropertyClasses; + +namespace Ringtoets.Piping.Plugin.Test.PropertyInfos +{ + [TestFixture] + public class PipingFailureMechanismPropertyInfoTest + { + private PipingPlugin plugin; + private PropertyInfo info; + + [SetUp] + public void SetUp() + { + plugin = new PipingPlugin(); + info = plugin.GetPropertyInfos().First(tni => tni.PropertyObjectType == typeof(PipingFailureMechanismProperties)); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(PipingFailureMechanismContext), info.DataType); + Assert.AreEqual(typeof(PipingFailureMechanismProperties), info.PropertyObjectType); + } + + [Test] + public void CreateInstance_Always_NewPropertiesWithFailureMechanismContextAsData() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + var context = new PipingFailureMechanismContext(failureMechanism, assessmentSection); + + // Call + IObjectProperties objectProperties = info.CreateInstance(context); + + // Assert + Assert.IsInstanceOf(objectProperties); + Assert.AreSame(failureMechanism, objectProperties.Data); + + mocks.VerifyAll(); + } + } +} \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj =================================================================== diff -u -rdf44be36b5c375ff32cd94086af5e6610ec9fc3a -rb9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4 --- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj (.../Ringtoets.Piping.Plugin.Test.csproj) (revision df44be36b5c375ff32cd94086af5e6610ec9fc3a) +++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/Ringtoets.Piping.Plugin.Test.csproj (.../Ringtoets.Piping.Plugin.Test.csproj) (revision b9e7df65b2b31d7b0c9faf17926dde1efbbf4cb4) @@ -51,7 +51,7 @@ - +