Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs
===================================================================
diff -u -rc47cc3d2e42f1cb69ccf6e47ee0922f05dfd68dd -rc4d1fab26e8a8a24845606047d51628f6bf4fe5e
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision c47cc3d2e42f1cb69ccf6e47ee0922f05dfd68dd)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision c4d1fab26e8a8a24845606047d51628f6bf4fe5e)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Core.Common.Base;
@@ -95,8 +96,10 @@
{
base.OnLoad(e);
AddDataGridColumns();
- }
+ DataGridViewControl.CellFormatting += OnCellFormatting;
+ }
+
///
/// Creates a display object for which is added to the
/// on the .
@@ -111,6 +114,8 @@
failureMechanismSectionResultObserver.Dispose();
failureMechanismSectionResultsObserver.Dispose();
+ DataGridViewControl.CellFormatting -= OnCellFormatting;
+
if (disposing)
{
components?.Dispose();
@@ -147,5 +152,27 @@
/// Adds the columns to the view.
///
protected abstract void AddDataGridColumns();
+
+ protected virtual IEnumerable> GetFormattingRules()
+ {
+ yield break;
+ }
+
+ private void OnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
+ {
+ TSectionResultRow row = GetDataAtRow(e.RowIndex);
+ IEnumerable> rules = GetFormattingRules();
+
+ foreach (DataGridViewColumnFormattingRule formattingRule in rules.Where(r => r.ColumnIndices.Contains(e.ColumnIndex)))
+ {
+ if (formattingRule.Rules.All(func => func(row)))
+ {
+ formattingRule.RulesMeetAction(e.RowIndex, e.ColumnIndex);
+ break;
+ }
+
+ formattingRule.RulesDoNotMeetAction?.Invoke(e.RowIndex, e.ColumnIndex);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/FailureMechanismSectionResultTestFactoryTest.cs
===================================================================
diff -u -r1a65cb67261da126d57a2c890acfb78b4347eb3d -rc4d1fab26e8a8a24845606047d51628f6bf4fe5e
--- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/FailureMechanismSectionResultTestFactoryTest.cs (.../FailureMechanismSectionResultTestFactoryTest.cs) (revision 1a65cb67261da126d57a2c890acfb78b4347eb3d)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil.Test/FailureMechanismSectionResultTestFactoryTest.cs (.../FailureMechanismSectionResultTestFactoryTest.cs) (revision c4d1fab26e8a8a24845606047d51628f6bf4fe5e)
@@ -29,7 +29,7 @@
public class FailureMechanismSectionResultTestFactoryTest
{
[Test]
- public void CreateFailureMechanismSectionResult_ReturnsExpectedValues()
+ public void CreateFailureMechanismSectionResult_WithoutName_ReturnsExpectedValues()
{
// Call
TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult();
@@ -43,5 +43,24 @@
new Point2D(1, 0)
}, sectionResult.Section.Points);
}
+
+ [Test]
+ public void CreateFailureMechanismSectionResult_WithName_ReturnsExpectedValues()
+ {
+ // Setup
+ const string name = "Vak 1";
+
+ // Call
+ TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult(name);
+
+ // Assert
+ Assert.AreEqual(AssessmentLayerOneState.NotAssessed, sectionResult.AssessmentLayerOne);
+ Assert.AreEqual(name, sectionResult.Section.Name);
+ CollectionAssert.AreEqual(new[]
+ {
+ new Point2D(0, 0),
+ new Point2D(1, 0)
+ }, sectionResult.Section.Points);
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionResultTestFactory.cs
===================================================================
diff -u -r1a65cb67261da126d57a2c890acfb78b4347eb3d -rc4d1fab26e8a8a24845606047d51628f6bf4fe5e
--- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionResultTestFactory.cs (.../FailureMechanismSectionResultTestFactory.cs) (revision 1a65cb67261da126d57a2c890acfb78b4347eb3d)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionResultTestFactory.cs (.../FailureMechanismSectionResultTestFactory.cs) (revision c4d1fab26e8a8a24845606047d51628f6bf4fe5e)
@@ -32,10 +32,11 @@
///
/// Creates a default .
///
+ /// The name of the section.
/// A valid .
- public static TestFailureMechanismSectionResult CreateFailureMechanismSectionResult()
+ public static TestFailureMechanismSectionResult CreateFailureMechanismSectionResult(string name = "test")
{
- return new TestFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ return new TestFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection(name));
}
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionTestFactory.cs
===================================================================
diff -u -rf2c1d92559e378e4dab2a0c40592ef8f0f1801cc -rc4d1fab26e8a8a24845606047d51628f6bf4fe5e
--- Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionTestFactory.cs (.../FailureMechanismSectionTestFactory.cs) (revision f2c1d92559e378e4dab2a0c40592ef8f0f1801cc)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.TestUtil/FailureMechanismSectionTestFactory.cs (.../FailureMechanismSectionTestFactory.cs) (revision c4d1fab26e8a8a24845606047d51628f6bf4fe5e)
@@ -37,8 +37,6 @@
///
/// The name of the section.
/// A valid .
- /// Thrown when
- /// is null.
public static FailureMechanismSection CreateFailureMechanismSection(string name = "test")
{
return CreateFailureMechanismSection(name, new[]
Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs
===================================================================
diff -u -rbc1babf3ccf2bc4e1fed91210f2cc5d2b7dea774 -rc4d1fab26e8a8a24845606047d51628f6bf4fe5e
--- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision bc1babf3ccf2bc4e1fed91210f2cc5d2b7dea774)
+++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision c4d1fab26e8a8a24845606047d51628f6bf4fe5e)
@@ -20,8 +20,10 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using System.Windows.Forms;
using Core.Common.Base;
+using Core.Common.Controls.DataGrid;
using Core.Common.Controls.Views;
using NUnit.Extensions.Forms;
using NUnit.Framework;
@@ -61,10 +63,22 @@
Assert.IsInstanceOf(view);
Assert.IsInstanceOf(view);
Assert.IsNull(view.Data);
+ Assert.AreSame(failureMechanism, view.FailureMechanism);
}
}
[Test]
+ public void Constructor_FailureMechanismSectionResultsNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => new TestFailureMechanismResultView(null, new TestFailureMechanism());
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanismSectionResults", exception.ParamName);
+ }
+
+ [Test]
public void Constructor_FailureMechanismNull_ThrowsArgumentNullException()
{
// Call
@@ -116,7 +130,7 @@
}
[Test]
- public void GivenFailureMechanismResultView_WhenSingleFailureMechanismSectionResultNotifiesObservers_ThenCellFormattingEventFired()
+ public void GivenFailureMechanismResultView_WhenSingleFailureMechanismSectionResultNotifiesObservers_ThenDataGridViewInvalidated()
{
// Given
TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult();
@@ -128,18 +142,126 @@
using (ShowFailureMechanismResultsView(sectionResults))
{
+ var invalidatedCounter = 0;
var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
- var cellFormattingEventFired = false;
- dataGridView.CellFormatting += (sender, args) => cellFormattingEventFired = true;
+ dataGridView.Invalidated += (sender, args) => invalidatedCounter++;
// When
sectionResult.NotifyObservers();
// Then
- Assert.IsTrue(cellFormattingEventFired);
+ Assert.AreEqual(1, invalidatedCounter);
}
}
+ [Test]
+ public void GivenFailureMechanismResultViewWithFormattingRules_WhenCellFormattingEventFired_ThenFormattingRulesEvaluated()
+ {
+ // Given
+ TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult();
+
+ var sectionResults = new ObservableList
+ {
+ sectionResult
+ };
+
+ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults))
+ {
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
+
+ //Precondition
+ Assert.IsFalse(view.Evaluated);
+
+ // When
+ dataGridView.Refresh();
+
+ // Then
+ Assert.IsTrue(view.Evaluated);
+ }
+ }
+
+ [Test]
+ public void GivenFailureMechanismResultViewWithFormatting_WhenRulesMeet_ThenRuleMeetActionPerformed()
+ {
+ // Given
+ TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult();
+
+ var sectionResults = new ObservableList
+ {
+ sectionResult
+ };
+
+ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults))
+ {
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
+
+ //Precondition
+ Assert.IsFalse(view.RulesMeetActionPerformed);
+ Assert.IsFalse(view.RulesDoNotMeetActionPerformed);
+
+ // When
+ dataGridView.Refresh();
+
+ // Then
+ Assert.IsTrue(view.RulesMeetActionPerformed);
+ Assert.IsFalse(view.RulesDoNotMeetActionPerformed);
+ }
+ }
+
+ [Test]
+ public void GivenFailureMechanismResultViewWithFormatting_WhenRulesDoNotMeet_ThenRuleDoNotMeetActionPerformed()
+ {
+ // Given
+ TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult("Other name");
+
+ var sectionResults = new ObservableList
+ {
+ sectionResult
+ };
+
+ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults))
+ {
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
+
+ //Precondition
+ Assert.IsFalse(view.RulesMeetActionPerformed);
+ Assert.IsFalse(view.RulesDoNotMeetActionPerformed);
+
+ // When
+ dataGridView.Refresh();
+
+ // Then
+ Assert.IsFalse(view.RulesMeetActionPerformed);
+ Assert.IsTrue(view.RulesDoNotMeetActionPerformed);
+ }
+ }
+
+ [Test]
+ public void GivenFailureMechanismResultViewWithFormatting_WhenRulesDoNotMeetAndNoActionGiven_ThenNoActionPerformed()
+ {
+ // Given
+ TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult();
+
+ var sectionResults = new ObservableList
+ {
+ sectionResult
+ };
+
+ using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults))
+ {
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
+
+ //Precondition
+ Assert.IsFalse(view.RulesDoNotMeetActionPerformed);
+
+ // When
+ dataGridView.Refresh();
+
+ // Then
+ Assert.IsFalse(view.RulesDoNotMeetActionPerformed);
+ }
+ }
+
private TestFailureMechanismResultView ShowFailureMechanismResultsView(IObservableEnumerable sectionResults)
{
var failureMechanismResultView = new TestFailureMechanismResultView(sectionResults, new TestFailureMechanism());
@@ -167,6 +289,37 @@
{
DataGridViewControl.AddTextBoxColumn("Name", "Test", true);
}
+
+ protected override IEnumerable>> GetFormattingRules()
+ {
+ yield return new DataGridViewColumnFormattingRule>(
+ new [] { 0 },
+ new Func, bool>[]
+ {
+ row =>
+ {
+ Evaluated = true;
+ return row.Name.Equals("test");
+ }
+ },
+ (i, i1) => RulesMeetActionPerformed = true,
+ (i, i1) => RulesDoNotMeetActionPerformed = true);
+
+ yield return new DataGridViewColumnFormattingRule>(
+ new [] { 0 },
+ new Func, bool>[]
+ {
+ row => row.Name.Equals("Vak 1")
+ },
+ (i, i1) => {},
+ null);
+ }
+
+ public bool Evaluated { get; private set; }
+
+ public bool RulesMeetActionPerformed { get; private set; }
+
+ public bool RulesDoNotMeetActionPerformed { get; private set; }
}
public class TestRow : FailureMechanismSectionResultRow