Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs =================================================================== diff -u -re3c8135a137a664bc323012ca829d606ebee6bff -ra57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision e3c8135a137a664bc323012ca829d606ebee6bff) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -20,13 +20,11 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Windows.Forms; using Core.Common.Base; using Core.Components.Gis.Data; using Core.Components.Gis.Forms; using Riskeer.Common.Data.AssessmentSection; -using Riskeer.Common.Data.FailureMechanism; using Riskeer.Common.Forms.Factories; using Riskeer.DuneErosion.Data; using Riskeer.DuneErosion.Forms.Factories; @@ -39,20 +37,9 @@ /// public partial class DuneErosionFailureMechanismView : UserControl, IMapView { - private MapDataCollection mapDataCollection; private MapLineData referenceLineMapData; private MapPointData duneLocationsMapData; - private MapLineData sectionsMapData; - private MapPointData sectionsStartPointMapData; - private MapPointData sectionsEndPointMapData; - - private MapLineData simpleAssemblyMapData; - private MapLineData detailedAssemblyMapData; - private MapLineData tailorMadeAssemblyMapData; - private MapLineData combinedAssemblyMapData; - - private Observer failureMechanismObserver; private Observer assessmentSectionObserver; private Observer referenceLineObserver; private Observer duneLocationsObserver; @@ -62,7 +49,6 @@ private RecursiveObserver, DuneLocationCalculation> calculationsForMechanismSpecificLowerLimitNormObserver; private RecursiveObserver, DuneLocationCalculation> calculationsForLowerLimitNormObserver; private RecursiveObserver, DuneLocationCalculation> calculationsForFactorizedLowerLimitNormObserver; - private RecursiveObserver, DuneErosionFailureMechanismSectionResult> sectionResultObserver; /// /// Creates a new instance of . @@ -88,12 +74,6 @@ FailureMechanism = failureMechanism; AssessmentSection = assessmentSection; - - CreateObservers(); - - CreateMapData(); - SetMapDataFeatures(); - riskeerMapControl.SetAllData(mapDataCollection, AssessmentSection.BackgroundData); } /// @@ -116,9 +96,26 @@ } } + /// + /// Gets the . + /// + protected MapDataCollection MapDataCollection { get; private set; } + + protected override void OnLoad(EventArgs e) + { + CreateObservers(); + + CreateMapData(); + + SetAllMapDataFeatures(); + + riskeerMapControl.SetAllData(MapDataCollection, AssessmentSection.BackgroundData); + + base.OnLoad(e); + } + protected override void Dispose(bool disposing) { - failureMechanismObserver.Dispose(); assessmentSectionObserver.Dispose(); referenceLineObserver.Dispose(); duneLocationsObserver.Dispose(); @@ -129,8 +126,6 @@ calculationsForLowerLimitNormObserver.Dispose(); calculationsForFactorizedLowerLimitNormObserver.Dispose(); - sectionResultObserver.Dispose(); - if (disposing) { components?.Dispose(); @@ -139,12 +134,11 @@ base.Dispose(disposing); } - private void CreateObservers() + /// + /// Creates the observers. + /// + protected virtual void CreateObservers() { - failureMechanismObserver = new Observer(UpdateFailureMechanismMapData) - { - Observable = FailureMechanism - }; assessmentSectionObserver = new Observer(UpdateReferenceLineMapData) { Observable = AssessmentSection @@ -163,53 +157,26 @@ calculationsForMechanismSpecificLowerLimitNormObserver = CreateDuneLocationCalculationsObserver(FailureMechanism.CalculationsForMechanismSpecificLowerLimitNorm); calculationsForLowerLimitNormObserver = CreateDuneLocationCalculationsObserver(FailureMechanism.CalculationsForLowerLimitNorm); calculationsForFactorizedLowerLimitNormObserver = CreateDuneLocationCalculationsObserver(FailureMechanism.CalculationsForFactorizedLowerLimitNorm); - - sectionResultObserver = new RecursiveObserver, - DuneErosionFailureMechanismSectionResult>(UpdateAssemblyMapData, sr => sr) - { - Observable = FailureMechanism.SectionResults - }; } - private void CreateMapData() + /// + /// Creates the map data. + /// + protected virtual void CreateMapData() { - mapDataCollection = new MapDataCollection(DuneErosionDataResources.DuneErosionFailureMechanism_DisplayName); + MapDataCollection = new MapDataCollection(DuneErosionDataResources.DuneErosionFailureMechanism_DisplayName); referenceLineMapData = RiskeerMapDataFactory.CreateReferenceLineMapData(); duneLocationsMapData = RiskeerMapDataFactory.CreateHydraulicBoundaryLocationsMapData(); - MapDataCollection sectionsMapDataCollection = RiskeerMapDataFactory.CreateSectionsMapDataCollection(); - sectionsMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsMapData(); - sectionsStartPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsStartPointMapData(); - sectionsEndPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsEndPointMapData(); + MapDataCollection.Add(referenceLineMapData); - MapDataCollection assemblyMapDataCollection = AssemblyMapDataFactory.CreateAssemblyMapDataCollection(); - tailorMadeAssemblyMapData = AssemblyMapDataFactory.CreateTailorMadeAssemblyMapData(); - detailedAssemblyMapData = AssemblyMapDataFactory.CreateDetailedAssemblyMapData(); - simpleAssemblyMapData = AssemblyMapDataFactory.CreateSimpleAssemblyMapData(); - combinedAssemblyMapData = AssemblyMapDataFactory.CreateCombinedAssemblyMapData(); - - mapDataCollection.Add(referenceLineMapData); - - sectionsMapDataCollection.Add(sectionsMapData); - sectionsMapDataCollection.Add(sectionsStartPointMapData); - sectionsMapDataCollection.Add(sectionsEndPointMapData); - mapDataCollection.Add(sectionsMapDataCollection); - - assemblyMapDataCollection.Add(tailorMadeAssemblyMapData); - assemblyMapDataCollection.Add(detailedAssemblyMapData); - assemblyMapDataCollection.Add(simpleAssemblyMapData); - assemblyMapDataCollection.Add(combinedAssemblyMapData); - mapDataCollection.Add(assemblyMapDataCollection); - - mapDataCollection.Add(duneLocationsMapData); + MapDataCollection.Add(duneLocationsMapData); } - private void SetMapDataFeatures() + protected virtual void SetAllMapDataFeatures() { SetReferenceLineMapData(); - SetFailureMechanismMapData(); SetDuneLocationMapData(); - SetAssemblyMapData(); } private RecursiveObserver, DuneLocationCalculation> CreateDuneLocationCalculationsObserver( @@ -238,28 +205,6 @@ #endregion - #region FailureMechanism MapData - - private void UpdateFailureMechanismMapData() - { - SetFailureMechanismMapData(); - sectionsMapData.NotifyObservers(); - sectionsStartPointMapData.NotifyObservers(); - sectionsEndPointMapData.NotifyObservers(); - - UpdateAssemblyMapData(); - } - - private void SetFailureMechanismMapData() - { - IEnumerable failureMechanismSections = FailureMechanism.Sections; - sectionsMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionFeatures(failureMechanismSections); - sectionsStartPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionStartPointFeatures(failureMechanismSections); - sectionsEndPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionEndPointFeatures(failureMechanismSections); - } - - #endregion - #region DuneLocation MapData private void UpdateDuneLocationMapData() @@ -274,26 +219,5 @@ } #endregion - - #region Assembly MapData - - private void UpdateAssemblyMapData() - { - SetAssemblyMapData(); - simpleAssemblyMapData.NotifyObservers(); - detailedAssemblyMapData.NotifyObservers(); - tailorMadeAssemblyMapData.NotifyObservers(); - combinedAssemblyMapData.NotifyObservers(); - } - - private void SetAssemblyMapData() - { - simpleAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateSimpleAssemblyFeatures(FailureMechanism); - detailedAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateDetailedAssemblyFeatures(FailureMechanism); - tailorMadeAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateTailorMadeAssemblyFeatures(FailureMechanism); - combinedAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateCombinedAssemblyFeatures(FailureMechanism); - } - - #endregion } } \ No newline at end of file Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailurePathView.cs =================================================================== diff -u --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailurePathView.cs (revision 0) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/DuneErosionFailurePathView.cs (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -0,0 +1,166 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using Core.Common.Base; +using Core.Components.Gis.Data; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Forms.Factories; +using Riskeer.DuneErosion.Data; +using Riskeer.DuneErosion.Forms.Factories; +using DuneErosionDataResources = Riskeer.DuneErosion.Data.Properties.Resources; + +namespace Riskeer.DuneErosion.Forms.Views +{ + /// + /// This class is a view showing map data for a dune erosion failure path. + /// + public class DuneErosionFailurePathView : DuneErosionFailureMechanismView + { + private MapLineData sectionsMapData; + private MapPointData sectionsStartPointMapData; + private MapPointData sectionsEndPointMapData; + + private MapLineData simpleAssemblyMapData; + private MapLineData detailedAssemblyMapData; + private MapLineData tailorMadeAssemblyMapData; + private MapLineData combinedAssemblyMapData; + + private Observer failureMechanismObserver; + + private RecursiveObserver, DuneErosionFailureMechanismSectionResult> sectionResultObserver; + + /// + /// Creates a new instance of . + /// + /// The failure mechanism to show the data for. + /// The assessment section in which the + /// belongs to. + /// Thrown when any parameter is null. + public DuneErosionFailurePathView(DuneErosionFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) : base(failureMechanism, assessmentSection) {} + + protected override void Dispose(bool disposing) + { + failureMechanismObserver.Dispose(); + + sectionResultObserver.Dispose(); + + base.Dispose(disposing); + } + + protected override void CreateObservers() + { + base.CreateObservers(); + + failureMechanismObserver = new Observer(UpdateFailureMechanismMapData) + { + Observable = FailureMechanism + }; + + sectionResultObserver = new RecursiveObserver, + DuneErosionFailureMechanismSectionResult>(UpdateAssemblyMapData, sr => sr) + { + Observable = FailureMechanism.SectionResults + }; + } + + protected override void CreateMapData() + { + base.CreateMapData(); + + MapDataCollection sectionsMapDataCollection = RiskeerMapDataFactory.CreateSectionsMapDataCollection(); + sectionsMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsMapData(); + sectionsStartPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsStartPointMapData(); + sectionsEndPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsEndPointMapData(); + + MapDataCollection assemblyMapDataCollection = AssemblyMapDataFactory.CreateAssemblyMapDataCollection(); + tailorMadeAssemblyMapData = AssemblyMapDataFactory.CreateTailorMadeAssemblyMapData(); + detailedAssemblyMapData = AssemblyMapDataFactory.CreateDetailedAssemblyMapData(); + simpleAssemblyMapData = AssemblyMapDataFactory.CreateSimpleAssemblyMapData(); + combinedAssemblyMapData = AssemblyMapDataFactory.CreateCombinedAssemblyMapData(); + + sectionsMapDataCollection.Add(sectionsMapData); + sectionsMapDataCollection.Add(sectionsStartPointMapData); + sectionsMapDataCollection.Add(sectionsEndPointMapData); + MapDataCollection.Insert(1, sectionsMapDataCollection); + + assemblyMapDataCollection.Add(tailorMadeAssemblyMapData); + assemblyMapDataCollection.Add(detailedAssemblyMapData); + assemblyMapDataCollection.Add(simpleAssemblyMapData); + assemblyMapDataCollection.Add(combinedAssemblyMapData); + MapDataCollection.Insert(2, assemblyMapDataCollection); + } + + protected override void SetAllMapDataFeatures() + { + base.SetAllMapDataFeatures(); + + SetFailureMechanismMapData(); + SetAssemblyMapData(); + } + + #region FailureMechanism MapData + + private void UpdateFailureMechanismMapData() + { + SetFailureMechanismMapData(); + sectionsMapData.NotifyObservers(); + sectionsStartPointMapData.NotifyObservers(); + sectionsEndPointMapData.NotifyObservers(); + + UpdateAssemblyMapData(); + } + + private void SetFailureMechanismMapData() + { + IEnumerable failureMechanismSections = FailureMechanism.Sections; + sectionsMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionFeatures(failureMechanismSections); + sectionsStartPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionStartPointFeatures(failureMechanismSections); + sectionsEndPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionEndPointFeatures(failureMechanismSections); + } + + #endregion + + #region Assembly MapData + + private void UpdateAssemblyMapData() + { + SetAssemblyMapData(); + simpleAssemblyMapData.NotifyObservers(); + detailedAssemblyMapData.NotifyObservers(); + tailorMadeAssemblyMapData.NotifyObservers(); + combinedAssemblyMapData.NotifyObservers(); + } + + private void SetAssemblyMapData() + { + simpleAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateSimpleAssemblyFeatures(FailureMechanism); + detailedAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateDetailedAssemblyFeatures(FailureMechanism); + tailorMadeAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateTailorMadeAssemblyFeatures(FailureMechanism); + combinedAssemblyMapData.Features = DuneErosionAssemblyMapDataFeaturesFactory.CreateCombinedAssemblyFeatures(FailureMechanism); + } + + #endregion + } +} \ No newline at end of file Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs =================================================================== diff -u -recd6b9c740158ab63e5c04861cb506e9c4026b05 -ra57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision ecd6b9c740158ab63e5c04861cb506e9c4026b05) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -149,6 +149,13 @@ CreateInstance = context => new DuneErosionFailureMechanismView(context.WrappedData, context.Parent), AdditionalDataCheck = context => context.WrappedData.IsRelevant }; + + yield return new ViewInfo + { + GetViewName = (view, context) => context.WrappedData.Name, + Image = RiskeerCommonFormsResources.FailureMechanismIcon, + CreateInstance = context => new DuneErosionFailurePathView(context.WrappedData, context.Parent) + }; yield return new ViewInfo, DuneLocationCalculationsView> { Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs =================================================================== diff -u -re3c8135a137a664bc323012ca829d606ebee6bff -ra57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs (.../DuneErosionFailureMechanismViewTest.cs) (revision e3c8135a137a664bc323012ca829d606ebee6bff) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailureMechanismViewTest.cs (.../DuneErosionFailureMechanismViewTest.cs) (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Windows.Forms; using Core.Common.Base; using Core.Common.Base.Geometry; @@ -50,28 +51,12 @@ public class DuneErosionFailureMechanismViewTest { private const int referenceLineIndex = 0; - private const int sectionsCollectionIndex = 1; - private const int assemblyResultsIndex = 2; - private const int duneLocationsIndex = 3; + private const int duneLocationsIndex = 1; - private const int sectionsIndex = 0; - private const int sectionsStartPointIndex = 1; - private const int sectionsEndPointIndex = 2; - - private const int tailorMadeAssemblyIndex = 0; - private const int detailedAssemblyIndex = 1; - private const int simpleAssemblyIndex = 2; - private const int combinedAssemblyIndex = 3; - private const int duneLocationsObserverIndex = 1; - private const int sectionsObserverIndex = 2; - private const int sectionsStartPointObserverIndex = 3; - private const int sectionsEndPointObserverIndex = 4; - private const int simpleAssemblyObserverIndex = 5; - private const int detailedAssemblyObserverIndex = 6; - private const int tailorMadeAssemblyObserverIndex = 7; - private const int combinedAssemblyObserverIndex = 8; + private Form testForm; + private static IEnumerable GetCalculationFuncs { get @@ -94,6 +79,18 @@ } } + [SetUp] + public void Setup() + { + testForm = new Form(); + } + + [TearDown] + public void TearDown() + { + testForm.Dispose(); + } + [Test] public void Constructor_FailureMechanismNull_ThrowsArgumentNullException() { @@ -103,10 +100,10 @@ mocks.ReplayAll(); // Call - TestDelegate call = () => new DuneErosionFailureMechanismView(null, assessmentSection); + void Call() => new DuneErosionFailureMechanismView(null, assessmentSection); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("failureMechanism", exception.ParamName); mocks.VerifyAll(); } @@ -115,53 +112,54 @@ public void Constructor_AssessmentSectionNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => new DuneErosionFailureMechanismView(new DuneErosionFailureMechanism(), null); + void Call() => new DuneErosionFailureMechanismView(new DuneErosionFailureMechanism(), null); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("assessmentSection", exception.ParamName); } [Test] + [Apartment(ApartmentState.STA)] public void Constructor_ExpectedValues() { // Setup var failureMechanism = new DuneErosionFailureMechanism(); var assessmentSection = new AssessmentSectionStub(); // Call - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - // Assert - Assert.IsInstanceOf(view); - Assert.IsInstanceOf(view); - Assert.IsNull(view.Data); - Assert.AreSame(failureMechanism, view.FailureMechanism); - Assert.AreSame(assessmentSection, view.AssessmentSection); + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); - Assert.AreEqual(1, view.Controls.Count); - Assert.IsInstanceOf(view.Controls[0]); - Assert.AreSame(view.Map, ((RiskeerMapControl) view.Controls[0]).MapControl); - Assert.AreEqual(DockStyle.Fill, ((Control) view.Map).Dock); - AssertEmptyMapData(view.Map.Data); - } + // Assert + Assert.IsInstanceOf(view); + Assert.IsInstanceOf(view); + Assert.IsNull(view.Data); + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); + + Assert.AreEqual(1, view.Controls.Count); + Assert.IsInstanceOf(view.Controls[0]); + Assert.AreSame(view.Map, ((RiskeerMapControl) view.Controls[0]).MapControl); + Assert.AreEqual(DockStyle.Fill, ((Control) view.Map).Dock); + AssertEmptyMapData(view.Map.Data); } [Test] + [Apartment(ApartmentState.STA)] public void Constructor_AssessmentSectionWithBackgroundData_BackgroundDataSet() { // Setup IAssessmentSection assessmentSection = new AssessmentSectionStub(); // Call - using (var view = new DuneErosionFailureMechanismView(new DuneErosionFailureMechanism(), assessmentSection)) - { - // Assert - MapDataTestHelper.AssertImageBasedMapData(assessmentSection.BackgroundData, view.Map.BackgroundMapData); - } + DuneErosionFailureMechanismView view = CreateView(new DuneErosionFailureMechanism(), assessmentSection); + + // Assert + MapDataTestHelper.AssertImageBasedMapData(assessmentSection.BackgroundData, view.Map.BackgroundMapData); } [Test] + [Apartment(ApartmentState.STA)] public void Constructor_WithAllData_DataUpdatedToCollectionOfFilledMapData() { // Setup @@ -213,36 +211,24 @@ calculator.CombinedAssemblyCategoryOutput = expectedCombinedAssemblyCategory; // Call - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); - // Assert - MapDataCollection mapData = map.Data; - Assert.IsInstanceOf(mapData); + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - List mapDataList = mapData.Collection.ToList(); - Assert.AreEqual(4, mapDataList.Count); - MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, mapDataList[referenceLineIndex]); + // Assert + MapDataCollection mapData = map.Data; + Assert.IsInstanceOf(mapData); - IEnumerable sectionsCollection = ((MapDataCollection) mapDataList[sectionsCollectionIndex]).Collection; - MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsIndex)); - MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsStartPointIndex)); - MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsEndPointIndex)); + List mapDataList = mapData.Collection.ToList(); + Assert.AreEqual(2, mapDataList.Count); + MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, mapDataList[referenceLineIndex]); - AssertDuneLocationsMapData(failureMechanism, mapDataList[duneLocationsIndex]); - - MapDataTestHelper.AssertAssemblyMapDataCollection(expectedSimpleAssembly.Group, - expectedDetailedAssemblyCategory, - expectedTailorMadeAssemblyCategory, - expectedCombinedAssemblyCategory, - (MapDataCollection) mapDataList[assemblyResultsIndex], - failureMechanism); - } + AssertDuneLocationsMapData(failureMechanism, mapDataList[duneLocationsIndex]); } } [Test] + [Apartment(ApartmentState.STA)] public void GivenViewWithDuneLocationsData_WhenHydraulicBoundaryDatabaseUpdatedAndNotified_ThenMapDataUpdated() { // Given @@ -253,34 +239,34 @@ new TestDuneLocation() }); - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[duneLocationsObserverIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(duneLocationsIndex); + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[duneLocationsObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); - // Precondition - AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); + MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(duneLocationsIndex); - // When - failureMechanism.SetDuneLocations(new[] - { - new TestDuneLocation() - }); - failureMechanism.DuneLocations.NotifyObservers(); + // Precondition + AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); - // Then - AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); - mocks.VerifyAll(); - } + // When + failureMechanism.SetDuneLocations(new[] + { + new TestDuneLocation() + }); + failureMechanism.DuneLocations.NotifyObservers(); + + // Then + AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); + mocks.VerifyAll(); } [Test] + [Apartment(ApartmentState.STA)] [TestCaseSource(nameof(GetCalculationFuncs))] public void GivenViewWithDuneLocationsData_WhenDuneLocationCalculationUpdatedAndNotified_ThenMapDataUpdated( Func getCalculationFunc) @@ -293,32 +279,32 @@ new TestDuneLocation() }); - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[duneLocationsObserverIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(duneLocationsIndex); + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[duneLocationsObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); - // Precondition - AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); + MapData hydraulicBoundaryLocationsMapData = map.Data.Collection.ElementAt(duneLocationsIndex); - // When - DuneLocationCalculation duneLocationCalculation = getCalculationFunc(failureMechanism); - duneLocationCalculation.Output = new TestDuneLocationCalculationOutput(); - duneLocationCalculation.NotifyObservers(); + // Precondition + AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); - // Then - AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); - mocks.VerifyAll(); - } + // When + DuneLocationCalculation duneLocationCalculation = getCalculationFunc(failureMechanism); + duneLocationCalculation.Output = new TestDuneLocationCalculationOutput(); + duneLocationCalculation.NotifyObservers(); + + // Then + AssertDuneLocationsMapData(failureMechanism, hydraulicBoundaryLocationsMapData); + mocks.VerifyAll(); } [Test] + [Apartment(ApartmentState.STA)] public void GivenViewWithAssessmentSectionData_WhenAssessmentSectionUpdatedAndNotified_ThenMapDataUpdated() { // Given @@ -333,31 +319,31 @@ ReferenceLine = referenceLine }; - using (var view = new DuneErosionFailureMechanismView(new DuneErosionFailureMechanism(), assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(new DuneErosionFailureMechanism(), assessmentSection); - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[referenceLineIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - var referenceLineMapData = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[referenceLineIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); - // Precondition - MapFeaturesTestHelper.AssertReferenceLineMetaData(assessmentSection.ReferenceLine, assessmentSection, referenceLineMapData.Features); + var referenceLineMapData = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); - // When - assessmentSection.Name = "New name"; - assessmentSection.NotifyObservers(); + // Precondition + MapFeaturesTestHelper.AssertReferenceLineMetaData(assessmentSection.ReferenceLine, assessmentSection, referenceLineMapData.Features); - // Then - MapFeaturesTestHelper.AssertReferenceLineMetaData(assessmentSection.ReferenceLine, assessmentSection, referenceLineMapData.Features); - mocks.VerifyAll(); - } + // When + assessmentSection.Name = "New name"; + assessmentSection.NotifyObservers(); + + // Then + MapFeaturesTestHelper.AssertReferenceLineMetaData(assessmentSection.ReferenceLine, assessmentSection, referenceLineMapData.Features); + mocks.VerifyAll(); } [Test] + [Apartment(ApartmentState.STA)] public void GivenViewWithReferenceLineData_WhenReferenceLineUpdatedAndNotified_ThenMapDataUpdated() { // Given @@ -372,278 +358,91 @@ ReferenceLine = referenceLine }; - using (var view = new DuneErosionFailureMechanismView(new DuneErosionFailureMechanism(), assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(new DuneErosionFailureMechanism(), assessmentSection); - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[referenceLineIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - MapData referenceLineMapData = map.Data.Collection.ElementAt(referenceLineIndex); + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[referenceLineIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); - // Precondition - MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, referenceLineMapData); + MapData referenceLineMapData = map.Data.Collection.ElementAt(referenceLineIndex); - // When - referenceLine.SetGeometry(new List - { - new Point2D(2.0, 5.0), - new Point2D(4.0, 3.0) - }); - referenceLine.NotifyObservers(); + // Precondition + MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, referenceLineMapData); - // Then - MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, referenceLineMapData); - mocks.VerifyAll(); - } - } - - [Test] - public void GivenViewWithFailureMechanismSectionsData_WhenFailureMechanismSectionsUpdatedAndNotified_ThenMapDataUpdated() - { - // Given - var failureMechanism = new DuneErosionFailureMechanism(); - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, new AssessmentSectionStub())) + // When + referenceLine.SetGeometry(new List { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + new Point2D(2.0, 5.0), + new Point2D(4.0, 3.0) + }); + referenceLine.NotifyObservers(); - IEnumerable sectionsCollection = ((MapDataCollection) map.Data.Collection.ElementAt(sectionsCollectionIndex)).Collection; - var sectionMapData = (MapLineData) sectionsCollection.ElementAt(sectionsIndex); - var sectionStartsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsStartPointIndex); - var sectionsEndsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsEndPointIndex); - - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[sectionsObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[sectionsStartPointObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[sectionsEndPointObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); - - // When - FailureMechanismTestHelper.SetSections(failureMechanism, new[] - { - new FailureMechanismSection(string.Empty, new[] - { - new Point2D(1, 2), - new Point2D(1, 2) - }) - }); - failureMechanism.NotifyObservers(); - - // Then - MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionMapData); - MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionStartsMapData); - MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsEndsMapData); - mocks.VerifyAll(); - } + // Then + MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, referenceLineMapData); + mocks.VerifyAll(); } [Test] - public void GivenViewWithAssemblyData_WhenFailureMechanismNotified_ThenMapDataUpdated() - { - // Given - var random = new Random(39); - var failureMechanism = new DuneErosionFailureMechanism(); - FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(1, 10)); - - var originalSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); - var originalDetailedAssemblyCategory = random.NextEnumValue(); - var originalTailorMadeAssemblyCategory = random.NextEnumValue(); - var originalCombinedAssemblyCategory = random.NextEnumValue(); - - using (new AssemblyToolCalculatorFactoryConfig()) - { - var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; - FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; - - calculator.SimpleAssessmentAssemblyOutput = originalSimpleAssembly; - calculator.DetailedAssessmentAssemblyGroupOutput = originalDetailedAssemblyCategory; - calculator.TailorMadeAssemblyCategoryOutput = originalTailorMadeAssemblyCategory; - calculator.CombinedAssemblyCategoryOutput = originalCombinedAssemblyCategory; - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, new AssessmentSectionStub())) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[sectionsObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[sectionsStartPointObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[sectionsEndPointObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); - - // Precondition - var assemblyMapData = (MapDataCollection) map.Data.Collection.ElementAt(assemblyResultsIndex); - MapDataTestHelper.AssertAssemblyMapDataCollection(originalSimpleAssembly.Group, - originalDetailedAssemblyCategory, - originalTailorMadeAssemblyCategory, - originalCombinedAssemblyCategory, - assemblyMapData, - failureMechanism); - - // When - var updatedSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); - var updatedDetailedAssemblyCategory = random.NextEnumValue(); - var updatedTailorMadeAssemblyCategory = random.NextEnumValue(); - var updatedCombinedAssemblyCategory = random.NextEnumValue(); - calculator.SimpleAssessmentAssemblyOutput = updatedSimpleAssembly; - calculator.DetailedAssessmentAssemblyGroupOutput = updatedDetailedAssemblyCategory; - calculator.TailorMadeAssemblyCategoryOutput = updatedTailorMadeAssemblyCategory; - calculator.CombinedAssemblyCategoryOutput = updatedCombinedAssemblyCategory; - failureMechanism.NotifyObservers(); - - // Then - MapDataTestHelper.AssertAssemblyMapDataCollection(updatedSimpleAssembly.Group, - updatedDetailedAssemblyCategory, - updatedTailorMadeAssemblyCategory, - updatedCombinedAssemblyCategory, - assemblyMapData, - failureMechanism); - mocks.VerifyAll(); - } - } - } - - [Test] - public void GivenViewWithAssemblyData_WhenFailureMechanismSectionResultNotified_ThenMapDataUpdated() - { - // Given - var random = new Random(39); - var failureMechanism = new DuneErosionFailureMechanism(); - FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(1, 10)); - - var originalSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); - var originalDetailedAssemblyCategory = random.NextEnumValue(); - var originalTailorMadeAssemblyCategory = random.NextEnumValue(); - var originalCombinedAssemblyCategory = random.NextEnumValue(); - - using (new AssemblyToolCalculatorFactoryConfig()) - { - var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; - FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; - - calculator.SimpleAssessmentAssemblyOutput = originalSimpleAssembly; - calculator.DetailedAssessmentAssemblyGroupOutput = originalDetailedAssemblyCategory; - calculator.TailorMadeAssemblyCategoryOutput = originalTailorMadeAssemblyCategory; - calculator.CombinedAssemblyCategoryOutput = originalCombinedAssemblyCategory; - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, new AssessmentSectionStub())) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - - var mocks = new MockRepository(); - IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); - observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); - mocks.ReplayAll(); - - // Precondition - var assemblyMapData = (MapDataCollection) map.Data.Collection.ElementAt(assemblyResultsIndex); - MapDataTestHelper.AssertAssemblyMapDataCollection(originalSimpleAssembly.Group, - originalDetailedAssemblyCategory, - originalTailorMadeAssemblyCategory, - originalCombinedAssemblyCategory, - assemblyMapData, - failureMechanism); - - // When - var updatedSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); - var updatedDetailedAssemblyCategory = random.NextEnumValue(); - var updatedTailorMadeAssemblyCategory = random.NextEnumValue(); - var updatedCombinedAssemblyCategory = random.NextEnumValue(); - calculator.SimpleAssessmentAssemblyOutput = updatedSimpleAssembly; - calculator.DetailedAssessmentAssemblyGroupOutput = updatedDetailedAssemblyCategory; - calculator.TailorMadeAssemblyCategoryOutput = updatedTailorMadeAssemblyCategory; - calculator.CombinedAssemblyCategoryOutput = updatedCombinedAssemblyCategory; - failureMechanism.SectionResults.First().NotifyObservers(); - - // Then - MapDataTestHelper.AssertAssemblyMapDataCollection(updatedSimpleAssembly.Group, - updatedDetailedAssemblyCategory, - updatedTailorMadeAssemblyCategory, - updatedCombinedAssemblyCategory, - assemblyMapData, - failureMechanism); - mocks.VerifyAll(); - } - } - } - - [Test] + [Apartment(ApartmentState.STA)] public void UpdateObserver_DataUpdated_MapLayersSameOrder() { // Setup - const int updatedReferenceLineLayerIndex = referenceLineIndex + 3; - const int updatedSectionsCollectionLayerIndex = sectionsCollectionIndex - 1; - const int updatedAssemblyResultsCollectionIndex = assemblyResultsIndex - 1; + const int updatedReferenceLineLayerIndex = referenceLineIndex + 1; const int updatedDuneLocationsLayerIndex = duneLocationsIndex - 1; var assessmentSection = new AssessmentSectionStub(); var failureMechanism = new DuneErosionFailureMechanism(); - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); - MapDataCollection mapData = map.Data; + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; - var dataToMove = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); - mapData.Remove(dataToMove); - mapData.Add(dataToMove); + MapDataCollection mapData = map.Data; - List mapDataList = mapData.Collection.ToList(); + var dataToMove = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); + mapData.Remove(dataToMove); + mapData.Add(dataToMove); - // Precondition - var referenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; - Assert.AreEqual("Referentielijn", referenceLineData.Name); + List mapDataList = mapData.Collection.ToList(); - var sectionsData = (MapDataCollection) mapDataList[updatedSectionsCollectionLayerIndex]; - Assert.AreEqual("Vakindeling", sectionsData.Name); + // Precondition + var referenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; + Assert.AreEqual("Referentielijn", referenceLineData.Name); - var assemblyResultsData = (MapDataCollection) mapDataList[updatedAssemblyResultsCollectionIndex]; - Assert.AreEqual("Toetsoordeel", assemblyResultsData.Name); + var duneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; + Assert.AreEqual("Hydraulische belastingen", duneLocationsData.Name); - var duneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; - Assert.AreEqual("Hydraulische belastingen", duneLocationsData.Name); + var points = new List + { + new Point2D(2.0, 5.0), + new Point2D(4.0, 3.0) + }; + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(points); + assessmentSection.ReferenceLine = referenceLine; - var points = new List - { - new Point2D(2.0, 5.0), - new Point2D(4.0, 3.0) - }; - var referenceLine = new ReferenceLine(); - referenceLine.SetGeometry(points); - assessmentSection.ReferenceLine = referenceLine; + // Call + assessmentSection.NotifyObservers(); - // Call - assessmentSection.NotifyObservers(); + // Assert + var actualReferenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; + Assert.AreEqual("Referentielijn", actualReferenceLineData.Name); - // Assert - var actualReferenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; - Assert.AreEqual("Referentielijn", actualReferenceLineData.Name); + var actualDuneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; + Assert.AreEqual("Hydraulische belastingen", actualDuneLocationsData.Name); + } - var actualSectionsData = (MapDataCollection) mapDataList[updatedSectionsCollectionLayerIndex]; - Assert.AreEqual("Vakindeling", actualSectionsData.Name); + private DuneErosionFailureMechanismView CreateView(DuneErosionFailureMechanism failureMechanism, IAssessmentSection assessmentSection) + { + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); - var actualAssemblyResultsData = (MapDataCollection) mapDataList[updatedAssemblyResultsCollectionIndex]; - Assert.AreEqual("Toetsoordeel", actualAssemblyResultsData.Name); + testForm.Controls.Add(view); + testForm.Show(); - var actualDuneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; - Assert.AreEqual("Hydraulische belastingen", actualDuneLocationsData.Name); - } + return view; } private static void AssertEmptyMapData(MapDataCollection mapDataCollection) @@ -652,7 +451,7 @@ List mapDataList = mapDataCollection.Collection.ToList(); - Assert.AreEqual(4, mapDataList.Count); + Assert.AreEqual(2, mapDataList.Count); var referenceLineMapData = (MapLineData) mapDataList[referenceLineIndex]; var hydraulicBoundaryLocationsMapData = (MapPointData) mapDataList[duneLocationsIndex]; @@ -662,43 +461,6 @@ Assert.AreEqual("Referentielijn", referenceLineMapData.Name); Assert.AreEqual("Hydraulische belastingen", hydraulicBoundaryLocationsMapData.Name); - - var sectionsMapDataCollection = (MapDataCollection) mapDataList[sectionsCollectionIndex]; - Assert.AreEqual("Vakindeling", sectionsMapDataCollection.Name); - List sectionsDataList = sectionsMapDataCollection.Collection.ToList(); - Assert.AreEqual(3, sectionsDataList.Count); - - var sectionsMapData = (MapLineData) sectionsDataList[sectionsIndex]; - var sectionsStartPointMapData = (MapPointData) sectionsDataList[sectionsStartPointIndex]; - var sectionsEndPointMapData = (MapPointData) sectionsDataList[sectionsEndPointIndex]; - - CollectionAssert.IsEmpty(sectionsEndPointMapData.Features); - CollectionAssert.IsEmpty(sectionsStartPointMapData.Features); - CollectionAssert.IsEmpty(sectionsMapData.Features); - - Assert.AreEqual("Vakindeling (eindpunten)", sectionsEndPointMapData.Name); - Assert.AreEqual("Vakindeling (startpunten)", sectionsStartPointMapData.Name); - Assert.AreEqual("Vakindeling", sectionsMapData.Name); - - var assemblyResultsMapDataCollection = (MapDataCollection) mapDataList[assemblyResultsIndex]; - Assert.AreEqual("Toetsoordeel", assemblyResultsMapDataCollection.Name); - List assemblyMapDataList = assemblyResultsMapDataCollection.Collection.ToList(); - Assert.AreEqual(4, assemblyMapDataList.Count); - - var combinedAssemblyMapData = (MapLineData) assemblyMapDataList[combinedAssemblyIndex]; - var simpleAssemblyMapData = (MapLineData) assemblyMapDataList[simpleAssemblyIndex]; - var detailedAssemblyMapData = (MapLineData) assemblyMapDataList[detailedAssemblyIndex]; - var tailorMadeAssemblyMapData = (MapLineData) assemblyMapDataList[tailorMadeAssemblyIndex]; - - CollectionAssert.IsEmpty(combinedAssemblyMapData.Features); - CollectionAssert.IsEmpty(simpleAssemblyMapData.Features); - CollectionAssert.IsEmpty(detailedAssemblyMapData.Features); - CollectionAssert.IsEmpty(tailorMadeAssemblyMapData.Features); - - Assert.AreEqual("Gecombineerd toetsoordeel", combinedAssemblyMapData.Name); - Assert.AreEqual("Toetsoordeel eenvoudige toets", simpleAssemblyMapData.Name); - Assert.AreEqual("Toetsoordeel gedetailleerde toets", detailedAssemblyMapData.Name); - Assert.AreEqual("Toetsoordeel toets op maat", tailorMadeAssemblyMapData.Name); } /// @@ -718,40 +480,10 @@ var duneLocationsMapDataObserver = mocks.StrictMock(); mapDataArray[duneLocationsIndex].Attach(duneLocationsMapDataObserver); - MapData[] sectionsCollection = ((MapDataCollection) mapDataArray[sectionsCollectionIndex]).Collection.ToArray(); - var sectionsMapDataObserver = mocks.StrictMock(); - sectionsCollection[sectionsIndex].Attach(sectionsMapDataObserver); - - var sectionsStartPointMapDataObserver = mocks.StrictMock(); - sectionsCollection[sectionsStartPointIndex].Attach(sectionsStartPointMapDataObserver); - - var sectionsEndPointMapDataObserver = mocks.StrictMock(); - sectionsCollection[sectionsEndPointIndex].Attach(sectionsEndPointMapDataObserver); - - MapData[] assemblyResultsCollection = ((MapDataCollection) mapDataArray[assemblyResultsIndex]).Collection.ToArray(); - var simpleAssemblyMapDataObserver = mocks.StrictMock(); - assemblyResultsCollection[simpleAssemblyIndex].Attach(simpleAssemblyMapDataObserver); - - var detailedAssemblyMapDataObserver = mocks.StrictMock(); - assemblyResultsCollection[detailedAssemblyIndex].Attach(detailedAssemblyMapDataObserver); - - var tailorMadeAssemblyMapDataObserver = mocks.StrictMock(); - assemblyResultsCollection[tailorMadeAssemblyIndex].Attach(tailorMadeAssemblyMapDataObserver); - - var combinedAssemblyMapDataObserver = mocks.StrictMock(); - assemblyResultsCollection[combinedAssemblyIndex].Attach(combinedAssemblyMapDataObserver); - return new[] { referenceLineMapDataObserver, - duneLocationsMapDataObserver, - sectionsMapDataObserver, - sectionsStartPointMapDataObserver, - sectionsEndPointMapDataObserver, - simpleAssemblyMapDataObserver, - detailedAssemblyMapDataObserver, - tailorMadeAssemblyMapDataObserver, - combinedAssemblyMapDataObserver + duneLocationsMapDataObserver }; } Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailurePathViewTest.cs =================================================================== diff -u --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailurePathViewTest.cs (revision 0) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/DuneErosionFailurePathViewTest.cs (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -0,0 +1,556 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Windows.Forms; +using Core.Common.Base; +using Core.Common.Base.Geometry; +using Core.Common.TestUtil; +using Core.Components.Gis.Data; +using Core.Components.Gis.Forms; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.AssemblyTool.Data; +using Riskeer.AssemblyTool.KernelWrapper.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators.Assembly; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.TestUtil; +using Riskeer.Common.Forms.TestUtil; +using Riskeer.Common.Forms.Views; +using Riskeer.DuneErosion.Data; +using Riskeer.DuneErosion.Data.TestUtil; +using Riskeer.DuneErosion.Forms.TestUtil; +using Riskeer.DuneErosion.Forms.Views; + +namespace Riskeer.DuneErosion.Forms.Test.Views +{ + [TestFixture] + public class DuneErosionFailurePathViewTest + { + private const int referenceLineIndex = 0; + private const int sectionsCollectionIndex = 1; + private const int assemblyResultsIndex = 2; + private const int duneLocationsIndex = 3; + + private const int sectionsIndex = 0; + private const int sectionsStartPointIndex = 1; + private const int sectionsEndPointIndex = 2; + + private const int tailorMadeAssemblyIndex = 0; + private const int detailedAssemblyIndex = 1; + private const int simpleAssemblyIndex = 2; + private const int combinedAssemblyIndex = 3; + + private const int sectionsObserverIndex = 0; + private const int sectionsStartPointObserverIndex = 1; + private const int sectionsEndPointObserverIndex = 2; + private const int simpleAssemblyObserverIndex = 3; + private const int detailedAssemblyObserverIndex = 4; + private const int tailorMadeAssemblyObserverIndex = 5; + private const int combinedAssemblyObserverIndex = 6; + + private Form testForm; + + [SetUp] + public void Setup() + { + testForm = new Form(); + } + + [TearDown] + public void TearDown() + { + testForm.Dispose(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void Constructor_ExpectedValues() + { + // Setup + var failureMechanism = new DuneErosionFailureMechanism(); + var assessmentSection = new AssessmentSectionStub(); + + // Call + DuneErosionFailurePathView view = CreateView(failureMechanism, assessmentSection); + + // Assert + Assert.IsInstanceOf(view); + Assert.IsNull(view.Data); + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); + AssertEmptyMapData(view.Map.Data); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void Constructor_WithAllData_DataUpdatedToCollectionOfFilledMapData() + { + // Setup + var random = new Random(39); + + var assessmentSection = new AssessmentSectionStub + { + ReferenceLine = new ReferenceLine() + }; + assessmentSection.ReferenceLine.SetGeometry(new[] + { + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); + + var geometryPoints = new[] + { + new Point2D(0.0, 0.0), + new Point2D(2.0, 0.0), + new Point2D(4.0, 4.0), + new Point2D(6.0, 4.0) + }; + + var failureMechanism = new DuneErosionFailureMechanism(); + failureMechanism.SetDuneLocations(new[] + { + new TestDuneLocation() + }); + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + new FailureMechanismSection("A", geometryPoints.Take(2)), + new FailureMechanismSection("B", geometryPoints.Skip(1).Take(2)), + new FailureMechanismSection("C", geometryPoints.Skip(2).Take(2)) + }); + + var expectedSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var expectedDetailedAssemblyCategory = random.NextEnumValue(); + var expectedTailorMadeAssemblyCategory = random.NextEnumValue(); + var expectedCombinedAssemblyCategory = random.NextEnumValue(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + calculator.SimpleAssessmentAssemblyOutput = expectedSimpleAssembly; + calculator.DetailedAssessmentAssemblyGroupOutput = expectedDetailedAssemblyCategory; + calculator.TailorMadeAssemblyCategoryOutput = expectedTailorMadeAssemblyCategory; + calculator.CombinedAssemblyCategoryOutput = expectedCombinedAssemblyCategory; + + // Call + DuneErosionFailurePathView view = CreateView(failureMechanism, assessmentSection); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + // Assert + MapDataCollection mapData = map.Data; + Assert.IsInstanceOf(mapData); + + List mapDataList = mapData.Collection.ToList(); + Assert.AreEqual(4, mapDataList.Count); + MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, mapDataList[referenceLineIndex]); + + IEnumerable sectionsCollection = ((MapDataCollection) mapDataList[sectionsCollectionIndex]).Collection; + MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsIndex)); + MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsStartPointIndex)); + MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsEndPointIndex)); + + AssertDuneLocationsMapData(failureMechanism, mapDataList[duneLocationsIndex]); + + MapDataTestHelper.AssertAssemblyMapDataCollection(expectedSimpleAssembly.Group, + expectedDetailedAssemblyCategory, + expectedTailorMadeAssemblyCategory, + expectedCombinedAssemblyCategory, + (MapDataCollection) mapDataList[assemblyResultsIndex], + failureMechanism); + } + } + + [Test] + [Apartment(ApartmentState.STA)] + public void GivenViewWithFailureMechanismSectionsData_WhenFailureMechanismSectionsUpdatedAndNotified_ThenMapDataUpdated() + { + // Given + var failureMechanism = new DuneErosionFailureMechanism(); + + DuneErosionFailurePathView view = CreateView(failureMechanism, new AssessmentSectionStub()); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + IEnumerable sectionsCollection = ((MapDataCollection) map.Data.Collection.ElementAt(sectionsCollectionIndex)).Collection; + var sectionMapData = (MapLineData) sectionsCollection.ElementAt(sectionsIndex); + var sectionStartsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsStartPointIndex); + var sectionsEndsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsEndPointIndex); + + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[sectionsObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsStartPointObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsEndPointObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); + + // When + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + new FailureMechanismSection(string.Empty, new[] + { + new Point2D(1, 2), + new Point2D(1, 2) + }) + }); + failureMechanism.NotifyObservers(); + + // Then + MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionMapData); + MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionStartsMapData); + MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsEndsMapData); + mocks.VerifyAll(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void GivenViewWithAssemblyData_WhenFailureMechanismNotified_ThenMapDataUpdated() + { + // Given + var random = new Random(39); + var failureMechanism = new DuneErosionFailureMechanism(); + FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(1, 10)); + + var originalSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var originalDetailedAssemblyCategory = random.NextEnumValue(); + var originalTailorMadeAssemblyCategory = random.NextEnumValue(); + var originalCombinedAssemblyCategory = random.NextEnumValue(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + calculator.SimpleAssessmentAssemblyOutput = originalSimpleAssembly; + calculator.DetailedAssessmentAssemblyGroupOutput = originalDetailedAssemblyCategory; + calculator.TailorMadeAssemblyCategoryOutput = originalTailorMadeAssemblyCategory; + calculator.CombinedAssemblyCategoryOutput = originalCombinedAssemblyCategory; + + DuneErosionFailurePathView view = CreateView(failureMechanism, new AssessmentSectionStub()); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[sectionsObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsStartPointObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsEndPointObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); + + // Precondition + var assemblyMapData = (MapDataCollection) map.Data.Collection.ElementAt(assemblyResultsIndex); + MapDataTestHelper.AssertAssemblyMapDataCollection(originalSimpleAssembly.Group, + originalDetailedAssemblyCategory, + originalTailorMadeAssemblyCategory, + originalCombinedAssemblyCategory, + assemblyMapData, + failureMechanism); + + // When + var updatedSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var updatedDetailedAssemblyCategory = random.NextEnumValue(); + var updatedTailorMadeAssemblyCategory = random.NextEnumValue(); + var updatedCombinedAssemblyCategory = random.NextEnumValue(); + calculator.SimpleAssessmentAssemblyOutput = updatedSimpleAssembly; + calculator.DetailedAssessmentAssemblyGroupOutput = updatedDetailedAssemblyCategory; + calculator.TailorMadeAssemblyCategoryOutput = updatedTailorMadeAssemblyCategory; + calculator.CombinedAssemblyCategoryOutput = updatedCombinedAssemblyCategory; + failureMechanism.NotifyObservers(); + + // Then + MapDataTestHelper.AssertAssemblyMapDataCollection(updatedSimpleAssembly.Group, + updatedDetailedAssemblyCategory, + updatedTailorMadeAssemblyCategory, + updatedCombinedAssemblyCategory, + assemblyMapData, + failureMechanism); + mocks.VerifyAll(); + } + } + + [Test] + [Apartment(ApartmentState.STA)] + public void GivenViewWithAssemblyData_WhenFailureMechanismSectionResultNotified_ThenMapDataUpdated() + { + // Given + var random = new Random(39); + var failureMechanism = new DuneErosionFailureMechanism(); + FailureMechanismTestHelper.AddSections(failureMechanism, random.Next(1, 10)); + + var originalSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var originalDetailedAssemblyCategory = random.NextEnumValue(); + var originalTailorMadeAssemblyCategory = random.NextEnumValue(); + var originalCombinedAssemblyCategory = random.NextEnumValue(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + calculator.SimpleAssessmentAssemblyOutput = originalSimpleAssembly; + calculator.DetailedAssessmentAssemblyGroupOutput = originalDetailedAssemblyCategory; + calculator.TailorMadeAssemblyCategoryOutput = originalTailorMadeAssemblyCategory; + calculator.CombinedAssemblyCategoryOutput = originalCombinedAssemblyCategory; + + DuneErosionFailurePathView view = CreateView(failureMechanism, new AssessmentSectionStub()); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[simpleAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[detailedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[tailorMadeAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[combinedAssemblyObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); + + // Precondition + var assemblyMapData = (MapDataCollection) map.Data.Collection.ElementAt(assemblyResultsIndex); + MapDataTestHelper.AssertAssemblyMapDataCollection(originalSimpleAssembly.Group, + originalDetailedAssemblyCategory, + originalTailorMadeAssemblyCategory, + originalCombinedAssemblyCategory, + assemblyMapData, + failureMechanism); + + // When + var updatedSimpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); + var updatedDetailedAssemblyCategory = random.NextEnumValue(); + var updatedTailorMadeAssemblyCategory = random.NextEnumValue(); + var updatedCombinedAssemblyCategory = random.NextEnumValue(); + calculator.SimpleAssessmentAssemblyOutput = updatedSimpleAssembly; + calculator.DetailedAssessmentAssemblyGroupOutput = updatedDetailedAssemblyCategory; + calculator.TailorMadeAssemblyCategoryOutput = updatedTailorMadeAssemblyCategory; + calculator.CombinedAssemblyCategoryOutput = updatedCombinedAssemblyCategory; + failureMechanism.SectionResults.First().NotifyObservers(); + + // Then + MapDataTestHelper.AssertAssemblyMapDataCollection(updatedSimpleAssembly.Group, + updatedDetailedAssemblyCategory, + updatedTailorMadeAssemblyCategory, + updatedCombinedAssemblyCategory, + assemblyMapData, + failureMechanism); + mocks.VerifyAll(); + } + } + + [Test] + [Apartment(ApartmentState.STA)] + public void UpdateObserver_DataUpdated_MapLayersSameOrder() + { + // Setup + const int updatedReferenceLineLayerIndex = referenceLineIndex + 3; + const int updatedSectionsCollectionLayerIndex = sectionsCollectionIndex - 1; + const int updatedAssemblyResultsCollectionIndex = assemblyResultsIndex - 1; + const int updatedDuneLocationsLayerIndex = duneLocationsIndex - 1; + + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + DuneErosionFailurePathView view = CreateView(failureMechanism, assessmentSection); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + MapDataCollection mapData = map.Data; + + var dataToMove = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); + mapData.Remove(dataToMove); + mapData.Add(dataToMove); + + List mapDataList = mapData.Collection.ToList(); + + // Precondition + var referenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; + Assert.AreEqual("Referentielijn", referenceLineData.Name); + + var sectionsData = (MapDataCollection) mapDataList[updatedSectionsCollectionLayerIndex]; + Assert.AreEqual("Vakindeling", sectionsData.Name); + + var assemblyResultsData = (MapDataCollection) mapDataList[updatedAssemblyResultsCollectionIndex]; + Assert.AreEqual("Toetsoordeel", assemblyResultsData.Name); + + var duneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; + Assert.AreEqual("Hydraulische belastingen", duneLocationsData.Name); + + var points = new List + { + new Point2D(2.0, 5.0), + new Point2D(4.0, 3.0) + }; + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(points); + assessmentSection.ReferenceLine = referenceLine; + + // Call + assessmentSection.NotifyObservers(); + + // Assert + var actualReferenceLineData = (MapLineData) mapDataList[updatedReferenceLineLayerIndex]; + Assert.AreEqual("Referentielijn", actualReferenceLineData.Name); + + var actualSectionsData = (MapDataCollection) mapDataList[updatedSectionsCollectionLayerIndex]; + Assert.AreEqual("Vakindeling", actualSectionsData.Name); + + var actualAssemblyResultsData = (MapDataCollection) mapDataList[updatedAssemblyResultsCollectionIndex]; + Assert.AreEqual("Toetsoordeel", actualAssemblyResultsData.Name); + + var actualDuneLocationsData = (MapPointData) mapDataList[updatedDuneLocationsLayerIndex]; + Assert.AreEqual("Hydraulische belastingen", actualDuneLocationsData.Name); + } + + private DuneErosionFailurePathView CreateView(DuneErosionFailureMechanism failureMechanism, IAssessmentSection assessmentSection) + { + var view = new DuneErosionFailurePathView(failureMechanism, assessmentSection); + + testForm.Controls.Add(view); + testForm.Show(); + + return view; + } + + private static void AssertEmptyMapData(MapDataCollection mapDataCollection) + { + Assert.AreEqual("Duinwaterkering - Duinafslag", mapDataCollection.Name); + + List mapDataList = mapDataCollection.Collection.ToList(); + + Assert.AreEqual(4, mapDataList.Count); + + var referenceLineMapData = (MapLineData) mapDataList[referenceLineIndex]; + var hydraulicBoundaryLocationsMapData = (MapPointData) mapDataList[duneLocationsIndex]; + + CollectionAssert.IsEmpty(referenceLineMapData.Features); + CollectionAssert.IsEmpty(hydraulicBoundaryLocationsMapData.Features); + + Assert.AreEqual("Referentielijn", referenceLineMapData.Name); + Assert.AreEqual("Hydraulische belastingen", hydraulicBoundaryLocationsMapData.Name); + + var sectionsMapDataCollection = (MapDataCollection) mapDataList[sectionsCollectionIndex]; + Assert.AreEqual("Vakindeling", sectionsMapDataCollection.Name); + List sectionsDataList = sectionsMapDataCollection.Collection.ToList(); + Assert.AreEqual(3, sectionsDataList.Count); + + var sectionsMapData = (MapLineData) sectionsDataList[sectionsIndex]; + var sectionsStartPointMapData = (MapPointData) sectionsDataList[sectionsStartPointIndex]; + var sectionsEndPointMapData = (MapPointData) sectionsDataList[sectionsEndPointIndex]; + + CollectionAssert.IsEmpty(sectionsEndPointMapData.Features); + CollectionAssert.IsEmpty(sectionsStartPointMapData.Features); + CollectionAssert.IsEmpty(sectionsMapData.Features); + + Assert.AreEqual("Vakindeling (eindpunten)", sectionsEndPointMapData.Name); + Assert.AreEqual("Vakindeling (startpunten)", sectionsStartPointMapData.Name); + Assert.AreEqual("Vakindeling", sectionsMapData.Name); + + var assemblyResultsMapDataCollection = (MapDataCollection) mapDataList[assemblyResultsIndex]; + Assert.AreEqual("Toetsoordeel", assemblyResultsMapDataCollection.Name); + List assemblyMapDataList = assemblyResultsMapDataCollection.Collection.ToList(); + Assert.AreEqual(4, assemblyMapDataList.Count); + + var combinedAssemblyMapData = (MapLineData) assemblyMapDataList[combinedAssemblyIndex]; + var simpleAssemblyMapData = (MapLineData) assemblyMapDataList[simpleAssemblyIndex]; + var detailedAssemblyMapData = (MapLineData) assemblyMapDataList[detailedAssemblyIndex]; + var tailorMadeAssemblyMapData = (MapLineData) assemblyMapDataList[tailorMadeAssemblyIndex]; + + CollectionAssert.IsEmpty(combinedAssemblyMapData.Features); + CollectionAssert.IsEmpty(simpleAssemblyMapData.Features); + CollectionAssert.IsEmpty(detailedAssemblyMapData.Features); + CollectionAssert.IsEmpty(tailorMadeAssemblyMapData.Features); + + Assert.AreEqual("Gecombineerd toetsoordeel", combinedAssemblyMapData.Name); + Assert.AreEqual("Toetsoordeel eenvoudige toets", simpleAssemblyMapData.Name); + Assert.AreEqual("Toetsoordeel gedetailleerde toets", detailedAssemblyMapData.Name); + Assert.AreEqual("Toetsoordeel toets op maat", tailorMadeAssemblyMapData.Name); + } + + /// + /// Attaches mocked observers to all map data components. + /// + /// The . + /// The map data collection containing the + /// elements. + /// An array of mocked observers attached to the data in . + private static IObserver[] AttachMapDataObservers(MockRepository mocks, IEnumerable mapData) + { + MapData[] mapDataArray = mapData.ToArray(); + + MapData[] sectionsCollection = ((MapDataCollection) mapDataArray[sectionsCollectionIndex]).Collection.ToArray(); + var sectionsMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsIndex].Attach(sectionsMapDataObserver); + + var sectionsStartPointMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsStartPointIndex].Attach(sectionsStartPointMapDataObserver); + + var sectionsEndPointMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsEndPointIndex].Attach(sectionsEndPointMapDataObserver); + + MapData[] assemblyResultsCollection = ((MapDataCollection) mapDataArray[assemblyResultsIndex]).Collection.ToArray(); + var simpleAssemblyMapDataObserver = mocks.StrictMock(); + assemblyResultsCollection[simpleAssemblyIndex].Attach(simpleAssemblyMapDataObserver); + + var detailedAssemblyMapDataObserver = mocks.StrictMock(); + assemblyResultsCollection[detailedAssemblyIndex].Attach(detailedAssemblyMapDataObserver); + + var tailorMadeAssemblyMapDataObserver = mocks.StrictMock(); + assemblyResultsCollection[tailorMadeAssemblyIndex].Attach(tailorMadeAssemblyMapDataObserver); + + var combinedAssemblyMapDataObserver = mocks.StrictMock(); + assemblyResultsCollection[combinedAssemblyIndex].Attach(combinedAssemblyMapDataObserver); + + return new[] + { + sectionsMapDataObserver, + sectionsStartPointMapDataObserver, + sectionsEndPointMapDataObserver, + simpleAssemblyMapDataObserver, + detailedAssemblyMapDataObserver, + tailorMadeAssemblyMapDataObserver, + combinedAssemblyMapDataObserver + }; + } + + private static void AssertDuneLocationsMapData(DuneErosionFailureMechanism failureMechanism, + MapData mapData) + { + Assert.IsInstanceOf(mapData); + Assert.AreEqual("Hydraulische belastingen", mapData.Name); + + var duneLocationsMapData = (MapPointData) mapData; + DuneErosionMapFeaturesTestHelper.AssertDuneLocationFeaturesData(failureMechanism, duneLocationsMapData.Features); + } + } +} \ No newline at end of file Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs =================================================================== diff -u -recd6b9c740158ab63e5c04861cb506e9c4026b05 -ra57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs (.../DuneErosionPluginTest.cs) (revision ecd6b9c740158ab63e5c04861cb506e9c4026b05) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs (.../DuneErosionPluginTest.cs) (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -123,7 +123,7 @@ ViewInfo[] viewInfos = plugin.GetViewInfos().ToArray(); // Assert - Assert.AreEqual(3, viewInfos.Length); + Assert.AreEqual(4, viewInfos.Length); PluginTestHelper.AssertViewInfoDefined( viewInfos, @@ -135,6 +135,11 @@ viewInfos, typeof(DuneErosionCalculationsContext), typeof(DuneErosionFailureMechanismView)); + + PluginTestHelper.AssertViewInfoDefined( + viewInfos, + typeof(DuneErosionFailurePathContext), + typeof(DuneErosionFailurePathView)); PluginTestHelper.AssertViewInfoDefined( viewInfos, Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailureMechanismViewInfoTest.cs =================================================================== diff -u -r44b91259cb2e5c700d653f429923ecf89f5a0cc6 -ra57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailureMechanismViewInfoTest.cs (.../DuneErosionFailureMechanismViewInfoTest.cs) (revision 44b91259cb2e5c700d653f429923ecf89f5a0cc6) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailureMechanismViewInfoTest.cs (.../DuneErosionFailureMechanismViewInfoTest.cs) (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -20,7 +20,8 @@ // All rights reserved. using System.Linq; -using Core.Common.Controls.Views; +using System.Threading; +using System.Windows.Forms; using Core.Common.TestUtil; using Core.Gui.Plugin; using NUnit.Framework; @@ -83,121 +84,27 @@ } [Test] - public void CloseForData_ViewNotCorrespondingToRemovedAssessmentSection_ReturnsFalse() + [Apartment(ApartmentState.STA)] + public void CreateInstance_WithContext_ReturnDuneFailureMechanismView() { // Setup var assessmentSection = new AssessmentSectionStub(); - var otherAssessmentSection = mocks.Stub(); - mocks.ReplayAll(); - var failureMechanism = new DuneErosionFailureMechanism(); - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - // Call - bool closeForData = info.CloseForData(view, otherAssessmentSection); + var context = new DuneErosionCalculationsContext(failureMechanism, assessmentSection); - // Assert - Assert.IsFalse(closeForData); - } - - mocks.VerifyAll(); - } - - [Test] - public void CloseForData_ViewCorrespondingToRemovedAssessmentSection_ReturnsTrue() - { - // Setup - var assessmentSection = new AssessmentSectionStub(); - var failureMechanism = new DuneErosionFailureMechanism(); - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) + using (var testForm = new Form()) { // Call - bool closeForData = info.CloseForData(view, assessmentSection); + var view = info.CreateInstance(context) as DuneErosionFailureMechanismView; - // Assert - Assert.IsTrue(closeForData); - } - } + testForm.Controls.Add(view); + testForm.Show(); - [Test] - public void CloseForData_ViewNotCorrespondingToRemovedFailureMechanism_ReturnsFalse() - { - // Setup - var assessmentSection = new AssessmentSectionStub(); - var failureMechanism = new DuneErosionFailureMechanism(); - var otherFailureMechanism = new DuneErosionFailureMechanism(); - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - // Call - bool closeForData = info.CloseForData(view, otherFailureMechanism); - // Assert - Assert.IsFalse(closeForData); + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); } } - - [Test] - public void CloseForData_ViewCorrespondingToRemovedFailureMechanism_ReturnsTrue() - { - // Setup - var assessmentSection = new AssessmentSectionStub(); - var failureMechanism = new DuneErosionFailureMechanism(); - - using (var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection)) - { - // Call - bool closeForData = info.CloseForData(view, failureMechanism); - - // Assert - Assert.IsTrue(closeForData); - } - } - - [Test] - [TestCase(true)] - [TestCase(false)] - public void AdditionalDataCheck_Always_ReturnTrueOnlyIfFailureMechanismRelevant(bool isRelevant) - { - // Setup - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var failureMechanism = new DuneErosionFailureMechanism - { - IsRelevant = isRelevant - }; - - var context = new DuneErosionCalculationsContext(failureMechanism, assessmentSection); - - // Call - bool result = info.AdditionalDataCheck(context); - - // Assert - Assert.AreEqual(isRelevant, result); - mocks.VerifyAll(); - } - - [Test] - public void CreateInstance_WithContext_ReturnDuneFailureMechanismView() - { - // Setup - var assessmentSection = new AssessmentSectionStub(); - var failureMechanism = new DuneErosionFailureMechanism(); - - var context = new DuneErosionCalculationsContext(failureMechanism, assessmentSection); - - // Call - IView view = info.CreateInstance(context); - - // Assert - Assert.IsInstanceOf(view); - - var failureMechanismView = (DuneErosionFailureMechanismView) view; - Assert.AreSame(assessmentSection, failureMechanismView.AssessmentSection); - Assert.AreSame(failureMechanism, failureMechanismView.FailureMechanism); - } } } \ No newline at end of file Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailurePathViewInfoTest.cs =================================================================== diff -u --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailurePathViewInfoTest.cs (revision 0) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/DuneErosionFailurePathViewInfoTest.cs (revision a57e6b5e198e898a2cbfc3c35e50a3dfb25a55fe) @@ -0,0 +1,110 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Linq; +using System.Threading; +using System.Windows.Forms; +using Core.Common.TestUtil; +using Core.Gui.Plugin; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.TestUtil; +using Riskeer.DuneErosion.Data; +using Riskeer.DuneErosion.Forms.PresentationObjects; +using Riskeer.DuneErosion.Forms.Views; +using RiskeerCommonFormsResources = Riskeer.Common.Forms.Properties.Resources; + +namespace Riskeer.DuneErosion.Plugin.Test.ViewInfos +{ + [TestFixture] + public class DuneErosionFailurePathViewInfoTest + { + private MockRepository mocks; + private DuneErosionPlugin plugin; + private ViewInfo info; + + [SetUp] + public void SetUp() + { + mocks = new MockRepository(); + plugin = new DuneErosionPlugin(); + info = plugin.GetViewInfos().First(tni => tni.ViewType == typeof(DuneErosionFailurePathView)); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(DuneErosionFailurePathContext), info.DataType); + Assert.AreEqual(typeof(DuneErosionFailurePathContext), info.ViewDataType); + TestHelper.AssertImagesAreEqual(RiskeerCommonFormsResources.FailureMechanismIcon, info.Image); + } + + [Test] + public void GetViewName_WithContext_ReturnsNameOfFailureMechanism() + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new DuneErosionFailureMechanism(); + var context = new DuneErosionFailurePathContext(failureMechanism, assessmentSection); + + // Call + string viewName = info.GetViewName(null, context); + + // Assert + Assert.AreEqual(failureMechanism.Name, viewName); + mocks.VerifyAll(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void CreateInstance_WithContext_ReturnDuneFailureMechanismView() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var context = new DuneErosionFailurePathContext(failureMechanism, assessmentSection); + + using (var testForm = new Form()) + { + // Call + var view = info.CreateInstance(context) as DuneErosionFailurePathView; + + testForm.Controls.Add(view); + testForm.Show(); + + // Assert + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); + } + } + } +} \ No newline at end of file