Index: Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -21,11 +21,9 @@
using System;
using System.Collections.Generic;
-using System.Globalization;
using System.Linq;
using Core.Common.Base;
using Core.Common.Base.Data;
-using CoreCommonResources = Core.Common.Base.Properties.Resources;
namespace Ringtoets.Common.Data.FailureMechanism
{
@@ -70,11 +68,22 @@
///
/// Gets and sets the value of assessment layer two a.
///
- public string AssessmentLayerTwoA
+ public RoundedDouble? AssessmentLayerTwoA
{
get
{
- return GetAssessmentResult();
+ var totalProbablity = (RoundedDouble?) 0.0;
+ foreach (var scenario in CalculationScenarios.Where(cs => cs.IsRelevant))
+ {
+ if (!scenario.Probability.HasValue)
+ {
+ return null;
+ }
+
+ totalProbablity += (scenario.Contribution*scenario.Probability.Value);
+ }
+
+ return totalProbablity;
}
}
@@ -88,26 +97,17 @@
///
public RoundedDouble AssessmentLayerThree { get; set; }
- ///
- /// Gets and sets a list of
- ///
- public List CalculationScenarios { get; private set; }
-
- private string GetAssessmentResult()
+ public RoundedDouble TotalContribution
{
- var relevantScenarios = CalculationScenarios.Where(cs => cs.IsRelevant).ToList();
- double totalContribution = relevantScenarios.Aggregate(0, (current, calculationScenario) => current + calculationScenario.Contribution);
-
- if (relevantScenarios.Any() && Math.Abs(totalContribution - 1.0) > 1e-6)
+ get
{
- return double.NaN.ToString(CultureInfo.InvariantCulture);
+ return (RoundedDouble) CalculationScenarios.Where(cs => cs.IsRelevant).Aggregate(0, (current, calculationScenario) => current + calculationScenario.Contribution);
}
-
- var probability = relevantScenarios.Select(relevantScenario => relevantScenario.Contribution*relevantScenario.Probability).Aggregate(0.0, (current, probabilityContribution) => current + probabilityContribution);
-
- return double.IsNaN(probability) || Math.Abs(probability) < 1e-6
- ? "-"
- : string.Format(CoreCommonResources.ProbabilityPerYearFormat, probability);
}
+
+ ///
+ /// Gets and sets a list of
+ ///
+ public List CalculationScenarios { get; private set; }
}
}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/ICalculationScenario.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/ICalculationScenario.cs (.../ICalculationScenario.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/ICalculationScenario.cs (.../ICalculationScenario.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -41,6 +41,6 @@
///
/// Gets the probability of the scenario.
///
- RoundedDouble Probability { get; }
+ RoundedDouble? Probability { get; }
}
}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs
===================================================================
diff -u -r58c0d0a9d882210f47175f62ef1e4c494fce140b -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -239,6 +239,26 @@
}
///
+ /// Looks up a localized string similar to Niet alle berekeningen voor dit vak zijn uitgevoerd..
+ ///
+ public static string FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_are_executed {
+ get {
+ return ResourceManager.GetString("FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_are_ex" +
+ "ecuted", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Niet alle berekeningen voor dit vak hebben een geldige uitkomst..
+ ///
+ public static string FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_have_valid_output {
+ get {
+ return ResourceManager.GetString("FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_have_v" +
+ "alid_output", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%.
///
public static string FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_this_section_not_100 {
@@ -304,6 +324,15 @@
}
///
+ /// Looks up a localized string similar to -.
+ ///
+ public static string FailureMechanismSectionResultRow_AssessmentLayerTwoA_No_result_dash {
+ get {
+ return ResourceManager.GetString("FailureMechanismSectionResultRow_AssessmentLayerTwoA_No_result_dash", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to eindpunten.
///
public static string FailureMechanismSections_EndPoints_DisplayName {
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx
===================================================================
diff -u -r58c0d0a9d882210f47175f62ef1e4c494fce140b -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -244,4 +244,13 @@
Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%
+
+ Niet alle berekeningen voor dit vak zijn uitgevoerd.
+
+
+ Niet alle berekeningen voor dit vak hebben een geldige uitkomst.
+
+
+ -
+
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -22,13 +22,15 @@
using System;
using System.Collections.Generic;
using System.Drawing;
+using System.Globalization;
using System.Linq;
using System.Windows.Forms;
using Core.Common.Base;
using Core.Common.Base.Data;
using Core.Common.Controls.Views;
using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.Common.Forms.Properties;
+using CoreCommonResources = Core.Common.Base.Properties.Resources;
namespace Ringtoets.Common.Forms.Views
{
@@ -45,6 +47,7 @@
private DataGridViewTextBoxColumn assessmentLayerTwoA;
private DataGridViewTextBoxColumn assessmentLayerTwoB;
private DataGridViewTextBoxColumn assessmentLayerThree;
+ private const double tolerance = 1e-6;
///
/// Creates a new instance of .
@@ -229,7 +232,7 @@
private class FailureMechanismSectionResultRow
{
- private readonly FailureMechanismSectionResult failureMechanismSectionResult;
+ public readonly FailureMechanismSectionResult failureMechanismSectionResult;
public FailureMechanismSectionResultRow(FailureMechanismSectionResult failureMechanismSectionResult)
{
@@ -261,7 +264,19 @@
{
get
{
- return failureMechanismSectionResult.AssessmentLayerTwoA;
+ if (failureMechanismSectionResult.CalculationScenarios.Any() && Math.Abs(failureMechanismSectionResult.TotalContribution - 1.0) > tolerance)
+ {
+ return double.NaN.ToString(CultureInfo.InvariantCulture);
+ }
+
+ var layerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
+
+ if (!failureMechanismSectionResult.CalculationScenarios.Any() || !layerTwoA.HasValue || double.IsNaN(layerTwoA.Value))
+ {
+ return Resources.FailureMechanismSectionResultRow_AssessmentLayerTwoA_No_result_dash;
+ }
+
+ return string.Format(CoreCommonResources.ProbabilityPerYearFormat, layerTwoA.Value);
}
}
@@ -328,18 +343,44 @@
private void DataGridViewCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
- double doubleValue = 0;
- if (e.Value != null)
- {
- double.TryParse(e.Value.ToString(), out doubleValue);
- }
+ FailureMechanismSectionResultRow resultRow = dataGridView.Rows[e.RowIndex].DataBoundItem as FailureMechanismSectionResultRow;
- if (e.ColumnIndex == assessmentLayerTwoA.Index)
+ if (resultRow != null && e.ColumnIndex == assessmentLayerTwoA.Index)
{
- dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = double.IsNaN(doubleValue)
- ? Resources.FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_this_section_not_100
- : string.Empty;
+ FailureMechanismSectionResult rowObject = resultRow.failureMechanismSectionResult;
+
+ if (rowObject.AssessmentLayerOne)
+ {
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = string.Empty;
+ return;
+ }
+
+ if (rowObject.CalculationScenarios.Any() && Math.Abs(rowObject.TotalContribution - 1.0) > tolerance)
+ {
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = Resources.FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_this_section_not_100;
+ return;
+ }
+
+ var layerTwoA = rowObject.AssessmentLayerTwoA;
+
+ if (!layerTwoA.HasValue)
+ {
+ // Calculation not done.
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = Resources.FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_are_executed;
+ return;
+ }
+
+ if (double.IsNaN(layerTwoA.Value))
+ {
+ // Calculation output not valid.
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = Resources.FailureMechanismResultView_DataGridViewCellFormatting_Not_all_calculations_have_valid_output;
+ return;
+ }
+
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = string.Empty;
}
+
+
}
#endregion
Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs
===================================================================
diff -u -r8093a22c96deede9e51a3afa570de9a7cb2202a1 -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision 8093a22c96deede9e51a3afa570de9a7cb2202a1)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -43,7 +43,7 @@
// Assert
Assert.AreSame(section, sectionResult.Section);
Assert.IsFalse(sectionResult.AssessmentLayerOne);
- Assert.AreEqual("-", sectionResult.AssessmentLayerTwoA);
+ Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoA);
Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoB);
Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerThree);
CollectionAssert.IsEmpty(sectionResult.CalculationScenarios);
@@ -61,32 +61,49 @@
}
[Test]
- public void AssessmentLayerTwoA_ScenariosDoNotAddUpToHunderdPercent_ReturnsNaN()
+ [TestCase(true)]
+ [TestCase(false)]
+ public void AssessmentLayerOne_Always_ReturnsSetValue(bool newValue)
{
// Setup
var section = CreateSection();
var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+ // Call
+ failureMechanismSectionResult.AssessmentLayerOne = newValue;
+
+ // Assert
+ Assert.AreEqual(newValue, failureMechanismSectionResult.AssessmentLayerOne);
+ }
+
+ [Test]
+ public void AssessmentLayerTwoA_ScenariosCalculated_ReturnsValue()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+
var mocks = new MockRepository();
var calculationScenarioMock = mocks.StrictMock();
calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
- calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)0.5);
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0);
+ var expectedProbability = (RoundedDouble)41661830;
+ calculationScenarioMock.Expect(cs => cs.Probability).Return(expectedProbability).Repeat.Twice();
mocks.ReplayAll();
failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock);
// Call
- double assessmentLayerTwoA;
- double.TryParse(failureMechanismSectionResult.AssessmentLayerTwoA, out assessmentLayerTwoA);
+ var assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
// Assert
- Assert.IsNaN(assessmentLayerTwoA);
+ Assert.AreEqual(expectedProbability, assessmentLayerTwoA);
mocks.VerifyAll();
}
[Test]
- public void AssessmentLayerTwoA_ScenariosAddUpToHunderdPercent_ReturnsValueAsString()
+ public void AssessmentLayerTwoA_ScenarioNotCalculated_ReturnsNull()
{
// Setup
var section = CreateSection();
@@ -95,8 +112,7 @@
var mocks = new MockRepository();
var calculationScenarioMock = mocks.StrictMock();
calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
- calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Twice();
- calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble)41661830);
+ calculationScenarioMock.Expect(cs => cs.Probability).Return(null);
mocks.ReplayAll();
@@ -106,12 +122,12 @@
var assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
// Assert
- Assert.AreEqual(string.Format("1/{0:N0}", 41661830), assessmentLayerTwoA);
+ Assert.IsNull(assessmentLayerTwoA);
mocks.VerifyAll();
}
[Test]
- public void AssessmentLayerTwoA_ScenariosAddUpToHunderdPercentScenarioNotCalculated_ReturnsString()
+ public void AssessmentLayerTwoA_ScenarioInvalidOutput_ReturnsNaN()
{
// Setup
var section = CreateSection();
@@ -120,8 +136,8 @@
var mocks = new MockRepository();
var calculationScenarioMock = mocks.StrictMock();
calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
- calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Twice();
- calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble)double.NaN);
+ calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble?) double.NaN).Repeat.Twice();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble) 1.0);
mocks.ReplayAll();
@@ -131,10 +147,116 @@
var assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
// Assert
- Assert.AreEqual("-", assessmentLayerTwoA);
+ Assert.IsNaN(assessmentLayerTwoA);
mocks.VerifyAll();
}
+ [Test]
+ public void AssessmentLayerTwoA_NoScenarios_ReturnsValue()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+
+ // Call
+ var assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
+
+ // Assert
+ Assert.AreEqual((RoundedDouble)0.0, assessmentLayerTwoA);
+ }
+
+ [Test]
+ public void TotalContribution_Always_ReturnsTotalRelevantScenarioContribution()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)0.3);
+
+ var calculationScenarioMock2 = mocks.StrictMock();
+ calculationScenarioMock2.Expect(cs => cs.IsRelevant).Return(true);
+ calculationScenarioMock2.Expect(cs => cs.Contribution).Return((RoundedDouble)0.5);
+
+ var calculationScenarioMock3 = mocks.StrictMock();
+ calculationScenarioMock3.Expect(cs => cs.IsRelevant).Return(false);
+
+ mocks.ReplayAll();
+
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock);
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock2);
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock3);
+
+ // Call
+ var totalContribution = failureMechanismSectionResult.TotalContribution;
+
+ // Assert
+ Assert.AreEqual((RoundedDouble)0.8, totalContribution);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void AssessmentLayerTwoB_Always_ReturnsSetValue()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+ var assessmentLayerTwoBValue = (RoundedDouble) 3.0;
+
+ // Call
+ failureMechanismSectionResult.AssessmentLayerTwoB = assessmentLayerTwoBValue;
+
+ // Assert
+ Assert.AreEqual(assessmentLayerTwoBValue, failureMechanismSectionResult.AssessmentLayerTwoB);
+ }
+
+ [Test]
+ public void AssessmentLayerThree_Always_ReturnsSetValue()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+ var assessmentLayerThreeValue = (RoundedDouble)3.0;
+
+ // Call
+ failureMechanismSectionResult.AssessmentLayerThree = assessmentLayerThreeValue;
+
+ // Assert
+ Assert.AreEqual(assessmentLayerThreeValue, failureMechanismSectionResult.AssessmentLayerThree);
+ }
+
+ [Test]
+ public void CalculationScenarios_Always_ReturnsAddedCalculationScenarios()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+
+ // Precondition
+ CollectionAssert.IsEmpty(failureMechanismSectionResult.CalculationScenarios);
+
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ var calculationScenarioMock2 = mocks.StrictMock();
+ var calculationScenarioMock3 = mocks.StrictMock();
+
+ mocks.ReplayAll();
+
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock);
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock2);
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock3);
+
+ // Call
+ var scenarios = failureMechanismSectionResult.CalculationScenarios;
+
+ // Assert
+ CollectionAssert.AreEqual(new[] {calculationScenarioMock, calculationScenarioMock2, calculationScenarioMock3}, scenarios);
+ mocks.VerifyAll();
+ }
+
private static FailureMechanismSection CreateSection()
{
var points = new[]
Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -337,13 +337,14 @@
}
[Test]
- public void FailureMechanismResultView_AssessmentLayerTwoANaN_ShowsErrorTooltip()
+ public void FailureMechanismResultView_TotalContributionNotHundred_ShowsErrorTooltip()
{
// Setup
var mocks = new MockRepository();
var calculationScenarioMock = mocks.StrictMock();
- calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble) 0.3);
- calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble) 0.3).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble) 1000).Repeat.Any();
mocks.ReplayAll();
@@ -364,6 +365,8 @@
// Assert
Assert.AreEqual("Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%", dataGridViewCell.ErrorText);
+ Assert.AreEqual(double.NaN.ToString(), formattedValue);
+ mocks.VerifyAll();
}
}
@@ -373,8 +376,9 @@
// Setup
var mocks = new MockRepository();
var calculationScenarioMock = mocks.StrictMock();
- calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0);
- calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble?) 1000).Repeat.Any();
mocks.ReplayAll();
@@ -395,9 +399,136 @@
// Assert
Assert.AreEqual(string.Empty, dataGridViewCell.ErrorText);
+ Assert.AreEqual(string.Format("1/{0:N0}", calculationScenarioMock.Probability), formattedValue);
+ mocks.VerifyAll();
}
}
+ [Test]
+ public void FailureMechanismResultView_AssessmentLayerTwoANull_ShowsErrorTooltip()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.Probability).Return(null).Repeat.Any();
+
+ mocks.ReplayAll();
+
+ var rowIndex = 0;
+
+ using (var view = ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var sections = (List)view.Data;
+ sections[0].CalculationScenarios.Add(calculationScenarioMock);
+
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual("Niet alle berekeningen voor dit vak zijn uitgevoerd.", dataGridViewCell.ErrorText);
+ Assert.AreEqual("-", formattedValue);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void FailureMechanismResultView_AssessmentLayerTwoANaN_ShowsErrorTooltip()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble?) double.NaN).Repeat.Any();
+
+ mocks.ReplayAll();
+
+ var rowIndex = 0;
+
+ using (var view = ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var sections = (List)view.Data;
+ sections[0].CalculationScenarios.Add(calculationScenarioMock);
+
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual("Niet alle berekeningen voor dit vak hebben een geldige uitkomst.", dataGridViewCell.ErrorText);
+ Assert.AreEqual("-", formattedValue);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void FailureMechanismResultView_NoCalculationScenarios_DoesNotShowErrorTooltip()
+ {
+ // Setup
+ var rowIndex = 0;
+
+ using (ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual(string.Empty, dataGridViewCell.ErrorText);
+ Assert.AreEqual("-", formattedValue);
+ }
+ }
+
+ [Test]
+ public void FailureMechanismResultView_AssessmentLayerTrueAndAssessmentLayerTwoAHasError_DoesNotShowError()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true).Repeat.Any();
+ calculationScenarioMock.Expect(cs => cs.Probability).Return((RoundedDouble?)double.NaN).Repeat.Any();
+
+ mocks.ReplayAll();
+
+ var rowIndex = 0;
+
+ using (var view = ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var sections = (List)view.Data;
+ sections[0].CalculationScenarios.Add(calculationScenarioMock);
+
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ dataGridView.Rows[rowIndex].Cells[assessmentLayerOneIndex].Value = true;
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual(string.Empty, dataGridViewCell.ErrorText);
+ Assert.AreEqual("-", formattedValue);
+ mocks.VerifyAll();
+ }
+ }
+
private const int nameColumnIndex = 0;
private const int assessmentLayerOneIndex = 1;
private const int assessmentLayerTwoAIndex = 2;
Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationScenario.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationScenario.cs (.../PipingCalculationScenario.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculationScenario.cs (.../PipingCalculationScenario.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -49,11 +49,11 @@
public RoundedDouble Contribution { get; set; }
- public RoundedDouble Probability
+ public RoundedDouble? Probability
{
get
{
- return SemiProbabilisticOutput != null ? SemiProbabilisticOutput.PipingProbability : (RoundedDouble) double.NaN;
+ return SemiProbabilisticOutput != null ? SemiProbabilisticOutput.PipingProbability : (RoundedDouble?) null;
}
}
}
Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationScenarioTest.cs
===================================================================
diff -u -r8323c6cbe3f292646a254938161e17c42d13d10c -rf7a9f7239374705ff1d732e9666c0cb62ebaafd0
--- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationScenarioTest.cs (.../PipingCalculationScenarioTest.cs) (revision 8323c6cbe3f292646a254938161e17c42d13d10c)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationScenarioTest.cs (.../PipingCalculationScenarioTest.cs) (revision f7a9f7239374705ff1d732e9666c0cb62ebaafd0)
@@ -42,7 +42,7 @@
Assert.AreSame(semiProbabilisticInputParameters, scenario.SemiProbabilisticParameters);
Assert.IsTrue(scenario.IsRelevant);
Assert.AreEqual(new RoundedDouble(0), scenario.Contribution);
- Assert.IsNaN(scenario.Probability);
+ Assert.IsNull(scenario.Probability);
}
[Test]
@@ -103,7 +103,7 @@
}
[Test]
- public void Probability_PipingOutputNull_ReturnsNaN()
+ public void Probability_PipingOutputNull_ReturnsNull()
{
// Setup
var generalInputParameters = new GeneralPipingInput();
@@ -115,7 +115,24 @@
var propability = scenario.Probability;
// Assert
- Assert.IsNaN(propability);
+ Assert.IsNull(propability);
}
+
+ [Test]
+ public void Probabilty_ScenarioInvalid_ReturnsNaN()
+ {
+ // Setup
+ var generalInputParameters = new GeneralPipingInput();
+ var semiProbabilisticInputParameters = new SemiProbabilisticPipingInput();
+
+ var scenario = new PipingCalculationScenario(generalInputParameters, semiProbabilisticInputParameters);
+ scenario.SemiProbabilisticOutput = new PipingSemiProbabilisticOutput(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, double.NaN, 0, 0);
+
+ // Call
+ var propability = scenario.Probability;
+
+ // Assert
+ Assert.IsNaN(propability.Value);
+ }
}
}
\ No newline at end of file