Index: Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyResultFactory.cs =================================================================== diff -u -r802381e788dc1b766e4ccfa3bbf98be8749a638e -r0160b5685b018bea049ea3dd3e0937a8e9a79696 --- Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyResultFactory.cs (.../FailureMechanismSectionAssemblyResultFactory.cs) (revision 802381e788dc1b766e4ccfa3bbf98be8749a638e) +++ Riskeer/Common/src/Riskeer.Common.Data/AssemblyTool/FailureMechanismSectionAssemblyResultFactory.cs (.../FailureMechanismSectionAssemblyResultFactory.cs) (revision 0160b5685b018bea049ea3dd3e0937a8e9a79696) @@ -107,12 +107,13 @@ /// /// The section result to assemble for. /// The to assemble with. - /// The to calculate the probability with. - /// A . + /// The + /// to assemble with. /// Thrown when any argument is null. /// Thrown when the section could not be successfully assembled. public static FailureMechanismSectionAssemblyResultWrapper AssembleSection( - AdoptableFailureMechanismSectionResult sectionResult, IAssessmentSection assessmentSection, Func calculateProbabilityFunc) + AdoptableFailureMechanismSectionResult sectionResult, IAssessmentSection assessmentSection, + IFailureMechanismSectionResultCalculateProbabilityStrategy calculateProbabilityStrategy) { if (sectionResult == null) { @@ -124,14 +125,14 @@ throw new ArgumentNullException(nameof(assessmentSection)); } - if (calculateProbabilityFunc == null) + if (calculateProbabilityStrategy == null) { - throw new ArgumentNullException(nameof(calculateProbabilityFunc)); + throw new ArgumentNullException(nameof(calculateProbabilityStrategy)); } double initialFailureMechanismResultSectionProbability = sectionResult.InitialFailureMechanismResultType == AdoptableInitialFailureMechanismResultType.Adopt - ? calculateProbabilityFunc() + ? calculateProbabilityStrategy.CalculateSectionProbability() : sectionResult.ManualInitialFailureMechanismResultSectionProbability; bool hasProbabilitySpecified = sectionResult.InitialFailureMechanismResultType != AdoptableInitialFailureMechanismResultType.NoFailureProbability; @@ -142,7 +143,7 @@ return PerformAssembly(input); } - + /// /// Assembles a failure mechanism section result based on the input arguments. /// Index: Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyResultFactoryTest.cs =================================================================== diff -u -r802381e788dc1b766e4ccfa3bbf98be8749a638e -r0160b5685b018bea049ea3dd3e0937a8e9a79696 --- Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyResultFactoryTest.cs (.../FailureMechanismSectionAssemblyResultFactoryTest.cs) (revision 802381e788dc1b766e4ccfa3bbf98be8749a638e) +++ Riskeer/Common/test/Riskeer.Common.Data.Test/AssemblyTool/FailureMechanismSectionAssemblyResultFactoryTest.cs (.../FailureMechanismSectionAssemblyResultFactoryTest.cs) (revision 0160b5685b018bea049ea3dd3e0937a8e9a79696) @@ -382,11 +382,12 @@ { // Setup var mocks = new MockRepository(); + var calculateStrategy = mocks.Stub(); var assessmentSection = mocks.Stub(); mocks.ReplayAll(); // Call - void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(null, assessmentSection, () => double.NaN); + void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(null, assessmentSection, calculateStrategy); // Assert var exception = Assert.Throws(Call); @@ -399,18 +400,22 @@ public void AssembleSectionAdoptableSectionWithoutProfileProbability_AssessmentSectionNull_ThrowsArgumentNullException() { // Setup + var mocks = new MockRepository(); + var calculateStrategy = mocks.Stub(); + mocks.ReplayAll(); + var sectionResult = new AdoptableFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); // Call - void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, null, () => double.NaN); + void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, null, calculateStrategy); // Assert var exception = Assert.Throws(Call); Assert.AreEqual("assessmentSection", exception.ParamName); } [Test] - public void AssembleSectionAdoptableSectionWithoutProfileProbability_CalculateProbabilityFuncNull_ThrowsArgumentNullException() + public void AssembleSectionAdoptableSectionWithoutProfileProbability_CalculateStrategyNull_ThrowsArgumentNullException() { // Setup var mocks = new MockRepository(); @@ -424,7 +429,7 @@ // Assert var exception = Assert.Throws(Call); - Assert.AreEqual("calculateProbabilityFunc", exception.ParamName); + Assert.AreEqual("calculateProbabilityStrategy", exception.ParamName); mocks.VerifyAll(); } @@ -444,6 +449,11 @@ var furtherAnalysisType = random.NextEnumValue(); double refinedSectionProbability = random.NextDouble(); + var mocks = new MockRepository(); + var calculateStrategy = mocks.Stub(); + calculateStrategy.Stub(c => c.CalculateSectionProbability()).Return(calculatedSectionProbability); + mocks.ReplayAll(); + var assessmentSection = new AssessmentSectionStub(); var sectionResult = new AdoptableFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()) @@ -461,7 +471,7 @@ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; // Call - FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, () => calculatedSectionProbability); + FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, calculateStrategy); // Assert FailureMechanismSectionAssemblyInput calculatorInput = calculator.FailureMechanismSectionAssemblyInput; @@ -485,6 +495,10 @@ public void AssembleSectionAdoptableSectionWithoutProfileProbability_CalculatorRan_ReturnsExpectedOutput() { // Setup + var mocks = new MockRepository(); + var calculateStrategy = mocks.Stub(); + mocks.ReplayAll(); + var assessmentSection = new AssessmentSectionStub(); var sectionResult = new AdoptableFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); @@ -494,7 +508,7 @@ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; // Call - FailureMechanismSectionAssemblyResultWrapper result = FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, () => double.NaN); + FailureMechanismSectionAssemblyResultWrapper result = FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, calculateStrategy); // Assert Assert.AreSame(calculator.FailureMechanismSectionAssemblyResultOutput, result); @@ -505,6 +519,10 @@ public void AssembleSectionAdoptableSectionWithoutProfileProbability_CalculatorThrowsException_ThrowsAssemblyException() { // Setup + var mocks = new MockRepository(); + var calculateStrategy = mocks.Stub(); + mocks.ReplayAll(); + var assessmentSection = new AssessmentSectionStub(); var sectionResult = new AdoptableFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); @@ -515,7 +533,7 @@ calculator.ThrowExceptionOnCalculate = true; // Call - void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, () => double.NaN); + void Call() => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sectionResult, assessmentSection, calculateStrategy); // Assert var exception = Assert.Throws(Call);