Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultView.cs =================================================================== diff -u --- Riskeer/Common/src/Riskeer.Common.Forms/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultView.cs (revision 0) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultView.cs (revision 0c6a932aa3713504af4572083693c89f15742cc8) @@ -0,0 +1,188 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Common.Base; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Forms.Builders; +using Riskeer.Common.Forms.Providers; + +namespace Riskeer.Common.Forms.Views +{ + /// + /// The view for the . + /// + /// The type of failure mechanism. + public class NonAdoptableWithProfileProbabilityFailureMechanismResultView : FailureMechanismResultView + where TFailureMechanism : IHasSectionResults + { + private const int initialFailureMechanismResultTypeIndex = 2; + private const int initialFailureMechanismResultProfileProbabilityIndex = 3; + private const int initialFailureMechanismResultSectionProbabilityIndex = 4; + private const int furtherAnalysisNeededIndex = 5; + private const int refinedProfileProbabilityIndex = 6; + private const int refinedSectionProbabilityIndex = 7; + private const int profileProbabilityIndex = 8; + private const int sectionProbabilityIndex = 9; + private const int sectionNIndex = 10; + private const int assemblyGroupIndex = 11; + + private readonly IAssessmentSection assessmentSection; + private readonly Func getNFunc; + private readonly Func getUseLengthEffectFunc; + + /// + /// Creates a new instance of . + /// + /// The collection of to + /// show in the view. + /// The failure mechanism the results belong to. + /// The assessment section the failure mechanism results belong to. + /// The to get the N. + /// The to get whether to use the length effect. + /// Thrown when any parameter is null. + public NonAdoptableWithProfileProbabilityFailureMechanismResultView(IObservableEnumerable failureMechanismSectionResults, + TFailureMechanism failureMechanism, + IAssessmentSection assessmentSection, + Func getNFunc, + Func getUseLengthEffectFunc) + : base(failureMechanismSectionResults, failureMechanism) + { + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + if (getNFunc == null) + { + throw new ArgumentNullException(nameof(getNFunc)); + } + + if (getUseLengthEffectFunc == null) + { + throw new ArgumentNullException(nameof(getUseLengthEffectFunc)); + } + + this.assessmentSection = assessmentSection; + this.getNFunc = getNFunc; + this.getUseLengthEffectFunc = getUseLengthEffectFunc; + } + + protected override void UpdateInternalViewData() + { + UpdateVisibility(); + base.UpdateInternalViewData(); + } + + protected override NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow CreateFailureMechanismSectionResultRow(NonAdoptableWithProfileProbabilityFailureMechanismSectionResult sectionResult) + { + return new NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow( + sectionResult, + CreateLengthEffectProvider(), + assessmentSection, + new NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.ConstructionProperties + { + InitialFailureMechanismResultTypeIndex = initialFailureMechanismResultTypeIndex, + InitialFailureMechanismResultProfileProbabilityIndex = initialFailureMechanismResultProfileProbabilityIndex, + InitialFailureMechanismResultSectionProbabilityIndex = initialFailureMechanismResultSectionProbabilityIndex, + FurtherAnalysisNeededIndex = furtherAnalysisNeededIndex, + RefinedProfileProbabilityIndex = refinedProfileProbabilityIndex, + RefinedSectionProbabilityIndex = refinedSectionProbabilityIndex, + ProfileProbabilityIndex = profileProbabilityIndex, + SectionProbabilityIndex = sectionProbabilityIndex, + SectionNIndex = sectionNIndex, + AssemblyGroupIndex = assemblyGroupIndex + }); + } + + protected override double GetN() + { + return getNFunc(FailureMechanism); + } + + protected override void AddDataGridColumns() + { + FailureMechanismSectionResultViewColumnBuilder.AddSectionNameColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.Name)); + + FailureMechanismSectionResultViewColumnBuilder.AddIsRelevantColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.IsRelevant)); + + FailureMechanismSectionResultViewColumnBuilder.AddInitialFailureMechanismResultTypeColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.InitialFailureMechanismResultType)); + + FailureMechanismSectionResultViewColumnBuilder.AddInitialFailureMechanismResultProfileProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.InitialFailureMechanismResultProfileProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddInitialFailureMechanismResultSectionProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.InitialFailureMechanismResultSectionProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddFurtherAnalysisNeededColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.FurtherAnalysisNeeded)); + + FailureMechanismSectionResultViewColumnBuilder.AddRefinedProfileProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.RefinedProfileProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddRefinedSectionProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.RefinedSectionProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddAssemblyProfileProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.ProfileProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddAssemblySectionProbabilityColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.SectionProbability)); + + FailureMechanismSectionResultViewColumnBuilder.AddAssemblySectionNColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.SectionN)); + + FailureMechanismSectionResultViewColumnBuilder.AddAssemblyGroupColumn( + DataGridViewControl, + nameof(NonAdoptableWithProfileProbabilityFailureMechanismSectionResultRow.AssemblyGroup)); + } + + private ILengthEffectProvider CreateLengthEffectProvider() + { + return new LengthEffectProvider(() => getUseLengthEffectFunc(FailureMechanism), () => 1.0); + } + + private void UpdateVisibility() + { + bool useLengthEffect = getUseLengthEffectFunc(FailureMechanism); + + DataGridViewControl.GetColumnFromIndex(initialFailureMechanismResultProfileProbabilityIndex).Visible = useLengthEffect; + DataGridViewControl.GetColumnFromIndex(refinedProfileProbabilityIndex).Visible = useLengthEffect; + DataGridViewControl.GetColumnFromIndex(profileProbabilityIndex).Visible = useLengthEffect; + DataGridViewControl.GetColumnFromIndex(sectionNIndex).Visible = useLengthEffect; + } + } +} \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultViewTest.cs =================================================================== diff -u --- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultViewTest.cs (revision 0) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/NonAdoptableWithProfileProbabilityFailureMechanismResultViewTest.cs (revision 0c6a932aa3713504af4572083693c89f15742cc8) @@ -0,0 +1,367 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using Core.Common.Base; +using NUnit.Extensions.Forms; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.AssemblyTool.KernelWrapper.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators.Assembly; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.Calculation; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.TestUtil; +using Riskeer.Common.Forms.Views; + +namespace Riskeer.Common.Forms.Test.Views +{ + [TestFixture] + public class NonAdoptableWithProfileProbabilityFailureMechanismResultViewTest + { + private const int nameColumnIndex = 0; + private const int isRelevantIndex = 1; + private const int initialFailureMechanismResultTypeIndex = 2; + private const int initialFailureMechanismResultProfileProbabilityIndex = 3; + private const int initialFailureMechanismResultSectionProbabilityIndex = 4; + private const int furtherAnalysisNeededIndex = 5; + private const int refinedProfileProbabilityIndex = 6; + private const int refinedSectionProbabilityIndex = 7; + private const int profileProbabilityIndex = 8; + private const int sectionProbabilityIndex = 9; + private const int sectionNIndex = 10; + private const int assemblyGroupIndex = 11; + private const int columnCount = 12; + private Form testForm; + + [SetUp] + public void Setup() + { + testForm = new Form(); + } + + [TearDown] + public void TearDown() + { + testForm.Dispose(); + } + + [Test] + public void Constructor_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Setup + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + + // Call + void Call() => new NonAdoptableWithProfileProbabilityFailureMechanismResultView( + failureMechanism.SectionResults, failureMechanism, null, fm => double.NaN, fm => false); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void Constructor_GetNFuncNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + + // Call + void Call() => new NonAdoptableWithProfileProbabilityFailureMechanismResultView( + failureMechanism.SectionResults, failureMechanism, assessmentSection, null, fm => false); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("getNFunc", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + public void Constructor_GetUseLengthEffectFuncNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + + // Call + void Call() => new NonAdoptableWithProfileProbabilityFailureMechanismResultView( + failureMechanism.SectionResults, failureMechanism, assessmentSection, fm => double.NaN, null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("getUseLengthEffectFunc", exception.ParamName); + mocks.VerifyAll(); + } + + [Test] + public void Constructor_ExpectedValues() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + + // Call + using (var view = new NonAdoptableWithProfileProbabilityFailureMechanismResultView( + failureMechanism.SectionResults, failureMechanism, assessmentSection, fm => double.NaN, fm => false)) + { + // Assert + Assert.IsInstanceOf>(view); + Assert.IsNull(view.Data); + Assert.AreSame(failureMechanism, view.FailureMechanism); + } + + mocks.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenFormWithNonAdoptableWithProfileProbabilityFailureMechanismResultView_ThenExpectedColumnsAreVisible(bool useLengthEffect) + { + // Given + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism + { + UseLengthEffect = useLengthEffect + }; + + using (new AssemblyToolCalculatorFactoryConfig()) + using (ShowFailureMechanismResultsView(failureMechanism)) + { + // Then + DataGridView dataGridView = GetDataGridView(); + + Assert.AreEqual(columnCount, dataGridView.ColumnCount); + + Assert.IsInstanceOf(dataGridView.Columns[nameColumnIndex]); + Assert.IsInstanceOf(dataGridView.Columns[isRelevantIndex]); + Assert.IsInstanceOf(dataGridView.Columns[initialFailureMechanismResultTypeIndex]); + Assert.IsInstanceOf(dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[initialFailureMechanismResultSectionProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[furtherAnalysisNeededIndex]); + Assert.IsInstanceOf(dataGridView.Columns[refinedProfileProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[refinedSectionProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[profileProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[sectionProbabilityIndex]); + Assert.IsInstanceOf(dataGridView.Columns[sectionNIndex]); + Assert.IsInstanceOf(dataGridView.Columns[assemblyGroupIndex]); + + Assert.AreEqual("Vaknaam", dataGridView.Columns[nameColumnIndex].HeaderText); + Assert.AreEqual("Is relevant", dataGridView.Columns[isRelevantIndex].HeaderText); + Assert.AreEqual("Resultaat initieel mechanisme", dataGridView.Columns[initialFailureMechanismResultTypeIndex].HeaderText); + Assert.AreEqual("Faalkans initieel\r\nmechanisme per doorsnede\r\n[1/jaar]", dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex].HeaderText); + Assert.AreEqual("Faalkans initieel\r\nmechanisme per vak\r\n[1/jaar]", dataGridView.Columns[initialFailureMechanismResultSectionProbabilityIndex].HeaderText); + Assert.AreEqual("Is vervolganalyse nodig", dataGridView.Columns[furtherAnalysisNeededIndex].HeaderText); + Assert.AreEqual("Aangescherpte\r\nfaalkans per doorsnede\r\n[1/jaar]", dataGridView.Columns[refinedProfileProbabilityIndex].HeaderText); + Assert.AreEqual("Aangescherpte\r\nfaalkans per vak\r\n[1/jaar]", dataGridView.Columns[refinedSectionProbabilityIndex].HeaderText); + Assert.AreEqual("Rekenwaarde\r\nfaalkans per doorsnede\r\n[1/jaar]", dataGridView.Columns[profileProbabilityIndex].HeaderText); + Assert.AreEqual("Rekenwaarde\r\nfaalkans per vak\r\n[1/jaar]", dataGridView.Columns[sectionProbabilityIndex].HeaderText); + Assert.AreEqual("Rekenwaarde Nvak\r\n[-]", dataGridView.Columns[sectionNIndex].HeaderText); + Assert.AreEqual("Duidingsklasse", dataGridView.Columns[assemblyGroupIndex].HeaderText); + + Assert.IsTrue(dataGridView.Columns[nameColumnIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[isRelevantIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[initialFailureMechanismResultTypeIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[initialFailureMechanismResultSectionProbabilityIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[furtherAnalysisNeededIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[refinedProfileProbabilityIndex].ReadOnly); + Assert.IsFalse(dataGridView.Columns[refinedSectionProbabilityIndex].ReadOnly); + Assert.IsTrue(dataGridView.Columns[profileProbabilityIndex].ReadOnly); + Assert.IsTrue(dataGridView.Columns[sectionProbabilityIndex].ReadOnly); + Assert.IsTrue(dataGridView.Columns[sectionNIndex].ReadOnly); + Assert.IsTrue(dataGridView.Columns[assemblyGroupIndex].ReadOnly); + + Assert.AreEqual(useLengthEffect, dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[refinedProfileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[profileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[sectionNIndex].Visible); + } + } + + [Test] + public void FailureMechanismResultsView_AllDataSet_DataGridViewCorrectlyInitialized() + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection("Section 1"); + + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + section + }); + + // Call + using (new AssemblyToolCalculatorFactoryConfig()) + using (ShowFailureMechanismResultsView(failureMechanism)) + { + DataGridView dataGridView = GetDataGridView(); + + // Assert + DataGridViewRowCollection rows = dataGridView.Rows; + Assert.AreEqual(1, rows.Count); + + DataGridViewCellCollection cells = rows[0].Cells; + Assert.AreEqual(columnCount, cells.Count); + Assert.AreEqual("Section 1", cells[nameColumnIndex].FormattedValue); + Assert.AreEqual(true, cells[isRelevantIndex].Value); + Assert.AreEqual(NonAdoptableInitialFailureMechanismResultType.Manual, cells[initialFailureMechanismResultTypeIndex].Value); + Assert.AreEqual("-", cells[initialFailureMechanismResultProfileProbabilityIndex].FormattedValue); + Assert.AreEqual("-", cells[initialFailureMechanismResultSectionProbabilityIndex].FormattedValue); + Assert.AreEqual(false, cells[furtherAnalysisNeededIndex].FormattedValue); + Assert.AreEqual("-", cells[refinedProfileProbabilityIndex].FormattedValue); + Assert.AreEqual("-", cells[refinedSectionProbabilityIndex].FormattedValue); + Assert.AreEqual("1/100", cells[profileProbabilityIndex].FormattedValue); + Assert.AreEqual("1/10", cells[sectionProbabilityIndex].FormattedValue); + Assert.AreEqual("10", cells[sectionNIndex].FormattedValue); + Assert.AreEqual("+I", cells[assemblyGroupIndex].FormattedValue); + } + } + + [Test] + public void FailureMechanismResultsView_AllDataSet_SetsCorrectInputOnCalculator() + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism(); + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + section + }); + + var assessmentSection = new AssessmentSectionStub(); + + // Call + using (new AssemblyToolCalculatorFactoryConfig()) + using (ShowFailureMechanismResultsView(failureMechanism, assessmentSection)) + { + // Assert + var testFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailurePathAssemblyCalculatorStub calculator = testFactory.LastCreatedFailurePathAssemblyCalculator; + + Assert.AreEqual(1.0, calculator.FailurePathN); + } + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenNonAdoptableWithProfileProbabilityFailureMechanismResultView_WhenApplyLengthEffectChangedAndFailureMechanismObserversNotified_ThenDataGridViewUpdated( + bool useLengthEffect) + { + var failureMechanism = new TestNonAdoptableWithProfileProbabilityFailureMechanism + { + UseLengthEffect = !useLengthEffect + }; + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection("Section 1"); + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + section + }); + + using (new AssemblyToolCalculatorFactoryConfig()) + using (ShowFailureMechanismResultsView(failureMechanism)) + { + var rowsChanged = false; + DataGridView dataGridView = GetDataGridView(); + dataGridView.Rows.CollectionChanged += (sender, args) => rowsChanged = true; + + // Precondition + Assert.IsFalse(rowsChanged); + Assert.AreEqual(!useLengthEffect, dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex].Visible); + Assert.AreEqual(!useLengthEffect, dataGridView.Columns[refinedProfileProbabilityIndex].Visible); + Assert.AreEqual(!useLengthEffect, dataGridView.Columns[profileProbabilityIndex].Visible); + Assert.AreEqual(!useLengthEffect, dataGridView.Columns[sectionNIndex].Visible); + + // When + failureMechanism.UseLengthEffect = useLengthEffect; + failureMechanism.NotifyObservers(); + + // Then + Assert.IsTrue(rowsChanged); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[initialFailureMechanismResultProfileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[refinedProfileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[profileProbabilityIndex].Visible); + Assert.AreEqual(useLengthEffect, dataGridView.Columns[sectionNIndex].Visible); + } + } + + private static DataGridView GetDataGridView() + { + return (DataGridView) new ControlTester("dataGridView").TheObject; + } + + private NonAdoptableWithProfileProbabilityFailureMechanismResultView ShowFailureMechanismResultsView(TestNonAdoptableWithProfileProbabilityFailureMechanism failureMechanism) + { + return ShowFailureMechanismResultsView(failureMechanism, new AssessmentSectionStub()); + } + + private NonAdoptableWithProfileProbabilityFailureMechanismResultView ShowFailureMechanismResultsView(TestNonAdoptableWithProfileProbabilityFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + { + var failureMechanismResultView = new NonAdoptableWithProfileProbabilityFailureMechanismResultView( + failureMechanism.SectionResults, failureMechanism, assessmentSection, fm => 1.0, fm => fm.UseLengthEffect); + testForm.Controls.Add(failureMechanismResultView); + testForm.Show(); + + return failureMechanismResultView; + } + + private class TestNonAdoptableWithProfileProbabilityFailureMechanism : FailureMechanismBase, IHasSectionResults + { + private readonly ObservableList sectionResults; + + public TestNonAdoptableWithProfileProbabilityFailureMechanism() : base("Test", "T", 1) + { + sectionResults = new ObservableList(); + } + + public bool UseLengthEffect { get; set; } + + public override IEnumerable Calculations { get; } + public IObservableEnumerable SectionResultsOld { get; } + public IObservableEnumerable SectionResults => sectionResults; + + protected override void AddSectionDependentData(FailureMechanismSection section) + { + base.AddSectionDependentData(section); + sectionResults.Add(new NonAdoptableWithProfileProbabilityFailureMechanismSectionResult(section)); + } + } + } +} \ No newline at end of file