Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs =================================================================== diff -u -r8efe7a79774f6a946a58c45f052c975d43304fb3 -rbae4f8741e1a0155753e3b3734de500712ee4182 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 8efe7a79774f6a946a58c45f052c975d43304fb3) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision bae4f8741e1a0155753e3b3734de500712ee4182) @@ -25,6 +25,7 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Base; +using Core.Common.Gui.Commands; using NUnit.Extensions.Forms; using NUnit.Framework; using Rhino.Mocks; @@ -796,7 +797,7 @@ public void GivenView_IsRelevantPropertyChangeNotified_RowStylesUpdates(bool initialIsRelevant) { // Given - IObserver failureMechanismObserver = null; + List failureMechanismObservers = new List(); var mocks = new MockRepository(); var failureMechanism = mocks.Stub(); failureMechanism.Stub(fm => fm.Name).Return("A"); @@ -805,18 +806,18 @@ .IgnoreArguments() .WhenCalled(invocation => { - failureMechanismObserver = (IObserver)invocation.Arguments[0]; + failureMechanismObservers.Add((IObserver)invocation.Arguments[0]); }); failureMechanism.Stub(fm => fm.NotifyObservers()) .WhenCalled(invocation => { - failureMechanismObserver.UpdateObserver(); + failureMechanismObservers[0].UpdateObserver(); }); failureMechanism.Stub(fm => fm.Detach(null)) .IgnoreArguments() .WhenCalled(invocation => { - failureMechanismObserver = null; + failureMechanismObservers.Remove((IObserver)invocation.Arguments[0]); }); var failureMechanisms = new[] @@ -882,6 +883,91 @@ } [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenViewWithViewCommands_IsRelevantPropertyChangeNotified_CloseViewsForIrrelevantFailureMechanisms(bool initialIsRelevant) + { + // Given + List failureMechanismObservers = new List(); + 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 => + { + failureMechanismObservers.Add((IObserver) invocation.Arguments[0]); + }); + failureMechanism.Stub(fm => fm.NotifyObservers()) + .WhenCalled(invocation => + { + failureMechanismObservers[1].UpdateObserver(); + }); + failureMechanism.Stub(fm => fm.Detach(null)) + .IgnoreArguments() + .WhenCalled(invocation => + { + failureMechanismObservers.Remove((IObserver)invocation.Arguments[0]); + }); + + var relevantFailureMechanism = mocks.Stub(); + relevantFailureMechanism.Stub(fm => fm.Name).Return("B"); + relevantFailureMechanism.IsRelevant = true; + relevantFailureMechanism.Stub(fm => fm.Attach(null)) + .IgnoreArguments(); + relevantFailureMechanism.Stub(fm => fm.Detach(null)) + .IgnoreArguments(); + + var irrelevantFailureMechanism = mocks.Stub(); + irrelevantFailureMechanism.Stub(fm => fm.Name).Return("C"); + irrelevantFailureMechanism.IsRelevant = false; + irrelevantFailureMechanism.Stub(fm => fm.Attach(null)) + .IgnoreArguments(); + irrelevantFailureMechanism.Stub(fm => fm.Detach(null)) + .IgnoreArguments(); + + var failureMechanisms = new[] + { + failureMechanism, + relevantFailureMechanism, + irrelevantFailureMechanism + }; + + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(failureMechanisms); + assessmentSection.Stub(section => section.Composition).Return(AssessmentSectionComposition.Dike); + + IViewCommands viewCommandsStub = mocks.Stub(); + if (initialIsRelevant) + { + viewCommandsStub.Expect(vc => vc.RemoveAllViewsForItem(failureMechanism)); + } + viewCommandsStub.Expect(vc => vc.RemoveAllViewsForItem(relevantFailureMechanism)).Repeat.Never(); + viewCommandsStub.Expect(vc => vc.RemoveAllViewsForItem(irrelevantFailureMechanism)); + mocks.ReplayAll(); + + using (var view = new FailureMechanismContributionView + { + ViewCommands = viewCommandsStub + }) + { + ShowFormWithView(view); + + var contribution = new FailureMechanismContribution(failureMechanisms, 50.0, 30000); + + view.Data = contribution; + view.AssessmentSection = assessmentSection; + + // When + failureMechanism.IsRelevant = !initialIsRelevant; + failureMechanism.NotifyObservers(); + } + // Then + mocks.VerifyAll(); + } + + [Test] public void GivenView_WhenSettingFailureMechanismThatIsAlwaysRelevant_IsRelevantFlagTrueAndReadonly() { // Given