Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs
===================================================================
diff -u -rec2c838182ed237b3abd753347a861857129331b -r47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53
--- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs) (revision ec2c838182ed237b3abd753347a861857129331b)
+++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs) (revision 47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53)
@@ -20,12 +20,14 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Linq;
using Riskeer.AssemblyTool.Data;
using Riskeer.Common.Data.AssemblyTool;
using Riskeer.Common.Data.AssessmentSection;
using Riskeer.Common.Data.Exceptions;
using Riskeer.Common.Data.FailureMechanism;
+using Riskeer.Common.Data.FailurePath;
namespace Riskeer.GrassCoverErosionInwards.Data
{
@@ -71,5 +73,39 @@
new GrassCoverErosionInwardsFailureMechanismSectionResultCalculateProbabilityStrategy(sectionResult, calculationScenarios),
failureMechanism.GeneralInput.ApplyLengthEffectInSection, 1.0);
}
+
+ ///
+ /// Assembles the failure mechanism based on its input arguments.
+ ///
+ /// The to assemble.
+ /// The the
+ /// belongs to.
+ /// A representing the assembly result.
+ /// Thrown when any argument is null.
+ /// Thrown when the failure mechanism could not be assembled.
+ public static double AssembleFailureMechanism(GrassCoverErosionInwardsFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ Func performAssemblyFunc = () =>
+ {
+ IEnumerable sectionAssemblyResults =
+ failureMechanism.SectionResults.Select(sr => AssembleSection(sr, failureMechanism, assessmentSection))
+ .ToArray();
+
+ return FailureMechanismAssemblyResultFactory.AssembleFailureMechanism(failureMechanism.GeneralInput.N,
+ sectionAssemblyResults);
+ };
+ return FailurePathAssemblyHelper.AssembleFailurePath(failureMechanism, performAssemblyFunc);
+ }
}
}
\ No newline at end of file
Index: Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs
===================================================================
diff -u -r562b41f8cf13ba3d6a29919c6841c3ad8c1c8df1 -r47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53
--- Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 562b41f8cf13ba3d6a29919c6841c3ad8c1c8df1)
+++ Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53)
@@ -33,6 +33,7 @@
using Riskeer.Common.Data.Contribution;
using Riskeer.Common.Data.Exceptions;
using Riskeer.Common.Data.FailureMechanism;
+using Riskeer.Common.Data.FailurePath;
using Riskeer.Common.Data.TestUtil;
using Riskeer.Common.Primitives;
@@ -41,6 +42,8 @@
[TestFixture]
public class GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest
{
+ #region AssembleSection
+
[Test]
public void AssembleSection_SectionResultNull_ThrowsArgumentNullException()
{
@@ -197,5 +200,136 @@
Assert.AreEqual(innerException.Message, exception.Message);
}
}
+
+ #endregion
+
+ [Test]
+ public void AssembleFailureMechanism_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ void Call() => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(null, assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+
+ // Call
+ void Call() => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_WithInput_SetsInputOnCalculator()
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+ failureMechanism.SetSections(new[]
+ {
+ FailureMechanismSectionTestFactory.CreateFailureMechanismSection()
+ }, "APath");
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ FailureMechanismAssemblyCalculatorStub failureMechanismAssemblyCalculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ double expectedN = failureMechanism.GeneralInput.N;
+ Assert.AreEqual(expectedN, failureMechanismAssemblyCalculator.FailureMechanismN);
+ Assert.AreSame(calculator.FailureMechanismSectionAssemblyResultOutput, failureMechanismAssemblyCalculator.SectionAssemblyResultsInput.Single());
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_CalculatorRan_ReturnsExpectedOutput()
+ {
+ // Setup
+ var random = new Random(21);
+ double assemblyOutput = random.NextDouble();
+
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+ calculator.AssemblyResult = assemblyOutput;
+
+ // Call
+ double result = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ Assert.AreEqual(assemblyOutput, result);
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_CalculatorThrowsException_ThrowsAssemblyException()
+ {
+ // Setup
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+ calculator.ThrowExceptionOnCalculate = true;
+
+ // Call
+ void Call() => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Exception innerException = exception.InnerException;
+ Assert.IsInstanceOf(innerException);
+ Assert.AreEqual(innerException.Message, exception.Message);
+ }
+ }
}
}
\ No newline at end of file
Index: Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Data/MacroStabilityInwardsFailureMechanismAssemblyFactory.cs
===================================================================
diff -u -r450fdfb2f034723cf74dc02d58cc1d9248f414a4 -r47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53
--- Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Data/MacroStabilityInwardsFailureMechanismAssemblyFactory.cs (.../MacroStabilityInwardsFailureMechanismAssemblyFactory.cs) (revision 450fdfb2f034723cf74dc02d58cc1d9248f414a4)
+++ Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Data/MacroStabilityInwardsFailureMechanismAssemblyFactory.cs (.../MacroStabilityInwardsFailureMechanismAssemblyFactory.cs) (revision 47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53)
@@ -20,12 +20,14 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Linq;
using Riskeer.AssemblyTool.Data;
using Riskeer.Common.Data.AssemblyTool;
using Riskeer.Common.Data.AssessmentSection;
using Riskeer.Common.Data.Exceptions;
using Riskeer.Common.Data.FailureMechanism;
+using Riskeer.Common.Data.FailurePath;
using Riskeer.Common.Data.Probability;
namespace Riskeer.MacroStabilityInwards.Data
@@ -73,5 +75,39 @@
failureMechanism.GeneralInput.ApplyLengthEffectInSection,
failureMechanism.MacroStabilityInwardsProbabilityAssessmentInput.GetN(sectionResult.Section.Length));
}
+
+ ///
+ /// Assembles the failure mechanism based on its input arguments.
+ ///
+ /// The to assemble.
+ /// The the
+ /// belongs to.
+ /// A representing the assembly result.
+ /// Thrown when any argument is null.
+ /// Thrown when the failure mechanism could not be assembled.
+ public static double AssembleFailureMechanism(MacroStabilityInwardsFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection)
+ {
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ Func performAssemblyFunc = () =>
+ {
+ IEnumerable sectionAssemblyResults =
+ failureMechanism.SectionResults.Select(sr => AssembleSection(sr, failureMechanism, assessmentSection))
+ .ToArray();
+
+ return FailureMechanismAssemblyResultFactory.AssembleFailureMechanism(failureMechanism.MacroStabilityInwardsProbabilityAssessmentInput.GetN(assessmentSection.ReferenceLine.Length),
+ sectionAssemblyResults);
+ };
+ return FailurePathAssemblyHelper.AssembleFailurePath(failureMechanism, performAssemblyFunc);
+ }
}
}
\ No newline at end of file
Index: Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Data.Test/MacroStabilityInwardsFailureMechanismAssemblyFactoryTest.cs
===================================================================
diff -u -r450fdfb2f034723cf74dc02d58cc1d9248f414a4 -r47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53
--- Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Data.Test/MacroStabilityInwardsFailureMechanismAssemblyFactoryTest.cs (.../MacroStabilityInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 450fdfb2f034723cf74dc02d58cc1d9248f414a4)
+++ Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Data.Test/MacroStabilityInwardsFailureMechanismAssemblyFactoryTest.cs (.../MacroStabilityInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 47ce3d9e30dba726a2621ec5cdf8cd4e18d79d53)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Linq;
using Core.Common.TestUtil;
using NUnit.Framework;
using Rhino.Mocks;
@@ -32,6 +33,8 @@
using Riskeer.Common.Data.Contribution;
using Riskeer.Common.Data.Exceptions;
using Riskeer.Common.Data.FailureMechanism;
+using Riskeer.Common.Data.FailurePath;
+using Riskeer.Common.Data.Probability;
using Riskeer.Common.Data.TestUtil;
using Riskeer.Common.Primitives;
@@ -40,6 +43,8 @@
[TestFixture]
public class MacroStabilityInwardsFailureMechanismAssemblyFactoryTest
{
+ #region AssembleSection
+
[Test]
public void AssembleSection_SectionResultNull_ThrowsArgumentNullException()
{
@@ -196,5 +201,140 @@
Assert.AreEqual(innerException.Message, exception.Message);
}
}
+
+ #endregion
+
+ #region AssembleFailureMechanism
+
+ [Test]
+ public void AssembleFailureMechanism_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ void Call() => MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(null, assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var failureMechanism = new MacroStabilityInwardsFailureMechanism();
+
+ // Call
+ void Call() => MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_WithInput_SetsInputOnCalculator()
+ {
+ // Setup
+ var failureMechanism = new MacroStabilityInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+ failureMechanism.SetSections(new[]
+ {
+ FailureMechanismSectionTestFactory.CreateFailureMechanismSection()
+ }, "APath");
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ FailureMechanismAssemblyCalculatorStub failureMechanismAssemblyCalculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ double expectedN = failureMechanism.MacroStabilityInwardsProbabilityAssessmentInput.GetN(assessmentSection.ReferenceLine.Length);
+ Assert.AreEqual(expectedN, failureMechanismAssemblyCalculator.FailureMechanismN);
+ Assert.AreSame(calculator.FailureMechanismSectionAssemblyResultOutput, failureMechanismAssemblyCalculator.SectionAssemblyResultsInput.Single());
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_CalculatorRan_ReturnsExpectedOutput()
+ {
+ // Setup
+ var random = new Random(21);
+ double assemblyOutput = random.NextDouble();
+
+ var failureMechanism = new MacroStabilityInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+ calculator.AssemblyResult = assemblyOutput;
+
+ // Call
+ double result = MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ Assert.AreEqual(assemblyOutput, result);
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_CalculatorThrowsException_ThrowsAssemblyException()
+ {
+ // Setup
+ var failureMechanism = new MacroStabilityInwardsFailureMechanism
+ {
+ AssemblyResult =
+ {
+ ProbabilityResultType = FailurePathAssemblyProbabilityResultType.Automatic
+ }
+ };
+
+ var assessmentSection = new AssessmentSectionStub();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+ calculator.ThrowExceptionOnCalculate = true;
+
+ // Call
+ void Call() => MacroStabilityInwardsFailureMechanismAssemblyFactory.AssembleFailureMechanism(failureMechanism, assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Exception innerException = exception.InnerException;
+ Assert.IsInstanceOf(innerException);
+ Assert.AreEqual(innerException.Message, exception.Message);
+ }
+ }
+
+ #endregion
}
}
\ No newline at end of file