Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenarioRow.cs =================================================================== diff -u -r650fc7b43cb6729baee51d079f0377df8d7a3de9 -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenarioRow.cs (.../MacroStabilityInwardsScenarioRow.cs) (revision 650fc7b43cb6729baee51d079f0377df8d7a3de9) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenarioRow.cs (.../MacroStabilityInwardsScenarioRow.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -22,6 +22,7 @@ using System; using System.ComponentModel; using Core.Common.Base.Data; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Forms.Helpers; using Ringtoets.Common.Forms.TypeConverters; using Ringtoets.MacroStabilityInwards.Data; @@ -34,25 +35,47 @@ /// internal class MacroStabilityInwardsScenarioRow { + private readonly DerivedMacroStabilityInwardsOutput derivedOutput; + /// /// Creates a new instance of . /// - /// The this row contains. - /// Thrown when is null. - public MacroStabilityInwardsScenarioRow(MacroStabilityInwardsCalculationScenario macroStabilityInwardsCalculation) + /// The this row contains. + /// The failure mechanism that the calculation belongs to. + /// The assessment section that the calculation belongs to. + /// Thrown when any parameter is null. + public MacroStabilityInwardsScenarioRow(MacroStabilityInwardsCalculationScenario calculation, + MacroStabilityInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { - if (macroStabilityInwardsCalculation == null) + if (calculation == null) { - throw new ArgumentNullException(nameof(macroStabilityInwardsCalculation)); + throw new ArgumentNullException(nameof(calculation)); } - MacroStabilityInwardsCalculation = macroStabilityInwardsCalculation; + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + Calculation = calculation; + + if (Calculation.HasOutput) + { + derivedOutput = DerivedMacroStabilityInwardsOutputFactory.Create(calculation.Output, failureMechanism.MacroStabilityInwardsProbabilityAssessmentInput, + assessmentSection.FailureMechanismContribution.Norm, failureMechanism.Contribution); + } } /// /// Gets the this row contains. /// - public MacroStabilityInwardsCalculationScenario MacroStabilityInwardsCalculation { get; } + public MacroStabilityInwardsCalculationScenario Calculation { get; } /// /// Gets or sets the is relevant. @@ -61,12 +84,12 @@ { get { - return MacroStabilityInwardsCalculation.IsRelevant; + return Calculation.IsRelevant; } set { - MacroStabilityInwardsCalculation.IsRelevant = value; - MacroStabilityInwardsCalculation.NotifyObservers(); + Calculation.IsRelevant = value; + Calculation.NotifyObservers(); } } @@ -77,12 +100,12 @@ { get { - return new RoundedDouble(0, MacroStabilityInwardsCalculation.Contribution * 100); + return new RoundedDouble(0, Calculation.Contribution * 100); } set { - MacroStabilityInwardsCalculation.Contribution = (RoundedDouble) (value / 100); - MacroStabilityInwardsCalculation.NotifyObservers(); + Calculation.Contribution = (RoundedDouble) (value / 100); + Calculation.NotifyObservers(); } } @@ -93,7 +116,7 @@ { get { - return MacroStabilityInwardsCalculation.Name; + return Calculation.Name; } } @@ -105,11 +128,9 @@ { get { - if (MacroStabilityInwardsCalculation.SemiProbabilisticOutput == null) - { - return RingtoetsCommonFormsResources.RoundedRouble_No_result_dash; - } - return ProbabilityFormattingHelper.Format(MacroStabilityInwardsCalculation.SemiProbabilisticOutput.MacroStabilityInwardsProbability); + return derivedOutput == null + ? RingtoetsCommonFormsResources.RoundedRouble_No_result_dash + : ProbabilityFormattingHelper.Format(derivedOutput.MacroStabilityInwardsProbability); } } } Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenariosView.cs =================================================================== diff -u -r42b0a40e019f6b36f83495fc46b13bac5971292f -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenariosView.cs (.../MacroStabilityInwardsScenariosView.cs) (revision 42b0a40e019f6b36f83495fc46b13bac5971292f) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsScenariosView.cs (.../MacroStabilityInwardsScenariosView.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -166,7 +166,10 @@ .OfType() .Where(pc => pc.IsSurfaceLineIntersectionWithReferenceLineInSection(lineSegments)); - List dataSource = calculations.Select(pc => new MacroStabilityInwardsScenarioRow(pc)).ToList(); + List dataSource = calculations.Select(pc => new MacroStabilityInwardsScenarioRow( + pc, + MacroStabilityInwardsFailureMechanism, + null)).ToList(); dataGridViewControl.SetDataSource(dataSource); } Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsCalculationScenarioFactoryTest.cs =================================================================== diff -u -r8d246ac6328e6e649ff6e78dfe3fac210d789ba0 -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsCalculationScenarioFactoryTest.cs (.../MacroStabilityInwardsCalculationScenarioFactoryTest.cs) (revision 8d246ac6328e6e649ff6e78dfe3fac210d789ba0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsCalculationScenarioFactoryTest.cs (.../MacroStabilityInwardsCalculationScenarioFactoryTest.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -218,7 +218,30 @@ MacroStabilityInwardsCalculationScenario scenario = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); // Assert - MacroStabilityInwardsInput inputParameters = scenario.InputParameters; + AssertInput(scenario.InputParameters); + } + + [Test] + public void CreateCalculatedMacroStabilityInwardsCalculationScenario_ReturnMacroStabilityInwardsCalculationScenario() + { + // Call + MacroStabilityInwardsCalculationScenario scenario = MacroStabilityInwardsCalculationScenarioFactory.CreateCalculatedMacroStabilityInwardsCalculationScenario(); + + // Assert + AssertInput(scenario.InputParameters); + + MacroStabilityInwardsOutput output = scenario.Output; + Assert.IsNotNull(output); + Assert.AreEqual(0.69717486793975103, output.FactorOfStability); + Assert.AreEqual(0.040462733730889267, output.ZValue); + Assert.AreEqual(0.97911632898222489, output.ForbiddenZonesXEntryMax); + Assert.AreEqual(0.44677048942389452, output.ForbiddenZonesXEntryMin); + Assert.IsNotNull(output.SlidingCurve); + Assert.IsNotNull(output.SlipPlane); + } + + private static void AssertInput(MacroStabilityInwardsInput inputParameters) + { Assert.AreEqual(MacroStabilityInwardsDikeSoilScenario.SandDikeOnClay, inputParameters.DikeSoilScenario); Assert.AreEqual(1, inputParameters.PiezometricHeadPhreaticLine2Outwards, Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsOutputTestFactoryTest.cs =================================================================== diff -u -rf85578eb9fbbd05088386a9b17f9687f832b051a -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsOutputTestFactoryTest.cs (.../MacroStabilityInwardsOutputTestFactoryTest.cs) (revision f85578eb9fbbd05088386a9b17f9687f832b051a) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil.Test/MacroStabilityInwardsOutputTestFactoryTest.cs (.../MacroStabilityInwardsOutputTestFactoryTest.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -101,18 +101,12 @@ // Assert Assert.IsNotNull(output); - AssertIsConcreteValue(output.FactorOfStability); - AssertIsConcreteValue(output.ZValue); - AssertIsConcreteValue(output.ForbiddenZonesXEntryMax); - AssertIsConcreteValue(output.ForbiddenZonesXEntryMin); + Assert.AreEqual(0.69717486793975103, output.FactorOfStability); + Assert.AreEqual(0.040462733730889267, output.ZValue); + Assert.AreEqual(0.97911632898222489, output.ForbiddenZonesXEntryMax); + Assert.AreEqual(0.44677048942389452, output.ForbiddenZonesXEntryMin); Assert.IsNotNull(output.SlidingCurve); Assert.IsNotNull(output.SlipPlane); } - - private static void AssertIsConcreteValue(double actualValue) - { - Assert.IsFalse(double.IsNaN(actualValue)); - Assert.IsFalse(double.IsInfinity(actualValue)); - } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCalculationScenarioFactory.cs =================================================================== diff -u -r8d246ac6328e6e649ff6e78dfe3fac210d789ba0 -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCalculationScenarioFactory.cs (.../MacroStabilityInwardsCalculationScenarioFactory.cs) (revision 8d246ac6328e6e649ff6e78dfe3fac210d789ba0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Data.TestUtil/MacroStabilityInwardsCalculationScenarioFactory.cs (.../MacroStabilityInwardsCalculationScenarioFactory.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -301,5 +301,16 @@ } }; } + + /// + /// Creates a scenario with valid input and output. + /// + /// A new . + public static MacroStabilityInwardsCalculationScenario CreateCalculatedMacroStabilityInwardsCalculationScenario() + { + MacroStabilityInwardsCalculationScenario calculation = CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); + calculation.Output = MacroStabilityInwardsOutputTestFactory.CreateRandomOutput(); + return calculation; + } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsScenarioRowTest.cs =================================================================== diff -u -rd485f27eb5a6d688406882dce60c3229e22f2ac2 -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsScenarioRowTest.cs (.../MacroStabilityInwardsScenarioRowTest.cs) (revision d485f27eb5a6d688406882dce60c3229e22f2ac2) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Views/MacroStabilityInwardsScenarioRowTest.cs (.../MacroStabilityInwardsScenarioRowTest.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -24,6 +24,7 @@ using Core.Common.Base.Data; using NUnit.Framework; using Rhino.Mocks; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms.Helpers; using Ringtoets.MacroStabilityInwards.Data; @@ -36,52 +37,98 @@ public class MacroStabilityInwardsScenarioRowTest { [Test] - public void Constructor_WithoutCalculation_ThrowsArgumentNullException() + public void Constructor_CalculationNull_ThrowsArgumentNullException() { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + // Call - TestDelegate test = () => new MacroStabilityInwardsScenarioRow(null); + TestDelegate test = () => new MacroStabilityInwardsScenarioRow(null, failureMechanism, assessmentSection); // Assert - string paramName = Assert.Throws(test).ParamName; - Assert.AreEqual("macroStabilityInwardsCalculation", paramName); + var exception = Assert.Throws(test); + Assert.AreEqual("calculation", exception.ParamName); + mocks.VerifyAll(); } [Test] - public void Constructor_WithCalculationWithSemiProbabilisticOutput_PropertiesFromCalculation() + public void Constructor_FailureMechanismNull_ThrowsArgumentNullException() { // Setup - var random = new Random(21); + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); - calculation.SemiProbabilisticOutput = new MacroStabilityInwardsSemiProbabilisticOutput( - random.NextDouble(), - random.NextDouble(), - random.NextDouble(), - random.NextDouble(), - random.NextDouble(), - random.NextDouble()); // Call - var row = new MacroStabilityInwardsScenarioRow(calculation); + TestDelegate test = () => new MacroStabilityInwardsScenarioRow(calculation, null, assessmentSection); // Assert - Assert.AreSame(calculation, row.MacroStabilityInwardsCalculation); + var exception = Assert.Throws(test); + Assert.AreEqual("failureMechanism", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + public void Constructor_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Setup + MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + + // Call + TestDelegate test = () => new MacroStabilityInwardsScenarioRow(calculation, failureMechanism, null); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void Constructor_WithCalculationWithOutput_PropertiesFromCalculation() + { + // Setup + MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateCalculatedMacroStabilityInwardsCalculationScenario(); + var failureMechanism = new TestMacroStabilityInwardsFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + + // Call + var row = new MacroStabilityInwardsScenarioRow(calculation, failureMechanism, assessmentSection); + + // Assert + Assert.AreSame(calculation, row.Calculation); Assert.AreEqual(calculation.Name, row.Name); Assert.AreEqual(calculation.IsRelevant, row.IsRelevant); Assert.AreEqual(calculation.Contribution * 100, row.Contribution); - Assert.AreEqual(ProbabilityFormattingHelper.Format(calculation.SemiProbabilisticOutput.MacroStabilityInwardsProbability), row.FailureProbabilityMacroStabilityInwards); + + DerivedMacroStabilityInwardsOutput expectedDerivedOutput = DerivedMacroStabilityInwardsOutputFactory.Create( + calculation.Output, failureMechanism.MacroStabilityInwardsProbabilityAssessmentInput, + assessmentSection.FailureMechanismContribution.Norm, failureMechanism.Contribution); + Assert.AreEqual(ProbabilityFormattingHelper.Format(expectedDerivedOutput.MacroStabilityInwardsProbability), row.FailureProbabilityMacroStabilityInwards); } [Test] public void Constructor_WithCalculationWithoutSemiProbabilisticOutput_PropertiesFromCalculation() { // Setup MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); + var failureMechanism = new TestMacroStabilityInwardsFailureMechanism(); + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + // Call - var row = new MacroStabilityInwardsScenarioRow(calculation); + var row = new MacroStabilityInwardsScenarioRow(calculation, failureMechanism, assessmentSection); // Assert - Assert.AreSame(calculation, row.MacroStabilityInwardsCalculation); + Assert.AreSame(calculation, row.Calculation); Assert.AreEqual(calculation.Name, row.Name); Assert.AreEqual(calculation.IsRelevant, row.IsRelevant); Assert.AreEqual(calculation.Contribution * 100, row.Contribution); @@ -94,49 +141,53 @@ public void IsRelevant_AlwaysOnChange_NotifyObserversAndCalculationPropertyChanged(bool newValue) { // Setup + var failureMechanism = new TestMacroStabilityInwardsFailureMechanism(); + MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); - MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); calculation.Attach(observer); - var row = new MacroStabilityInwardsScenarioRow(calculation); + var row = new MacroStabilityInwardsScenarioRow(calculation, failureMechanism, assessmentSection); // Call row.IsRelevant = newValue; // Assert Assert.AreEqual(newValue, calculation.IsRelevant); - mocks.VerifyAll(); } [Test] public void Contribution_AlwaysOnChange_NotifyObserverAndCalculationPropertyChanged() { // Setup - int newValue = new Random(21).Next(0, 100); - + var failureMechanism = new TestMacroStabilityInwardsFailureMechanism(); MacroStabilityInwardsCalculationScenario calculation = MacroStabilityInwardsCalculationScenarioFactory.CreateMacroStabilityInwardsCalculationScenarioWithValidInput(); - var row = new MacroStabilityInwardsScenarioRow(calculation); - var counter = 0; - using (new Observer(() => counter++) - { - Observable = calculation - }) - { - // Call - row.Contribution = (RoundedDouble) newValue; + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); - // Assert - Assert.AreEqual(1, counter); + calculation.Attach(observer); - Assert.AreEqual(2, calculation.Contribution.NumberOfDecimalPlaces); - Assert.AreEqual(newValue, calculation.Contribution * 100, calculation.Contribution.GetAccuracy()); - } + var row = new MacroStabilityInwardsScenarioRow(calculation, failureMechanism, assessmentSection); + + int newValue = new Random(21).Next(0, 100); + + // Call + row.Contribution = (RoundedDouble) newValue; + + // Assert + Assert.AreEqual(2, calculation.Contribution.NumberOfDecimalPlaces); + Assert.AreEqual(newValue, calculation.Contribution * 100, calculation.Contribution.GetAccuracy()); + mocks.VerifyAll(); } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingScenarioRow.cs =================================================================== diff -u -r171eda478707e1f059c568074c7be10ecc93abb8 -re38673ff639b5d86a2f55997e2d0d876ba4737f7 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingScenarioRow.cs (.../PipingScenarioRow.cs) (revision 171eda478707e1f059c568074c7be10ecc93abb8) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingScenarioRow.cs (.../PipingScenarioRow.cs) (revision e38673ff639b5d86a2f55997e2d0d876ba4737f7) @@ -64,7 +64,7 @@ Calculation = calculation; - if (calculation.Output != null) + if (calculation.HasOutput) { derivedOutput = DerivedPipingOutputFactory.Create(calculation.Output, failureMechanism.PipingProbabilityAssessmentInput, assessmentSection.FailureMechanismContribution.Norm, failureMechanism.Contribution);