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