Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs =================================================================== diff -u -rf55e0223259971724d94b87cfbb9e7eb09206b29 -rf49c793792a168edb24106ee3d6cf6e6a2331e63 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision f55e0223259971724d94b87cfbb9e7eb09206b29) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision f49c793792a168edb24106ee3d6cf6e6a2331e63) @@ -27,7 +27,9 @@ using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; using Core.Common.Util.Extensions; +using Ringtoets.AssemblyTool.Data; using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Forms.Controls; using Ringtoets.Common.Forms.Properties; using CoreCommonGuiResources = Core.Common.Gui.Properties.Resources; @@ -46,10 +48,11 @@ where TFailureMechanism : IFailureMechanism { private readonly IObservableEnumerable failureMechanismSectionResults; - private readonly Observer failureMechanismObserver; private readonly Observer failureMechanismSectionResultObserver; private readonly RecursiveObserver, TSectionResult> failureMechanismSectionResultsObserver; + protected FailureMechanismAssemblyResultControl FailureMechanismAssemblyResultControl; + protected Func GetFailureMechanismAssemblyFunc; private IEnumerable sectionResultRows; private bool rowUpdating; @@ -112,7 +115,7 @@ DataGridViewControl.CellFormatting += HandleCellStyling; UpdateDataGridViewDataSource(); - UpdateFailureMechanismAssemblyResult(); + UpdateFailureMechanismAssemblyResultControl(); } /// @@ -170,9 +173,23 @@ protected abstract void AddDataGridColumns(); /// - /// Updates the failure mechanism assembly result + /// Updates the failure mechanism assembly result control. /// - protected virtual void UpdateFailureMechanismAssemblyResult() {} + protected void UpdateFailureMechanismAssemblyResultControl() + { + if (FailureMechanismAssemblyResultControl != null && GetFailureMechanismAssemblyFunc != null) + { + try + { + FailureMechanismAssemblyResultControl.SetAssemblyResult(GetFailureMechanismAssemblyFunc()); + FailureMechanismAssemblyResultControl.ClearError(); + } + catch (Exception e) + { + FailureMechanismAssemblyResultControl.SetError(e.Message); + } + } + } private void InitializeInfoIcon() { @@ -198,7 +215,7 @@ { rowUpdating = true; DataGridViewControl.RefreshDataGridView(); - UpdateFailureMechanismAssemblyResult(); + UpdateFailureMechanismAssemblyResultControl(); } private void HandleCellStyling(object sender, DataGridViewCellFormattingEventArgs e) @@ -216,7 +233,7 @@ sectionResultRows.ForEachElementDo(row => row.Update()); DataGridViewControl.RefreshDataGridView(); - UpdateFailureMechanismAssemblyResult(); + UpdateFailureMechanismAssemblyResultControl(); } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj =================================================================== diff -u -r9c341ce32f55de21dcc7ab33717e1750c437fb0e -rf49c793792a168edb24106ee3d6cf6e6a2331e63 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision 9c341ce32f55de21dcc7ab33717e1750c437fb0e) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Ringtoets.Common.Forms.Test.csproj (.../Ringtoets.Common.Forms.Test.csproj) (revision f49c793792a168edb24106ee3d6cf6e6a2331e63) @@ -247,6 +247,14 @@ {22C5DDB8-2491-4BC6-BDC6-2A7B7EBF40C1} Ringtoets.AssemblyTool.Forms + + {358B6DA2-A1DF-477F-B6AC-C30204265CB0} + Ringtoets.AssemblyTool.KernelWrapper + + + {0AB432BB-E2CC-42EA-A72C-7AFEF7536B38} + Ringtoets.AssemblyTool.KernelWrapper.TestUtil + {888D4097-8BC2-4703-9FB1-8744C94D525E} Ringtoets.HydraRing.Calculation Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs =================================================================== diff -u -rf55e0223259971724d94b87cfbb9e7eb09206b29 -rf49c793792a168edb24106ee3d6cf6e6a2331e63 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision f55e0223259971724d94b87cfbb9e7eb09206b29) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision f49c793792a168edb24106ee3d6cf6e6a2331e63) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.DataGrid; @@ -29,8 +30,11 @@ using Core.Common.Util.Reflection; using NUnit.Extensions.Forms; using NUnit.Framework; +using Ringtoets.AssemblyTool.Data; +using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Common.Forms.Controls; using Ringtoets.Common.Forms.Views; using CoreCommonGuiResources = Core.Common.Gui.Properties.Resources; @@ -81,7 +85,6 @@ Assert.AreEqual(2, tableLayoutPanel.ColumnCount); Assert.AreEqual(1, tableLayoutPanel.RowCount); Assert.IsInstanceOf(tableLayoutPanel.GetControlFromPosition(1, 0)); - Assert.IsNull(tableLayoutPanel.GetControlFromPosition(0, 0)); Assert.IsInstanceOf(view); Assert.IsInstanceOf(view); @@ -124,7 +127,7 @@ using (ShowFailureMechanismResultsView(new ObservableList())) { // Assert - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); Assert.AreEqual(1, dataGridView.ColumnCount); Assert.IsInstanceOf(dataGridView.Columns[nameColumnIndex]); @@ -179,7 +182,7 @@ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) { var invalidated = false; - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); dataGridView.Invalidated += (sender, args) => invalidated = true; view.AssemblyResultUpdated = false; @@ -202,7 +205,7 @@ var sectionResults = new ObservableList(); using (ShowFailureMechanismResultsView(sectionResults)) { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); // Precondition Assert.AreEqual(0, dataGridView.RowCount); @@ -230,7 +233,7 @@ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) { var invalidated = false; - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); dataGridView.Invalidated += (sender, args) => invalidated = true; view.AssemblyResultUpdated = false; @@ -262,7 +265,7 @@ using (ShowFailureMechanismResultsView(sectionResults)) { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); var row = (TestRow) dataGridView.Rows[0].DataBoundItem; DataGridViewColumnStateDefinition definition = row.ColumnStateDefinitions[0]; definition.ReadOnly = readOnly; @@ -294,7 +297,7 @@ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); var row = (TestRow) dataGridView.Rows[0].DataBoundItem; var invalidated = false; dataGridView.Invalidated += (sender, args) => invalidated = true; @@ -317,6 +320,71 @@ } [Test] + public void GivenFailureMechanismResultsView_WhenExceptionThrownDuringUpdate_FailureMechanismAssemblyResultClearedAndErrorSet() + { + // Given + TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult(); + + var sectionResults = new ObservableList + { + sectionResult + }; + + using (new AssemblyToolCalculatorFactoryConfig()) + using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) + { + // Precondition + BoxedLabel assemblyGroupLabel = GetGroupLabel(); + FailureMechanismAssemblyResultControl resultControl = GetFailureMechanismAssemblyResultControl(); + ErrorProvider errorProvider = GetErrorProvider(resultControl); + Assert.AreEqual(Color.FromArgb(255, 255, 0), assemblyGroupLabel.BackColor); + Assert.IsEmpty(errorProvider.GetError(resultControl)); + + // When + view.ThrowExceptionOnCalculate = true; + sectionResult.NotifyObservers(); + + // Assert + Assert.AreEqual(Color.White, assemblyGroupLabel.BackColor); + Assert.AreEqual("Message", errorProvider.GetError(resultControl)); + } + } + + [Test] + public void GivenFailureMechanismResultsViewWithFailureMechanismAssemblyError_WhenNoExceptionThrownDuringUpdate_ResultSetAndErrorCleared() + { + // Given + TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult(); + + var sectionResults = new ObservableList + { + sectionResult + }; + + using (new AssemblyToolCalculatorFactoryConfig()) + using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) + { + view.ThrowExceptionOnCalculate = true; + sectionResult.NotifyObservers(); + + // Precondition + BoxedLabel assemblyGroupLabel = GetGroupLabel(); + FailureMechanismAssemblyResultControl resultControl = GetFailureMechanismAssemblyResultControl(); + ErrorProvider errorProvider = GetErrorProvider(resultControl); + Assert.AreEqual(Color.White, assemblyGroupLabel.BackColor); + Assert.AreEqual("Message", errorProvider.GetError(resultControl)); + + // When + view.ThrowExceptionOnCalculate = false; + sectionResult.NotifyObservers(); + + // Assert + Assert.AreEqual(Color.FromArgb(255, 255, 0), assemblyGroupLabel.BackColor); + Assert.IsEmpty(errorProvider.GetError(resultControl)); + } + } + + [Test] public void GivenFailureMechanismResultView_WhenSectionResultNotified_ThenAllRowsUpdatedAndViewInvalidated() { // Given @@ -331,7 +399,7 @@ using (ShowFailureMechanismResultsView(sectionResults)) { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); var row1 = (TestRow) dataGridView.Rows[0].DataBoundItem; var row2 = (TestRow) dataGridView.Rows[1].DataBoundItem; var invalidated = false; @@ -365,7 +433,7 @@ using (ShowFailureMechanismResultsView(sectionResults)) { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + DataGridView dataGridView = GetDataGridView(); var row = (TestRow) dataGridView.Rows[0].DataBoundItem; // Precondition @@ -382,6 +450,21 @@ } } + private static DataGridView GetDataGridView() + { + return (DataGridView) new ControlTester("dataGridView").TheObject; + } + + private static ErrorProvider GetErrorProvider(FailureMechanismAssemblyResultControl resultControl) + { + return TypeUtils.GetField(resultControl, "ErrorProvider"); + } + + private static FailureMechanismAssemblyResultControl GetFailureMechanismAssemblyResultControl() + { + return (FailureMechanismAssemblyResultControl) new ControlTester("FailureMechanismAssemblyResultControl").TheObject; + } + private TestFailureMechanismResultView ShowFailureMechanismResultsView(IObservableEnumerable sectionResults) { var failureMechanismResultView = new TestFailureMechanismResultView(sectionResults, new TestFailureMechanism()); @@ -391,11 +474,32 @@ return failureMechanismResultView; } + private static BoxedLabel GetGroupLabel() + { + return (BoxedLabel) new ControlTester("GroupLabel").TheObject; + } + private class TestFailureMechanismResultView : FailureMechanismResultView, TestFailureMechanism> { public TestFailureMechanismResultView(IObservableEnumerable failureMechanismSectionResults, TestFailureMechanism failureMechanism) - : base(failureMechanismSectionResults, failureMechanism) {} + : base(failureMechanismSectionResults, failureMechanism) + { + FailureMechanismAssemblyResultControl = new FailureMechanismAssemblyResultControl(); + TableLayoutPanel.Controls.Add(FailureMechanismAssemblyResultControl, 0, 0); + GetFailureMechanismAssemblyFunc = () => + { + if (ThrowExceptionOnCalculate) + { + throw new Exception("Message"); + } + AssemblyResultUpdated = true; + return new FailureMechanismAssembly(1.0, FailureMechanismAssemblyCategoryGroup.IIIt); + }; + } + + public bool ThrowExceptionOnCalculate { get; set; } + public bool AssemblyResultUpdated { get; set; } protected override FailureMechanismSectionResultRow CreateFailureMechanismSectionResultRow(FailureMechanismSectionResult sectionResult) @@ -407,11 +511,6 @@ { DataGridViewControl.AddTextBoxColumn("Name", "Test", true); } - - protected override void UpdateFailureMechanismAssemblyResult() - { - AssemblyResultUpdated = true; - } } private class TestRow : FailureMechanismSectionResultRow Index: Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/FailureMechanismResultWithProbabilityTester.cs =================================================================== diff -u -r967ba9221cb505caf8d8f5afd3a0e0aee9664e30 -rf49c793792a168edb24106ee3d6cf6e6a2331e63 --- Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/FailureMechanismResultWithProbabilityTester.cs (.../FailureMechanismResultWithProbabilityTester.cs) (revision 967ba9221cb505caf8d8f5afd3a0e0aee9664e30) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.TestUtil/FailureMechanismResultWithProbabilityTester.cs (.../FailureMechanismResultWithProbabilityTester.cs) (revision f49c793792a168edb24106ee3d6cf6e6a2331e63) @@ -88,35 +88,6 @@ } [Test] - public void GivenFailureMechanismResultsView_WhenCalculatorThrowsException_FailureMechanismAssemblyResultCleared() - { - // Given - var failureMechanism = new TFailureMechanism(); - - using (new AssemblyToolCalculatorFactoryConfig()) - using (ShowFailureMechanismResultsView(failureMechanism)) - { - // Precondition - BoxedLabel assemblyGroupLabel = GetGroupLabel(); - BoxedLabel assemblyProbabilityLabel = GetProbabilityLabelControl(); - Assert.AreEqual("1/1", assemblyProbabilityLabel.Text); - Assert.AreEqual("IIIt", assemblyGroupLabel.Text); - Assert.AreEqual(Color.FromArgb(255, 255, 0), assemblyGroupLabel.BackColor); - - // When - var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; - FailureMechanismAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismAssemblyCalculator; - calculator.ThrowExceptionOnCalculate = true; - failureMechanism.NotifyObservers(); - - // Assert - Assert.AreEqual("-", assemblyProbabilityLabel.Text); - Assert.IsEmpty(assemblyGroupLabel.Text); - Assert.AreEqual(Color.White, assemblyGroupLabel.BackColor); - } - } - - [Test] public void GivenFailureMechanismResultsView_WhenResultChangedAndSectionResultNotified_FailureMechanismAssemblyResultUpdated() { // Given Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismResultView.cs =================================================================== diff -u -r04e229c9f85227b234cdd652895832486c302f30 -rf49c793792a168edb24106ee3d6cf6e6a2331e63 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision 04e229c9f85227b234cdd652895832486c302f30) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision f49c793792a168edb24106ee3d6cf6e6a2331e63) @@ -21,7 +21,6 @@ using System; using System.Linq; -using System.Windows.Forms; using Core.Common.Base; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; @@ -53,7 +52,6 @@ private readonly RecursiveObserver calculationInputObserver; private readonly RecursiveObserver calculationGroupObserver; private readonly IAssessmentSection assessmentSection; - private readonly FailureMechanismAssemblyResultWithProbabilityControl resultControl; /// /// @@ -72,11 +70,9 @@ this.assessmentSection = assessmentSection; - resultControl = new FailureMechanismAssemblyResultWithProbabilityControl - { - Dock = DockStyle.Left - }; - TableLayoutPanel.Controls.Add(resultControl, 0, 0); + FailureMechanismAssemblyResultControl = new FailureMechanismAssemblyResultWithProbabilityControl(); + GetFailureMechanismAssemblyFunc = () => PipingFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(FailureMechanism, assessmentSection); + TableLayoutPanel.Controls.Add(FailureMechanismAssemblyResultControl, 0, 0); // The concat is needed to observe the input of calculations in child groups. calculationInputObserver = new RecursiveObserver( @@ -93,19 +89,6 @@ calculationGroupObserver.Observable = observableGroup; } - protected override void UpdateFailureMechanismAssemblyResult() - { - try - { - resultControl.SetAssemblyResult(PipingFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(FailureMechanism, assessmentSection)); - resultControl.ClearError(); - } - catch (Exception e) - { - resultControl.SetError(e.Message); - } - } - protected override void Dispose(bool disposing) { calculationInputObserver.Dispose(); @@ -195,7 +178,7 @@ private void UpdateView() { UpdateDataGridViewDataSource(); - UpdateFailureMechanismAssemblyResult(); + UpdateFailureMechanismAssemblyResultControl(); } } } \ No newline at end of file