Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismSectionResultRow.cs =================================================================== diff -u -rb9a1d3cdf1e58825664b0c7c2bcfff11aa48c852 -re2f2a69303e75986c7bfa60744ad6766b460aefc --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismSectionResultRow.cs (.../StabilityPointStructuresFailureMechanismSectionResultRow.cs) (revision b9a1d3cdf1e58825664b0c7c2bcfff11aa48c852) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Views/StabilityPointStructuresFailureMechanismSectionResultRow.cs (.../StabilityPointStructuresFailureMechanismSectionResultRow.cs) (revision e2f2a69303e75986c7bfa60744ad6766b460aefc) @@ -206,6 +206,46 @@ public double CombinedAssemblyProbability { get; private set; } /// + /// Gets or sets the indicator whether the combined assembly probability + /// should be overwritten by . + /// + /// Thrown when + /// is a valid value, but unsupported. + public bool UseManualAssemblyProbability + { + get + { + return SectionResult.UseManualAssemblyProbability; + } + set + { + SectionResult.UseManualAssemblyProbability = value; + UpdateInternalData(); + } + } + + /// + /// Gets or sets the manually entered assembly probability. + /// + /// Thrown when is + /// not in the range [0,1]. + /// Thrown when + /// is a valid value, but unsupported. + [TypeConverter(typeof(NoProbabilityValueDoubleConverter))] + public double ManualAssemblyProbability + { + get + { + return SectionResult.ManualAssemblyProbability; + } + set + { + SectionResult.ManualAssemblyProbability = value; + UpdateInternalData(); + } + } + + /// /// Gets the of the wrapped /// . /// Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismSectionResultRowTest.cs =================================================================== diff -u -rb9a1d3cdf1e58825664b0c7c2bcfff11aa48c852 -re2f2a69303e75986c7bfa60744ad6766b460aefc --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismSectionResultRowTest.cs (.../StabilityPointStructuresFailureMechanismSectionResultRowTest.cs) (revision b9a1d3cdf1e58825664b0c7c2bcfff11aa48c852) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresFailureMechanismSectionResultRowTest.cs (.../StabilityPointStructuresFailureMechanismSectionResultRowTest.cs) (revision e2f2a69303e75986c7bfa60744ad6766b460aefc) @@ -106,6 +106,8 @@ Assert.AreEqual(result.GetDetailedAssessmentProbability(failureMechanism, assessmentSection), row.DetailedAssessmentProbability); Assert.AreEqual(result.TailorMadeAssessmentResult, row.TailorMadeAssessmentResult); Assert.AreEqual(row.TailorMadeAssessmentProbability, result.TailorMadeAssessmentProbability); + Assert.AreEqual(result.UseManualAssemblyProbability, row.UseManualAssemblyProbability); + Assert.AreEqual(result.ManualAssemblyProbability, row.ManualAssemblyProbability); TestHelper.AssertTypeConverter( nameof(StabilityPointStructuresFailureMechanismSectionResultRow.DetailedAssessmentProbability)); @@ -133,7 +135,7 @@ using (new AssemblyToolCalculatorFactoryConfig()) { - var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; calculator.SimpleAssessmentAssemblyOutput = new FailureMechanismSectionAssembly( random.NextDouble(), @@ -181,7 +183,7 @@ using (new AssemblyToolCalculatorFactoryConfig()) { - var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; calculator.SimpleAssessmentAssemblyOutput = new FailureMechanismSectionAssembly( random.NextDouble(), @@ -224,6 +226,166 @@ } } + [Test] + public void UseManualAssemblyProbability_SetNewValue_NotifyObserversAndPropertyChanged() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new StabilityPointStructuresFailureMechanismSectionResult(section); + result.Attach(observer); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var row = new StabilityPointStructuresFailureMechanismSectionResultRow( + result, failureMechanism, assessmentSection); + bool originalValue = result.UseManualAssemblyProbability; + bool newValue = !originalValue; + + // Call + row.UseManualAssemblyProbability = newValue; + + // Assert + Assert.AreEqual(newValue, result.UseManualAssemblyProbability); + mocks.VerifyAll(); + } + } + + [Test] + [TestCase(0)] + [TestCase(1)] + [TestCase(0.5)] + [TestCase(1e-6)] + [TestCase(double.NaN)] + public void ManualAssemblyProbability_ValidValue_NotifyObserversAndPropertyChanged(double value) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new StabilityPointStructuresFailureMechanismSectionResult(section); + result.Attach(observer); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var row = new StabilityPointStructuresFailureMechanismSectionResultRow( + result, failureMechanism, assessmentSection); + + // Call + row.ManualAssemblyProbability = value; + + // Assert + Assert.AreEqual(value, row.ManualAssemblyProbability); + mocks.VerifyAll(); + } + } + + [Test] + [SetCulture("nl-NL")] + [TestCase(-20)] + [TestCase(-1e-6)] + [TestCase(1 + 1e-6)] + [TestCase(12)] + public void ManualAssemblyProbability_InvalidValue_ThrowsArgumentOutOfRangeException(double value) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new StabilityPointStructuresFailureMechanismSectionResult(section); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var row = new StabilityPointStructuresFailureMechanismSectionResultRow( + result, failureMechanism, assessmentSection); + + // Call + TestDelegate test = () => row.ManualAssemblyProbability = value; + + // Assert + const string expectedMessage = "De waarde voor de faalkans moet in het bereik [0,0, 1,0] liggen."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); + mocks.VerifyAll(); + } + } + + [Test] + public void GetSectionResultCalculation_NoCalculationSetOnSectionResult_ReturnNull() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new StabilityPointStructuresFailureMechanismSectionResult(section); + + // Precondition + Assert.IsNull(result.Calculation); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var row = new StabilityPointStructuresFailureMechanismSectionResultRow(result, failureMechanism, assessmentSection); + + // Call + StructuresCalculation calculation = row.GetSectionResultCalculation(); + + // Assert + Assert.IsNull(calculation); + mocks.VerifyAll(); + } + } + + [Test] + public void GetSectionResultCalculation_WithCalculationSetOnSectionResult_ReturnCalculation() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + mocks.ReplayAll(); + + var expectedCalculation = new StructuresCalculation(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var result = new StabilityPointStructuresFailureMechanismSectionResult(section) + { + Calculation = expectedCalculation + }; + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var row = new StabilityPointStructuresFailureMechanismSectionResultRow(result, failureMechanism, assessmentSection); + + // Call + StructuresCalculation calculation = row.GetSectionResultCalculation(); + + // Assert + Assert.AreSame(expectedCalculation, calculation); + mocks.VerifyAll(); + } + } + #region Registration [Test] @@ -495,65 +657,5 @@ } #endregion - - [Test] - public void GetSectionResultCalculation_NoCalculationSetOnSectionResult_ReturnNull() - { - // Setup - var failureMechanism = new StabilityPointStructuresFailureMechanism(); - - var mocks = new MockRepository(); - IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); - mocks.ReplayAll(); - - FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - var result = new StabilityPointStructuresFailureMechanismSectionResult(section); - - // Precondition - Assert.IsNull(result.Calculation); - - using (new AssemblyToolCalculatorFactoryConfig()) - { - var row = new StabilityPointStructuresFailureMechanismSectionResultRow(result, failureMechanism, assessmentSection); - - // Call - StructuresCalculation calculation = row.GetSectionResultCalculation(); - - // Assert - Assert.IsNull(calculation); - mocks.VerifyAll(); - } - } - - [Test] - public void GetSectionResultCalculation_WithCalculationSetOnSectionResult_ReturnCalculation() - { - // Setup - var failureMechanism = new StabilityPointStructuresFailureMechanism(); - - var mocks = new MockRepository(); - IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks); - mocks.ReplayAll(); - - var expectedCalculation = new StructuresCalculation(); - - FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - var result = new StabilityPointStructuresFailureMechanismSectionResult(section) - { - Calculation = expectedCalculation - }; - - using (new AssemblyToolCalculatorFactoryConfig()) - { - var row = new StabilityPointStructuresFailureMechanismSectionResultRow(result, failureMechanism, assessmentSection); - - // Call - StructuresCalculation calculation = row.GetSectionResultCalculation(); - - // Assert - Assert.AreSame(expectedCalculation, calculation); - mocks.VerifyAll(); - } - } } } \ No newline at end of file