// Copyright (C) Stichting Deltares 2016. 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 NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Contribution; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Piping.Data; using Ringtoets.Piping.Forms.PresentationObjects; using Ringtoets.Piping.Forms.PropertyClasses; namespace Ringtoets.Piping.Forms.Test.PropertyClasses { [TestFixture] public class PipingFailureMechanismContextPropertiesTest { [Test] public void Constructor_ExpectedValues() { // Call var properties = new PipingFailureMechanismContextProperties(); // Assert Assert.IsInstanceOf>(properties); } [Test] public void Data_SetNewPipingFailureMechanismContextInstance_ReturnCorrectPropertyValues() { // Setup var failureMechanism = new PipingFailureMechanism(); var properties = new PipingFailureMechanismContextProperties(); var mockRepository = new MockRepository(); var assessmentSection = mockRepository.StrictMock(); var norm = 300; assessmentSection.Stub(sec => sec.FailureMechanismContribution).Return(new FailureMechanismContribution(new IFailureMechanism[0], 100, norm)); mockRepository.ReplayAll(); // Call properties.Data = new PipingFailureMechanismContext(failureMechanism, assessmentSection); // Assert Assert.AreEqual(failureMechanism.Name, properties.Name); Assert.AreEqual(failureMechanism.Code, properties.Code); 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.UpliftCriticalSafetyFactor, properties.UpliftCriticalSafetyFactor); Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.A, properties.A); Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.B, properties.B); Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.GetHeaveNormDependentFactor(norm), properties.HeaveNormDependentFactor); Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.GetSellmeijerNormDependentFactor(norm), properties.SellmeijerNormDependentFactor); mockRepository.VerifyAll(); } [Test] public void PropertyAttributes_ReturnExpectedValues() { // Setup var failureMechanism = new PipingFailureMechanism(); var properties = new PipingFailureMechanismContextProperties(); // Call properties.Data = new PipingFailureMechanismContext(failureMechanism, new MockRepository().StrictMock()); // Assert var dynamicPropertyBag = new DynamicPropertyBag(properties); PropertyDescriptorCollection dynamicProperties = dynamicPropertyBag.GetProperties(); Assert.AreEqual(19, dynamicProperties.Count); var generalCategory = "Algemeen"; var heaveCategory = "Heave"; var modelFactorCategory = "Modelfactoren"; var upliftCategory = "Opbarsten"; var semiProbabilisticCategory = "Semi-probabilistische parameters"; var sellmeijerCategory = "Terugschrijdende erosie (Sellmeijer)"; PropertyDescriptor nameProperty = dynamicProperties[0]; Assert.IsNotNull(nameProperty); Assert.IsTrue(nameProperty.IsReadOnly); Assert.AreEqual(generalCategory, nameProperty.Category); Assert.AreEqual("Naam", nameProperty.DisplayName); Assert.AreEqual("De naam van het toetsspoor.", nameProperty.Description); PropertyDescriptor labelProperty = dynamicProperties[1]; Assert.IsNotNull(labelProperty); Assert.IsTrue(labelProperty.IsReadOnly); Assert.AreEqual(generalCategory, labelProperty.Category); Assert.AreEqual("Label", labelProperty.DisplayName); Assert.AreEqual("Het label van het toetsspoor.", labelProperty.Description); PropertyDescriptor volumicWeightOfWaterProperty = dynamicProperties[2]; Assert.IsNotNull(volumicWeightOfWaterProperty); Assert.IsTrue(volumicWeightOfWaterProperty.IsReadOnly); Assert.AreEqual(generalCategory, volumicWeightOfWaterProperty.Category); Assert.AreEqual("Volumiek gewicht van water [kN/m³]", volumicWeightOfWaterProperty.DisplayName); Assert.AreEqual("Volumiek gewicht van water.", volumicWeightOfWaterProperty.Description); PropertyDescriptor upliftModelFactorProperty = dynamicProperties[3]; Assert.IsNotNull(upliftModelFactorProperty); Assert.IsTrue(upliftModelFactorProperty.IsReadOnly); Assert.AreEqual(modelFactorCategory, upliftModelFactorProperty.Category); Assert.AreEqual("Modelfactor opbarsten [-]", upliftModelFactorProperty.DisplayName); Assert.AreEqual("Rekenwaarde om de modelonzekerheid in het model van opbarsten in rekening te brengen.", upliftModelFactorProperty.Description); PropertyDescriptor sellmeijerModelFactorProperty = dynamicProperties[4]; Assert.IsNotNull(sellmeijerModelFactorProperty); Assert.IsTrue(sellmeijerModelFactorProperty.IsReadOnly); Assert.AreEqual(modelFactorCategory, sellmeijerModelFactorProperty.Category); Assert.AreEqual("Modelfactor piping toegepast op Sellmeijermodel [-]", sellmeijerModelFactorProperty.DisplayName); Assert.AreEqual("Rekenwaarde om de modelonzekerheid in het model van Sellmeijer in rekening te brengen.", sellmeijerModelFactorProperty.Description); PropertyDescriptor aProperty = dynamicProperties[5]; Assert.IsNotNull(aProperty); Assert.IsFalse(aProperty.IsReadOnly); Assert.AreEqual(semiProbabilisticCategory, aProperty.Category); Assert.AreEqual("a", aProperty.DisplayName); Assert.AreEqual("De parameter 'a' die gebruikt wordt voor het lengte effect in berekening van de maximaal toelaatbare faalkans.", aProperty.Description); PropertyDescriptor bProperty = dynamicProperties[6]; Assert.IsNotNull(bProperty); Assert.IsTrue(bProperty.IsReadOnly); Assert.AreEqual(semiProbabilisticCategory, bProperty.Category); Assert.AreEqual("b", bProperty.DisplayName); Assert.AreEqual("De parameter 'b' die gebruikt wordt voor het lengte effect in berekening van de maximaal toelaatbare faalkans.", bProperty.Description); PropertyDescriptor heaveNormDependentFactor = dynamicProperties[7]; Assert.IsNotNull(heaveNormDependentFactor); Assert.IsTrue(heaveNormDependentFactor.IsReadOnly); Assert.AreEqual(semiProbabilisticCategory, heaveNormDependentFactor.Category); Assert.AreEqual("Normafhankelijke factor voor heave", heaveNormDependentFactor.DisplayName); Assert.AreEqual("Normafhankelijke factor die gebruikt wordt bij het omzetten van de veiligheidsfactor voor heave naar een betrouwbaarheidsindex.", heaveNormDependentFactor.Description); PropertyDescriptor sellmeijerNormDependentFactor = dynamicProperties[8]; Assert.IsNotNull(sellmeijerNormDependentFactor); Assert.IsTrue(sellmeijerNormDependentFactor.IsReadOnly); Assert.AreEqual(semiProbabilisticCategory, sellmeijerNormDependentFactor.Category); Assert.AreEqual("Normafhankelijke factor voor terugschrijdende erosie", sellmeijerNormDependentFactor.DisplayName); Assert.AreEqual("Normafhankelijke factor die gebruikt wordt bij het omzetten van de veiligheidsfactor voor terugschrijdende erosie (Sellmeijer) naar een betrouwbaarheidsindex.", sellmeijerNormDependentFactor.Description); PropertyDescriptor criticalHeaveGradientProperty = dynamicProperties[9]; Assert.IsNotNull(criticalHeaveGradientProperty); Assert.IsTrue(criticalHeaveGradientProperty.IsReadOnly); Assert.AreEqual(heaveCategory, criticalHeaveGradientProperty.Category); Assert.AreEqual("Kritiek verhang m.b.t. heave [-]", criticalHeaveGradientProperty.DisplayName); Assert.AreEqual("Kritiek verhang met betrekking tot heave.", criticalHeaveGradientProperty.Description); PropertyDescriptor criticalSafetyFactorUpliftProperty = dynamicProperties[10]; Assert.IsNotNull(criticalSafetyFactorUpliftProperty); Assert.IsFalse(criticalSafetyFactorUpliftProperty.IsReadOnly); Assert.AreEqual(upliftCategory, criticalSafetyFactorUpliftProperty.Category); Assert.AreEqual("Kritische veiligheidsfactor voor opbarsten [-]", criticalSafetyFactorUpliftProperty.DisplayName); Assert.AreEqual("De veiligheidsfactor die wordt vergeleken met de berekende stabiliteitsfactor van het submechanisme opbarsten.", criticalSafetyFactorUpliftProperty.Description); PropertyDescriptor volumetricWeightSandParticlesProperty = dynamicProperties[11]; Assert.IsNotNull(volumetricWeightSandParticlesProperty); Assert.IsTrue(volumetricWeightSandParticlesProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, volumetricWeightSandParticlesProperty.Category); Assert.AreEqual("Volumiek gewicht van de zandkorrels onder water [kN/m³]", volumetricWeightSandParticlesProperty.DisplayName); Assert.AreEqual("Het (ondergedompelde) volumegewicht van zandkorrelmateriaal van een zandlaag.", volumetricWeightSandParticlesProperty.Description); PropertyDescriptor whitesDragCoefficientProperty = dynamicProperties[12]; Assert.IsNotNull(whitesDragCoefficientProperty); Assert.IsTrue(whitesDragCoefficientProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, whitesDragCoefficientProperty.Category); Assert.AreEqual("Coëfficiënt van White [-]", whitesDragCoefficientProperty.DisplayName); Assert.AreEqual("Sleepkrachtfactor volgens White.", whitesDragCoefficientProperty.Description); PropertyDescriptor beddingAngleProperty = dynamicProperties[13]; Assert.IsNotNull(beddingAngleProperty); Assert.IsTrue(beddingAngleProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, beddingAngleProperty.Category); Assert.AreEqual("Rolweerstandshoek [°]", beddingAngleProperty.DisplayName); Assert.AreEqual("Hoek in het krachtenevenwicht die aangeeft hoeveel weerstand de korrels bieden tegen rollen; ook beddingshoek genoemd.", beddingAngleProperty.Description); PropertyDescriptor waterKinematicViscosityProperty = dynamicProperties[14]; Assert.IsNotNull(waterKinematicViscosityProperty); Assert.IsTrue(waterKinematicViscosityProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, waterKinematicViscosityProperty.Category); Assert.AreEqual("Kinematische viscositeit van water bij 10° C [m²/s]", waterKinematicViscosityProperty.DisplayName); Assert.AreEqual("Kinematische viscositeit van water bij 10° C.", waterKinematicViscosityProperty.Description); PropertyDescriptor gravityProperty = dynamicProperties[15]; Assert.IsNotNull(gravityProperty); Assert.IsTrue(gravityProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, gravityProperty.Category); Assert.AreEqual("Valversnelling [m/s²]", gravityProperty.DisplayName); Assert.AreEqual("Valversnelling", gravityProperty.Description); PropertyDescriptor meanDiameter70Property = dynamicProperties[16]; Assert.IsNotNull(meanDiameter70Property); Assert.IsTrue(meanDiameter70Property.IsReadOnly); Assert.AreEqual(sellmeijerCategory, meanDiameter70Property.Category); Assert.AreEqual("Referentiewaarde voor 70%-fraktiel in Sellmeijer regel [m]", meanDiameter70Property.DisplayName); Assert.AreEqual("Gemiddelde d70 van de in kleine schaalproeven toegepaste zandsoorten, waarop formule van Sellmeijer is gefit.", meanDiameter70Property.Description); PropertyDescriptor reductionFactorSellmeijerProperty = dynamicProperties[17]; Assert.IsNotNull(reductionFactorSellmeijerProperty); Assert.IsTrue(reductionFactorSellmeijerProperty.IsReadOnly); Assert.AreEqual(sellmeijerCategory, reductionFactorSellmeijerProperty.Category); Assert.AreEqual("Reductiefactor Sellmeijer [-]", reductionFactorSellmeijerProperty.DisplayName); Assert.AreEqual("Reductiefactor Sellmeijer.", reductionFactorSellmeijerProperty.Description); } [Test] [TestCase(-1)] [TestCase(-0.1)] [TestCase(1.1)] [TestCase(8)] public void A_SetInvalidValue_ThrowsArgumentException(double value) { // Setup var mocks = new MockRepository(); var observerMock = mocks.StrictMock(); mocks.ReplayAll(); var failureMechanism = new PipingFailureMechanism(); var properties = new PipingFailureMechanismContextProperties { Data = new PipingFailureMechanismContext(failureMechanism, new MockRepository().StrictMock()) }; failureMechanism.Attach(observerMock); // Call TestDelegate call = () => properties.A = value; // Assert var exception = Assert.Throws(call); Assert.AreEqual("De waarde moet tussen 0 en 1 zijn.", exception.Message); Assert.AreEqual(failureMechanism.PipingProbabilityAssessmentInput.A, properties.A); 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 mocks = new MockRepository(); var observerMock = mocks.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); var failureMechanism = new PipingFailureMechanism(); var properties = new PipingFailureMechanismContextProperties { Data = new PipingFailureMechanismContext(failureMechanism, new MockRepository().StrictMock()) }; failureMechanism.Attach(observerMock); // Call properties.A = value; // Assert Assert.AreEqual(value, failureMechanism.PipingProbabilityAssessmentInput.A); mocks.VerifyAll(); } [Test] public void UpliftCriticalSafetyFactor_Always_UpdateGeneralInputAndUpdateObservers() { // Setup var mocks = new MockRepository(); var observerMock = mocks.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); var failureMechanism = new PipingFailureMechanism(); var properties = new PipingFailureMechanismContextProperties { Data = new PipingFailureMechanismContext(failureMechanism, new MockRepository().StrictMock()) }; failureMechanism.Attach(observerMock); var value = new Random(21).NextDouble() + 0.1; // Call properties.UpliftCriticalSafetyFactor = (RoundedDouble) value; // Assert var upliftCriticalSafetyFactor = failureMechanism.PipingProbabilityAssessmentInput.UpliftCriticalSafetyFactor; Assert.AreEqual(value, upliftCriticalSafetyFactor, upliftCriticalSafetyFactor.GetAccuracy()); mocks.VerifyAll(); } } }