Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs
===================================================================
diff -u -r8c60e937f4b8009fea80f3702879e100fe03b63f -r4ee9bf9a46317d760d9d8fdf95b9024571fc04fe
--- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision 8c60e937f4b8009fea80f3702879e100fe03b63f)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/FailureMechanismContributionView.cs (.../FailureMechanismContributionView.cs) (revision 4ee9bf9a46317d760d9d8fdf95b9024571fc04fe)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Drawing;
using System.Linq;
using System.Windows.Forms;
@@ -51,6 +52,10 @@
private bool revertingComboBoxSelectedValue;
private IAssessmentSection assessmentSection;
+ private readonly Observer isFailureMechanismRelevantObserver;
+
+ private DataGridViewCheckBoxColumn isRelevantColumn;
+
///
/// Creates a new instance of .
///
@@ -62,6 +67,9 @@
BindNormChange();
BindNormInputLeave();
SubscribeEvents();
+
+ isFailureMechanismRelevantObserver = new Observer(SetRowStyling);
+ Load += OnLoad;
}
///
@@ -108,9 +116,18 @@
components.Dispose();
}
UnsubscribeEvents();
+ DetachFromFailureMechanisms();
base.Dispose(disposing);
}
+ private void OnLoad(object sender, EventArgs e)
+ {
+ if (probabilityDistributionGrid.DataSource != null)
+ {
+ SetRowStyling();
+ }
+ }
+
private void InitializeAssessmentSectionCompositionComboBox()
{
assessmentSectionCompositionComboBox.DataSource = new[]
@@ -163,18 +180,43 @@
private void HandleNewAssessmentSectionSet(IAssessmentSection value)
{
UnbindAssessmentSectionCompositionChange();
+ DetachFromFailureMechanisms();
assessmentSection = value;
+ AttachToFailureMechanisms();
SetAssessmentSectionComposition();
BindAssessmentSectionCompositionChange();
}
+ private void DetachFromFailureMechanisms()
+ {
+ if (assessmentSection != null)
+ {
+ foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms())
+ {
+ failureMechanism.Detach(isFailureMechanismRelevantObserver);
+ }
+ }
+ }
+
+ private void AttachToFailureMechanisms()
+ {
+ if (assessmentSection != null)
+ {
+ foreach (IFailureMechanism failureMechanism in assessmentSection.GetFailureMechanisms())
+ {
+ failureMechanism.Attach(isFailureMechanismRelevantObserver);
+ }
+ }
+ }
+
private void SetGridDataSource()
{
if (data != null)
{
probabilityDistributionGrid.DataSource = data.Distribution.Select(ci => new FailureMechanismContributionItemRow(ci)).ToArray();
+ SetRowStyling();
probabilityDistributionGrid.Invalidate();
}
}
@@ -262,7 +304,7 @@
var columnNameFormat = "column_{0}";
var isRelevantName = TypeUtils.GetMemberName(fmci => fmci.IsRelevant);
- var isRelevantColumn = new DataGridViewCheckBoxColumn
+ isRelevantColumn = new DataGridViewCheckBoxColumn
{
DataPropertyName = isRelevantName,
HeaderText = CommonGuiResources.FailureMechanismContributionView_GridColumn_RelevancyFilter,
@@ -363,6 +405,40 @@
}
}
+ private void SetRowStyling()
+ {
+ foreach (DataGridViewRow row in probabilityDistributionGrid.Rows)
+ {
+ var isFailureMechanismRelevant = (bool)row.Cells[isRelevantColumn.Index].Value;
+
+ SetRowStyle(isFailureMechanismRelevant, row);
+ }
+ }
+
+ private void SetRowStyle(bool checkboxSelected, DataGridViewRow row)
+ {
+ for (int i = 0; i < row.Cells.Count; i++)
+ {
+ if (i != isRelevantColumn.Index)
+ {
+ if (checkboxSelected)
+ {
+ SetCellStyle(row.Cells[i], Color.FromKnownColor(KnownColor.White), Color.FromKnownColor(KnownColor.ControlText));
+ }
+ else
+ {
+ SetCellStyle(row.Cells[i], Color.FromKnownColor(KnownColor.DarkGray), Color.FromKnownColor(KnownColor.GrayText));
+ }
+ }
+ }
+ }
+
+ private void SetCellStyle(DataGridViewCell cell, Color backgroundColor, Color textColor)
+ {
+ cell.Style.BackColor = backgroundColor;
+ cell.Style.ForeColor = textColor;
+ }
+
private class FailureMechanismContributionItemRow
{
private readonly FailureMechanismContributionItem item;
Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs
===================================================================
diff -u -r8c60e937f4b8009fea80f3702879e100fe03b63f -r4ee9bf9a46317d760d9d8fdf95b9024571fc04fe
--- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 8c60e937f4b8009fea80f3702879e100fe03b63f)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 4ee9bf9a46317d760d9d8fdf95b9024571fc04fe)
@@ -21,6 +21,7 @@
using System;
using System.Collections.Generic;
+using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Core.Common.Base;
@@ -68,6 +69,10 @@
var mockRepository = new MockRepository();
var failureMechanism = mockRepository.Stub();
var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
mockRepository.ReplayAll();
var contribution = new FailureMechanismContribution(new[]
@@ -101,6 +106,10 @@
var mockRepository = new MockRepository();
var failureMechanism = mockRepository.Stub();
var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
var observerMock = mockRepository.StrictMock();
observerMock.Expect(o => o.UpdateObserver());
@@ -146,7 +155,16 @@
var someMechanism = mockRepository.Stub();
var assessmentSection1 = mockRepository.Stub();
+ assessmentSection1.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection1.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
+
var assessmentSection2 = mockRepository.Stub();
+ assessmentSection2.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection2.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
mockRepository.ReplayAll();
@@ -194,6 +212,10 @@
var someMechanism = mockRepository.Stub();
var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
mockRepository.ReplayAll();
@@ -231,18 +253,22 @@
public void GivenFailureMechanismContributionView_WhenSettingData_ProperlyInitializeRelevancyColumn(bool isFailureMechanismRelevant)
{
// Given
+ var mockRepository = new MockRepository();
+ var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
+
+ var failureMechanismStub = mockRepository.Stub();
+ failureMechanismStub.Stub(fm => fm.Name).Return("A");
+ failureMechanismStub.Contribution = 100;
+ failureMechanismStub.IsRelevant = isFailureMechanismRelevant;
+ mockRepository.ReplayAll();
+
using (var view = new FailureMechanismContributionView())
{
// When
- var mockRepository = new MockRepository();
- var assessmentSection = mockRepository.Stub();
-
- var failureMechanismStub = mockRepository.Stub();
- failureMechanismStub.Stub(fm => fm.Name).Return("A");
- failureMechanismStub.Contribution = 100;
- failureMechanismStub.IsRelevant = isFailureMechanismRelevant;
- mockRepository.ReplayAll();
-
var contributionData = new FailureMechanismContribution(new[]
{
failureMechanismStub
@@ -259,23 +285,28 @@
var isRelevantGridCell = (DataGridViewCheckBoxCell) row.Cells[isRelevantColumnIndex];
Assert.AreEqual(isFailureMechanismRelevant, isRelevantGridCell.Value);
}
+ mockRepository.VerifyAll();
}
[Test]
public void GivenFailureMechanismContributionView_WhenSettingDataWithZeroContributionFailureMechanism_ProbabilitySpaceShowsAsNotApplicable()
{
// Given
+ var mockRepository = new MockRepository();
+ var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
+
+ var failureMechanismStub = mockRepository.Stub();
+ failureMechanismStub.Stub(fm => fm.Name).Return("A");
+ failureMechanismStub.Contribution = 0;
+ mockRepository.ReplayAll();
+
using (var view = new FailureMechanismContributionView())
{
// When
- var mockRepository = new MockRepository();
- var assessmentSection = mockRepository.Stub();
-
- var failureMechanismStub = mockRepository.Stub();
- failureMechanismStub.Stub(fm => fm.Name).Return("A");
- failureMechanismStub.Contribution = 0;
- mockRepository.ReplayAll();
-
var contributionData = new FailureMechanismContribution(new[]
{
failureMechanismStub
@@ -291,29 +322,32 @@
DataGridViewRow zeroContributionFailureMechanismRow = dataGridView.Rows[0];
DataGridViewCell probabilitySpaceCell = zeroContributionFailureMechanismRow.Cells[probabilitySpaceColumnIndex];
Assert.AreEqual("n.v.t", probabilitySpaceCell.FormattedValue);
-
- mockRepository.VerifyAll();
}
+ mockRepository.VerifyAll();
}
[Test]
public void GivenFailureMechanismContributionView_WhenSettingDataWithNormalContributionFailureMechanism_ProbabilitySpaceShowsAsLocalisedText()
{
// Given
- using (var view = new FailureMechanismContributionView())
- {
- // When
- const double contribution = 25.0;
- const int norm = 500;
+ const double contribution = 25.0;
+ const int norm = 500;
- var mockRepository = new MockRepository();
- var assessmentSection = mockRepository.Stub();
+ var mockRepository = new MockRepository();
+ var assessmentSection = mockRepository.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+ assessmentSection.Stub(section => section.Composition)
+ .Return(AssessmentSectionComposition.Dike);
- var failureMechanismStub = mockRepository.Stub();
- failureMechanismStub.Stub(fm => fm.Name).Return("A");
- failureMechanismStub.Contribution = contribution;
- mockRepository.ReplayAll();
+ var failureMechanismStub = mockRepository.Stub();
+ failureMechanismStub.Stub(fm => fm.Name).Return("A");
+ failureMechanismStub.Contribution = contribution;
+ mockRepository.ReplayAll();
+ using (var view = new FailureMechanismContributionView())
+ {
+ // When
var contributionData = new FailureMechanismContribution(new[]
{
failureMechanismStub
@@ -333,9 +367,8 @@
string expectedTextValue = new FailureMechanismContributionItem(failureMechanismStub, norm)
.ProbabilitySpace.ToString(probabilitySpaceCell.InheritedStyle.Format, probabilitySpaceCell.InheritedStyle.FormatProvider);
Assert.AreEqual(expectedTextValue, probabilitySpaceCell.FormattedValue);
-
- mockRepository.VerifyAll();
}
+ mockRepository.VerifyAll();
}
[Test]
@@ -511,53 +544,60 @@
public void CompositionComboBox_ChangeCompositionAndOk_ClearOutputAndNotify(AssessmentSectionComposition initialComposition, AssessmentSectionComposition newComposition)
{
// Setup
- using (var view = new FailureMechanismContributionView())
- {
- var firstMockRepository = new MockRepository();
+ var firstMockRepository = new MockRepository();
- var calculationItem1 = firstMockRepository.Stub();
- calculationItem1.Expect(ci => ci.ClearOutput());
- calculationItem1.Expect(ci => ci.NotifyObservers());
+ var calculationItem1 = firstMockRepository.Stub();
+ calculationItem1.Expect(ci => ci.ClearOutput());
+ calculationItem1.Expect(ci => ci.NotifyObservers());
- // Expect no clear output as failure mechanism doesn't have different Contribution:
- var calculationItem2 = firstMockRepository.StrictMock();
+ // Expect no clear output as failure mechanism doesn't have different Contribution:
+ var calculationItem2 = firstMockRepository.StrictMock();
- double contributionBeforeChange = 1.1, contributionAfterChange = 2.2;
+ double contributionBeforeChange = 1.1, contributionAfterChange = 2.2;
- var failureMechanism1 = firstMockRepository.Stub();
- failureMechanism1.Stub(fm => fm.Calculations).Return(new[]
+ var failureMechanism1 = firstMockRepository.Stub();
+ failureMechanism1.Stub(fm => fm.Calculations).Return(new[]
{
calculationItem1
});
- failureMechanism1.Contribution = contributionBeforeChange;
- failureMechanism1.Stub(fm => fm.Name).Return("A");
- var failureMechanism2 = firstMockRepository.Stub();
- failureMechanism2.Stub(fm => fm.Calculations).Return(new[]
+ failureMechanism1.Contribution = contributionBeforeChange;
+ failureMechanism1.Stub(fm => fm.Name).Return("A");
+ failureMechanism1.Stub(fm => fm.Attach(null)).IgnoreArguments();
+ failureMechanism1.Stub(fm => fm.Detach(null)).IgnoreArguments();
+
+ var failureMechanism2 = firstMockRepository.Stub();
+ failureMechanism2.Stub(fm => fm.Calculations).Return(new[]
{
calculationItem2
});
- failureMechanism2.Stub(fm => fm.Name).Return("B");
+ failureMechanism2.Stub(fm => fm.Name).Return("B");
+ failureMechanism2.Stub(fm => fm.Attach(null)).IgnoreArguments();
+ failureMechanism2.Stub(fm => fm.Detach(null)).IgnoreArguments();
- firstMockRepository.ReplayAll();
+ firstMockRepository.ReplayAll();
- var failureMechanisms = new[]
+ var failureMechanisms = new[]
{
failureMechanism1,
failureMechanism2
};
- var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, 100.0, 30000);
+ var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, 100.0, 30000);
- var secondMockRepository = new MockRepository();
- var assessmentSection = secondMockRepository.Stub();
- assessmentSection.Stub(section => section.FailureMechanismContribution).Return(failureMechanismContribution);
- assessmentSection.Stub(section => section.Composition).Return(initialComposition);
- assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms);
- assessmentSection.Stub(section => section.NotifyObservers());
- assessmentSection.Expect(section => section.ChangeComposition(newComposition))
- .WhenCalled(invocation => failureMechanism1.Contribution = contributionAfterChange);
- secondMockRepository.ReplayAll();
+ var secondMockRepository = new MockRepository();
+ var assessmentSection = secondMockRepository.Stub();
+ assessmentSection.Stub(section => section.FailureMechanismContribution).Return(failureMechanismContribution);
+ assessmentSection.Stub(section => section.Composition).Return(initialComposition);
+ assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms);
+ assessmentSection.Stub(section => section.NotifyObservers());
+ assessmentSection.Expect(section => section.ChangeComposition(newComposition))
+ .WhenCalled(invocation => failureMechanism1.Contribution = contributionAfterChange);
+ secondMockRepository.ReplayAll();
+ using (var view = new FailureMechanismContributionView())
+ {
+
+
view.Data = failureMechanismContribution;
view.AssessmentSection = assessmentSection;
ShowFormWithView(view);
@@ -585,10 +625,10 @@
Assert.IsTrue(dataGridViewInvalidated,
"Expect the data grid view to be marked for redrawing.");
-
- firstMockRepository.VerifyAll(); // Expect ICalculation.ClearOutput and ICalculation.NotifyObservers
- secondMockRepository.VerifyAll();
}
+
+ firstMockRepository.VerifyAll(); // Expect ICalculation.ClearOutput and ICalculation.NotifyObservers
+ secondMockRepository.VerifyAll();
}
[Test]
@@ -601,40 +641,42 @@
public void CompositionComboBox_ChangeCompositionAndCancel_KeepOriginalCompositionAndCalculationResults(AssessmentSectionComposition initialComposition, AssessmentSectionComposition newComposition)
{
// Setup
- using (var view = new FailureMechanismContributionView())
- {
- var firstMockRepository = new MockRepository();
+ var firstMockRepository = new MockRepository();
- var calculationItem1 = firstMockRepository.Stub();
- calculationItem1.Expect(ci => ci.ClearOutput()).Repeat.Never();
- var calculationItem2 = firstMockRepository.Stub();
- calculationItem2.Expect(ci => ci.ClearOutput()).Repeat.Never();
+ var calculationItem1 = firstMockRepository.Stub();
+ calculationItem1.Expect(ci => ci.ClearOutput()).Repeat.Never();
+ var calculationItem2 = firstMockRepository.Stub();
+ calculationItem2.Expect(ci => ci.ClearOutput()).Repeat.Never();
- var failureMechanism = firstMockRepository.Stub();
- failureMechanism.Stub(fm => fm.Calculations).Return(new[]
+ var failureMechanism = firstMockRepository.Stub();
+ failureMechanism.Stub(fm => fm.Calculations).Return(new[]
{
calculationItem1,
calculationItem2
});
- failureMechanism.Stub(fm => fm.Name).Return("A");
+ failureMechanism.Stub(fm => fm.Name).Return("A");
+ failureMechanism.Stub(fm => fm.Attach(null)).IgnoreArguments();
+ failureMechanism.Stub(fm => fm.Detach(null)).IgnoreArguments();
- firstMockRepository.ReplayAll();
+ firstMockRepository.ReplayAll();
- var failureMechanisms = new[]
+ var failureMechanisms = new[]
{
failureMechanism
};
- var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, 100.0, 30000);
+ var failureMechanismContribution = new FailureMechanismContribution(failureMechanisms, 100.0, 30000);
- var secondMockRepository = new MockRepository();
- var assessmentSection = secondMockRepository.Stub();
- assessmentSection.Stub(section => section.FailureMechanismContribution).Return(failureMechanismContribution);
- assessmentSection.Stub(section => section.Composition).Return(initialComposition);
- assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms);
- assessmentSection.Expect(section => section.ChangeComposition(newComposition)).Repeat.Never();
- secondMockRepository.ReplayAll();
+ var secondMockRepository = new MockRepository();
+ var assessmentSection = secondMockRepository.Stub();
+ assessmentSection.Stub(section => section.FailureMechanismContribution).Return(failureMechanismContribution);
+ assessmentSection.Stub(section => section.Composition).Return(initialComposition);
+ assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms);
+ assessmentSection.Expect(section => section.ChangeComposition(newComposition)).Repeat.Never();
+ secondMockRepository.ReplayAll();
+ using (var view = new FailureMechanismContributionView())
+ {
view.Data = failureMechanismContribution;
view.AssessmentSection = assessmentSection;
ShowFormWithView(view);
@@ -660,11 +702,185 @@
// Assert
Assert.AreEqual(0, dataGridInvalidatedCallCount);
Assert.AreEqual(initialComposition, compositionComboBox.SelectedValue);
+ }
- secondMockRepository.VerifyAll();
+ firstMockRepository.VerifyAll();
+ secondMockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void GivenView_WhenSettingRelevantFailureMechanism_RowIsStylesAsEnabled()
+ {
+ // Given
+ using (var view = new FailureMechanismContributionView())
+ {
+ ShowFormWithView(view);
+
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.IsRelevant = true;
+ mocks.ReplayAll();
+
+ var failureMechanisms = new[]
+ {
+ failureMechanism
+ };
+
+ var contribution = new FailureMechanismContribution(failureMechanisms, 50.0, 30000);
+
+ // When
+ view.Data = contribution;
+
+ // Then
+ var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject;
+ DataGridViewRow row = dataGridView.Rows[0];
+
+ for (int i = 0; i < row.Cells.Count; i++)
+ {
+ if (i == isRelevantColumnIndex)
+ {
+ continue;
+ }
+
+ DataGridViewCell cell = row.Cells[i];
+ AssertIsCellStyledAsEnabled(cell);
+ }
+ mocks.VerifyAll();
}
}
+ [Test]
+ public void GivenView_WhenSettingFailureMechanismThatIsIrrelevant_RowIsStylesAsGreyedOut()
+ {
+ // Given
+ using (var view = new FailureMechanismContributionView())
+ {
+ ShowFormWithView(view);
+
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.IsRelevant = false;
+ mocks.ReplayAll();
+
+ var failureMechanisms = new[]
+ {
+ failureMechanism
+ };
+
+ var contribution = new FailureMechanismContribution(failureMechanisms, 50.0, 30000);
+
+ // When
+ view.Data = contribution;
+
+ // Then
+ var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject;
+ DataGridViewRow row = dataGridView.Rows[0];
+
+ for (int i = 0; i < row.Cells.Count; i++)
+ {
+ if (i == isRelevantColumnIndex)
+ {
+ continue;
+ }
+
+ DataGridViewCell cell = row.Cells[i];
+ AssertIsCellStyleGreyedOut(cell);
+ }
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void GivenView_IsRelevantPropertyChangeNotified_RowStylesUpdates(bool initialIsRelevant)
+ {
+ // Given
+ IObserver failureMechanismObserver = null;
+ var mocks = new MockRepository();
+ var failureMechanism = mocks.Stub();
+ failureMechanism.Stub(fm => fm.Name).Return("A");
+ failureMechanism.IsRelevant = initialIsRelevant;
+ failureMechanism.Stub(fm => fm.Attach(null))
+ .IgnoreArguments()
+ .WhenCalled(invocation =>
+ {
+ failureMechanismObserver = (IObserver)invocation.Arguments[0];
+ });
+ failureMechanism.Stub(fm => fm.NotifyObservers())
+ .WhenCalled(invocation =>
+ {
+ failureMechanismObserver.UpdateObserver();
+ });
+ failureMechanism.Stub(fm => fm.Detach(null))
+ .IgnoreArguments()
+ .WhenCalled(invocation =>
+ {
+ failureMechanismObserver = null;
+ });
+
+ var failureMechanisms = new[]
+ {
+ failureMechanism
+ };
+
+ var assessmentSection = mocks.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms);
+ assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike);
+ mocks.ReplayAll();
+
+ using (var view = new FailureMechanismContributionView())
+ {
+ ShowFormWithView(view);
+
+ var contribution = new FailureMechanismContribution(failureMechanisms, 50.0, 30000);
+
+ view.Data = contribution;
+ view.AssessmentSection = assessmentSection;
+
+ var dataGridView = (DataGridView)new ControlTester(dataGridViewControlName).TheObject;
+ DataGridViewRow row = dataGridView.Rows[0];
+
+ for (int i = 0; i < row.Cells.Count; i++)
+ {
+ if (i != isRelevantColumnIndex)
+ {
+ DataGridViewCell cell = row.Cells[i];
+ if (failureMechanism.IsRelevant)
+ {
+ AssertIsCellStyledAsEnabled(cell);
+ }
+ else
+ {
+ AssertIsCellStyleGreyedOut(cell);
+ }
+ }
+ }
+
+ // When
+ failureMechanism.IsRelevant = !initialIsRelevant;
+ failureMechanism.NotifyObservers();
+
+ // Then
+ for (int i = 0; i < row.Cells.Count; i++)
+ {
+ if (i != isRelevantColumnIndex)
+ {
+ DataGridViewCell cell = row.Cells[i];
+ if (failureMechanism.IsRelevant)
+ {
+ AssertIsCellStyledAsEnabled(cell);
+ }
+ else
+ {
+ AssertIsCellStyleGreyedOut(cell);
+ }
+ }
+ }
+ }
+ mocks.VerifyAll();
+ }
+
private void AssertDataGridViewDataSource(IEnumerable expectedDistributionElements, DataGridView dataGridView)
{
FailureMechanismContributionItem[] itemArray = expectedDistributionElements.ToArray();
@@ -691,5 +907,27 @@
testForm.Controls.Add(distributionView);
testForm.Show();
}
+
+ private static void AssertIsCellStyledAsEnabled(DataGridViewCell cell)
+ {
+ var enabledBackColor = Color.FromKnownColor(KnownColor.White);
+ var enabledForeColor = Color.FromKnownColor(KnownColor.ControlText);
+
+ Assert.AreEqual(enabledBackColor, cell.Style.BackColor,
+ "Color does not match for column index: " + cell.ColumnIndex);
+ Assert.AreEqual(enabledForeColor, cell.Style.ForeColor,
+ "Color does not match for column index: " + cell.ColumnIndex);
+ }
+
+ private static void AssertIsCellStyleGreyedOut(DataGridViewCell cell)
+ {
+ var irrelevantMechanismBackColor = Color.FromKnownColor(KnownColor.DarkGray);
+ var irrelevantMechanismForeColor = Color.FromKnownColor(KnownColor.GrayText);
+
+ Assert.AreEqual(irrelevantMechanismBackColor, cell.Style.BackColor,
+ "Color does not match for column index: " + cell.ColumnIndex);
+ Assert.AreEqual(irrelevantMechanismForeColor, cell.Style.ForeColor,
+ "Color does not match for column index: " + cell.ColumnIndex);
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ViewInfos/FailureMechanismContributionViewInfoTest.cs
===================================================================
diff -u -r3abef5ccb0ba5386c65d4156b319970fc4337a29 -r4ee9bf9a46317d760d9d8fdf95b9024571fc04fe
--- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ViewInfos/FailureMechanismContributionViewInfoTest.cs (.../FailureMechanismContributionViewInfoTest.cs) (revision 3abef5ccb0ba5386c65d4156b319970fc4337a29)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/ViewInfos/FailureMechanismContributionViewInfoTest.cs (.../FailureMechanismContributionViewInfoTest.cs) (revision 4ee9bf9a46317d760d9d8fdf95b9024571fc04fe)
@@ -134,23 +134,27 @@
var contribution = new FailureMechanismContribution(Enumerable.Empty(), 100.0, 123456);
var assessmentSection = mocks.Stub();
- assessmentSection.Stub(section => section.FailureMechanismContribution)
- .Return(contribution);
+ assessmentSection.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
assessmentSection.Stub(section => section.Composition)
.Return(AssessmentSectionComposition.Dike);
+ assessmentSection.Stub(section => section.FailureMechanismContribution)
+ .Return(contribution);
+
mocks.ReplayAll();
- var view = new FailureMechanismContributionView
+ using (var view = new FailureMechanismContributionView
{
Data = contribution,
AssessmentSection = assessmentSection
- };
+ })
+ {
+ // Call
+ var closeForData = info.CloseForData(view, assessmentSection);
- // Call
- var closeForData = info.CloseForData(view, assessmentSection);
-
- // Assert
- Assert.IsTrue(closeForData);
+ // Assert
+ Assert.IsTrue(closeForData);
+ }
mocks.VerifyAll();
}
@@ -166,11 +170,16 @@
.Return(contribution1);
assessmentSection1.Stub(section => section.Composition)
.Return(AssessmentSectionComposition.DikeAndDune);
+ assessmentSection1.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
+
var assessmentSection2 = mocks.Stub();
assessmentSection2.Stub(section => section.FailureMechanismContribution)
.Return(contribution2);
assessmentSection2.Stub(section => section.Composition)
.Return(AssessmentSectionComposition.DikeAndDune);
+ assessmentSection2.Stub(section => section.GetFailureMechanisms())
+ .Return(Enumerable.Empty());
mocks.ReplayAll();
var view = new FailureMechanismContributionView